UNPKG

@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.

3 lines (2 loc) 4.76 kB
import{b as e,n as t,M as s,I as a}from"./KHR_interactivity-BMn2G2LI.esm.min.js";import{d as i,k as n}from"./declarationMapper-sl3auZpG.esm.min.js";import{O as r,y as o,u as l}from"./index-OM-TXt9s.esm.min.js";import{F as b}from"./objectModelMapping-DA3c5cv8.esm.min.js";import"./spotLight.pure-guqQj5Iw.esm.min.js";var d;!function(e){e[e.INIT=0]="INIT",e[e.STARTED=1]="STARTED",e[e.ENDED=2]="ENDED"}(d||(d={}));class h{constructor(e){this.onEachCountObservable=new r,this.onTimerAbortedObservable=new r,this.onTimerEndedObservable=new r,this.onStateChangedObservable=new r,this._observer=null,this._breakOnNextTick=!1,this._tick=e=>{const t=Date.now();this._timer=t-this._startTime;const s={startTime:this._startTime,currentTime:t,deltaTime:this._timer,completeRate:this._timer/this._timeToEnd,payload:e},a=this._breakOnNextTick||this._breakCondition(s);a||this._timer>=this._timeToEnd?this._stop(s,a):this.onEachCountObservable.notifyObservers(s)},this._setState(0),this._contextObservable=e.contextObservable,this._observableParameters=e.observableParameters??{},this._breakCondition=e.breakCondition??(()=>!1),this._timeToEnd=e.timeout,e.onEnded&&this.onTimerEndedObservable.add(e.onEnded),e.onTick&&this.onEachCountObservable.add(e.onTick),e.onAborted&&this.onTimerAbortedObservable.add(e.onAborted)}set breakCondition(e){this._breakCondition=e}clearObservables(){this.onEachCountObservable.clear(),this.onTimerAbortedObservable.clear(),this.onTimerEndedObservable.clear(),this.onStateChangedObservable.clear()}start(e=this._timeToEnd){if(1===this._state)throw new Error("Timer already started. Please stop it before starting again");this._timeToEnd=e,this._startTime=Date.now(),this._timer=0,this._observer=this._contextObservable.add(this._tick,this._observableParameters.mask,this._observableParameters.insertFirst,this._observableParameters.scope),this._setState(1)}stop(){1===this._state&&(this._breakOnNextTick=!0)}dispose(){this._observer&&this._contextObservable.remove(this._observer),this.clearObservables()}_setState(e){this._state=e,this.onStateChangedObservable.notifyObservers(this._state)}_stop(e,t=!1){this._contextObservable.remove(this._observer),this._setState(2),t?this.onTimerAbortedObservable.notifyObservers(e):this.onTimerEndedObservable.notifyObservers(e)}}class c extends e{constructor(e){super(e),this.cancel=this._registerSignalInput("cancel"),this.duration=this.registerDataInput("duration",i),this.lastDelayIndex=this.registerDataOutput("lastDelayIndex",n,new b(-1))}_preparePendingTasks(e){const s=this.duration.getValue(e);if(s<0||isNaN(s)||!isFinite(s))return this._reportError(e,"Invalid duration in SetDelay block");if(e._getGlobalContextVariable("activeDelays",0)>=c.MaxParallelDelayCount)return this._reportError(e,"Max parallel delays reached");const a=e._getGlobalContextVariable("lastDelayIndex",-1),i=e._getExecutionVariable(this,"pendingDelays",[]),n=e.configuration.scene,r=new h({timeout:1e3*s,contextObservable:n.onBeforeRenderObservable,onEnded:()=>this._onEnded(r,e)});r.start();const o=a+1;this.lastDelayIndex.setValue(new b(o),e),e._setGlobalContextVariable("lastDelayIndex",o),t(e,o),i[o]=r,e._setExecutionVariable(this,"pendingDelays",i),this._updateGlobalTimers(e)}_cancelPendingTasks(e){const t=e._getExecutionVariable(this,"pendingDelays",[]),a=e._getGlobalContextVariable("pendingDelays",[]);for(let i=0;i<t.length;i++){const n=t[i];n&&(n.dispose(),s(e,i),delete a[i])}e._setGlobalContextVariable("pendingDelays",a),e._deleteExecutionVariable(this,"pendingDelays"),this.lastDelayIndex.setValue(new b(-1),e),this._updateGlobalTimers(e)}_execute(e,t){t!==this.cancel?(this._preparePendingTasks(e),this.out._activateSignal(e)):this._cancelPendingTasks(e)}getClassName(){return"FlowGraphSetDelayBlock"}_onEnded(e,t){const a=t._getExecutionVariable(this,"pendingDelays",[]),i=a.indexOf(e);if(-1!==i){delete a[i];const e=t._getGlobalContextVariable("pendingDelays",[]);delete e[i],t._setGlobalContextVariable("pendingDelays",e),s(t,i)}else o.Warn("FlowGraphTimerBlock: Timer ended but was not found in the running timers list");t._removePendingBlock(this),this.done._activateSignal(t),this._updateGlobalTimers(t)}_updateGlobalTimers(e){const t=e._getExecutionVariable(this,"pendingDelays",[]),s=e._getGlobalContextVariable("pendingDelays",[]);for(let i=0;i<t.length;i++){if(!t[i]||!a(e,i))continue;const n=t[i];s[i]&&s[i]!==n?o.Warn("FlowGraphTimerBlock: Timer ended but was not found in the running timers list"):s[i]=n}e._setGlobalContextVariable("pendingDelays",s)}}c.MaxParallelDelayCount=100;let _=!1;function m(){_||(_=!0,l("FlowGraphSetDelayBlock",c))}m();export{c as FlowGraphSetDelayBlock,m as RegisterFlowGraphSetDelayBlock}; //# sourceMappingURL=flowGraphSetDelayBlock-DsMKKjQN.esm.min.js.map