MCP 3D Printer Server

by DMontgomery40
Verified
/** * This module manages the internal animation loop of the renderer. * * @private */ class Animation { /** * Constructs a new animation loop management component. * * @param {Nodes} nodes - Renderer component for managing nodes related logic. * @param {Info} info - Renderer component for managing metrics and monitoring data. */ constructor( nodes, info ) { /** * Renderer component for managing nodes related logic. * * @type {Nodes} */ this.nodes = nodes; /** * Renderer component for managing metrics and monitoring data. * * @type {Info} */ this.info = info; /** * A reference to the context from `requestAnimationFrame()` can * be called (usually `window`). * * @type {Window|XRSession} */ this._context = self; /** * The user-defined animation loop. * * @type {Function?} * @default null */ this._animationLoop = null; /** * The requestId which is returned from the `requestAnimationFrame()` call. * Can be used to cancel the stop the animation loop. * * @type {Number?} * @default null */ this._requestId = null; } /** * Starts the internal animation loop. */ start() { const update = ( time, frame ) => { this._requestId = this._context.requestAnimationFrame( update ); if ( this.info.autoReset === true ) this.info.reset(); this.nodes.nodeFrame.update(); this.info.frame = this.nodes.nodeFrame.frameId; if ( this._animationLoop !== null ) this._animationLoop( time, frame ); }; update(); } /** * Stops the internal animation loop. */ stop() { this._context.cancelAnimationFrame( this._requestId ); this._requestId = null; } /** * Returns the user-level animation loop. * * @return {Function} The animation loop. */ getAnimationLoop() { return this._animationLoop; } /** * Defines the user-level animation loop. * * @param {Function} callback - The animation loop. */ setAnimationLoop( callback ) { this._animationLoop = callback; } /** * Returns the animation context. * * @return {Window|XRSession} The animation context. */ getContext() { return this._context; } /** * Defines the context in which `requestAnimationFrame()` is executed. * * @param {Window|XRSession} context - The context to set. */ setContext( context ) { this._context = context; } /** * Frees all internal resources and stops the animation loop. */ dispose() { this.stop(); } } export default Animation;