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.

102 lines (99 loc) 4.85 kB
import { R as RichTypeAny, f as RichTypeNumber } from './declarationMapper-rcGCdcDP.esm.js'; import { L as Logger, R as RegisterClass } from './index-FzOfPXLV.esm.js'; import { a as FlowGraphAsyncExecutionBlock } from './KHR_interactivity-Bmb38TjL.esm.js'; import './objectModelMapping-CJnQ6at_.esm.js'; /** * @experimental * Block that stops a running animation */ class FlowGraphStopAnimationBlock extends FlowGraphAsyncExecutionBlock { constructor(config) { super(config); this.animationGroup = this.registerDataInput("animationGroup", RichTypeAny); this.stopAtFrame = this.registerDataInput("stopAtFrame", RichTypeNumber, -1); } _preparePendingTasks(context) { const animationToStopValue = this.animationGroup.getValue(context); const stopAtFrame = this.stopAtFrame.getValue(context) ?? -1; // get the context variable const pendingStopAnimations = context._getGlobalContextVariable("pendingStopAnimations", []); // add the animation to the list pendingStopAnimations.push({ uniqueId: animationToStopValue.uniqueId, stopAtFrame }); // set the global context variable context._setGlobalContextVariable("pendingStopAnimations", pendingStopAnimations); } _cancelPendingTasks(context) { // remove the animation from the list const animationToStopValue = this.animationGroup.getValue(context); const pendingStopAnimations = context._getGlobalContextVariable("pendingStopAnimations", []); for (let i = 0; i < pendingStopAnimations.length; i++) { if (pendingStopAnimations[i].uniqueId === animationToStopValue.uniqueId) { pendingStopAnimations.splice(i, 1); // set the global context variable context._setGlobalContextVariable("pendingStopAnimations", pendingStopAnimations); break; } } } _execute(context) { const animationToStopValue = this.animationGroup.getValue(context); const stopTime = this.stopAtFrame.getValue(context) ?? -1; // check the values if (!animationToStopValue) { Logger.Warn("No animation group provided to stop."); return this._reportError(context, "No animation group provided to stop."); } if (isNaN(stopTime)) { return this._reportError(context, "Invalid stop time."); } if (stopTime > 0) { this._startPendingTasks(context); } else { this._stopAnimation(animationToStopValue, context); } // note that out will not be triggered in case of an error this.out._activateSignal(context); } _executeOnTick(context) { const animationToStopValue = this.animationGroup.getValue(context); // check each frame if any animation should be stopped const pendingStopAnimations = context._getGlobalContextVariable("pendingStopAnimations", []); for (let i = 0; i < pendingStopAnimations.length; i++) { // compare the uniqueId to the animation to stop if (pendingStopAnimations[i].uniqueId === animationToStopValue.uniqueId) { // check if the current frame is AFTER the stopAtFrame if (animationToStopValue.getCurrentFrame() >= pendingStopAnimations[i].stopAtFrame) { // stop the animation this._stopAnimation(animationToStopValue, context); // remove the animation from the list pendingStopAnimations.splice(i, 1); // set the global context variable context._setGlobalContextVariable("pendingStopAnimations", pendingStopAnimations); this.done._activateSignal(context); context._removePendingBlock(this); break; } } } } /** * @returns class name of the block. */ getClassName() { return "FlowGraphStopAnimationBlock" /* FlowGraphBlockNames.StopAnimation */; } _stopAnimation(animationGroup, context) { const currentlyRunning = context._getGlobalContextVariable("currentlyRunningAnimationGroups", []); const index = currentlyRunning.indexOf(animationGroup.uniqueId); if (index !== -1) { animationGroup.stop(); currentlyRunning.splice(index, 1); // update the global context variable context._setGlobalContextVariable("currentlyRunningAnimationGroups", currentlyRunning); } } } RegisterClass("FlowGraphStopAnimationBlock" /* FlowGraphBlockNames.StopAnimation */, FlowGraphStopAnimationBlock); export { FlowGraphStopAnimationBlock }; //# sourceMappingURL=flowGraphStopAnimationBlock-Cbd6h2PW.esm.js.map