@babylonjs/viewer
Version:
The Babylon Viewer aims to simplify a specific but common Babylon.js use case: loading, viewing, and interacting with a 3D model.
111 lines (107 loc) • 4.26 kB
JavaScript
import { c as FlowGraphExecutionBlockWithOutSignal } from './KHR_interactivity-CEwUaqxQ.esm.js';
import { j as RichTypeFlowGraphInteger, F as FlowGraphInteger } from './declarationMapper-CqO08-WM.esm.js';
import { u as RegisterClass } from './index-MZPybX0H.esm.js';
import './objectModelMapping-De5EKNEZ.esm.js';
import './spotLight.pure-CRdZC6Ci.esm.js';
/** This file must only contain pure code and pure imports */
/**
* A block that waits for all input flows to be activated before activating its output flow.
*/
class FlowGraphWaitAllBlock extends FlowGraphExecutionBlockWithOutSignal {
constructor(
/**
* the configuration of the block
*/
config) {
super(config);
this.config = config;
/**
* An array of input signals
*/
this.inFlows = [];
this._cachedActivationState = [];
this.reset = this._registerSignalInput("reset");
this.completed = this._registerSignalOutput("completed");
this.remainingInputs = this.registerDataOutput("remainingInputs", RichTypeFlowGraphInteger, new FlowGraphInteger(this.config.inputSignalCount || 0));
// The first inFlow is the default input signal all execution blocks have
for (let i = 0; i < this.config.inputSignalCount; i++) {
this.inFlows.push(this._registerSignalInput(`in_${i}`));
}
// no need for in
this._unregisterSignalInput("in");
}
_getCurrentActivationState(context) {
const activationState = this._cachedActivationState;
activationState.length = 0;
if (!context._hasExecutionVariable(this, "activationState")) {
for (let i = 0; i < this.config.inputSignalCount; i++) {
activationState.push(false);
}
}
else {
const contextActivationState = context._getExecutionVariable(this, "activationState", []);
for (let i = 0; i < contextActivationState.length; i++) {
activationState.push(contextActivationState[i]);
}
}
return activationState;
}
_execute(context, callingSignal) {
const activationState = this._getCurrentActivationState(context);
if (callingSignal === this.reset) {
for (let i = 0; i < this.config.inputSignalCount; i++) {
activationState[i] = false;
}
}
else {
const index = this.inFlows.indexOf(callingSignal);
if (index >= 0) {
activationState[index] = true;
}
}
this.remainingInputs.setValue(new FlowGraphInteger(activationState.filter((v) => !v).length), context);
context._setExecutionVariable(this, "activationState", activationState.slice());
if (!activationState.includes(false)) {
this.completed._activateSignal(context);
for (let i = 0; i < this.config.inputSignalCount; i++) {
activationState[i] = false;
}
}
else {
callingSignal !== this.reset && this.out._activateSignal(context);
}
}
/**
* @returns class name of the block.
*/
getClassName() {
return "FlowGraphWaitAllBlock" /* FlowGraphBlockNames.WaitAll */;
}
/**
* Serializes this block into a object
* @param serializationObject the object to serialize to
*/
serialize(serializationObject) {
super.serialize(serializationObject);
serializationObject.config.inputFlows = this.config.inputSignalCount;
}
}
let _Registered = false;
/**
* Register side effects for flowGraphWaitAllBlock.
* Safe to call multiple times; only the first call has an effect.
*/
function RegisterFlowGraphWaitAllBlock() {
if (_Registered) {
return;
}
_Registered = true;
RegisterClass("FlowGraphWaitAllBlock" /* FlowGraphBlockNames.WaitAll */, FlowGraphWaitAllBlock);
}
/**
* Re-exports pure implementation and applies runtime side effects.
* Import flowGraphWaitAllBlock.pure for tree-shakeable, side-effect-free usage.
*/
RegisterFlowGraphWaitAllBlock();
export { FlowGraphWaitAllBlock, RegisterFlowGraphWaitAllBlock };
//# sourceMappingURL=flowGraphWaitAllBlock-BLBqat0S.esm.js.map