mirror of
https://github.com/jiawanlong/Cesium-Examples.git
synced 2025-07-06 16:31:03 +00:00
111 lines
2.0 KiB
JavaScript
111 lines
2.0 KiB
JavaScript
import { NodeUpdateType } from './constants.js';
|
|
|
|
class NodeFrame {
|
|
|
|
constructor() {
|
|
|
|
this.time = 0;
|
|
this.deltaTime = 0;
|
|
|
|
this.frameId = 0;
|
|
this.renderId = 0;
|
|
|
|
this.startTime = null;
|
|
|
|
this.frameMap = new WeakMap();
|
|
this.frameBeforeMap = new WeakMap();
|
|
this.renderMap = new WeakMap();
|
|
this.renderBeforeMap = new WeakMap();
|
|
|
|
this.renderer = null;
|
|
this.material = null;
|
|
this.camera = null;
|
|
this.object = null;
|
|
this.scene = null;
|
|
|
|
}
|
|
|
|
updateBeforeNode( node ) {
|
|
|
|
const updateType = node.getUpdateBeforeType();
|
|
|
|
if ( updateType === NodeUpdateType.FRAME ) {
|
|
|
|
if ( this.frameBeforeMap.get( node ) !== this.frameId ) {
|
|
|
|
this.frameBeforeMap.set( node, this.frameId );
|
|
|
|
node.updateBefore( this );
|
|
|
|
}
|
|
|
|
} else if ( updateType === NodeUpdateType.RENDER ) {
|
|
|
|
if ( this.renderBeforeMap.get( node ) !== this.renderId || this.frameBeforeMap.get( node ) !== this.frameId ) {
|
|
|
|
this.renderBeforeMap.set( node, this.renderId );
|
|
this.frameBeforeMap.set( node, this.frameId );
|
|
|
|
node.updateBefore( this );
|
|
|
|
}
|
|
|
|
} else if ( updateType === NodeUpdateType.OBJECT ) {
|
|
|
|
node.updateBefore( this );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
updateNode( node ) {
|
|
|
|
const updateType = node.getUpdateType();
|
|
|
|
if ( updateType === NodeUpdateType.FRAME ) {
|
|
|
|
if ( this.frameMap.get( node ) !== this.frameId ) {
|
|
|
|
this.frameMap.set( node, this.frameId );
|
|
|
|
node.update( this );
|
|
|
|
}
|
|
|
|
} else if ( updateType === NodeUpdateType.RENDER ) {
|
|
|
|
if ( this.renderMap.get( node ) !== this.renderId || this.frameMap.get( node ) !== this.frameId ) {
|
|
|
|
this.renderMap.set( node, this.renderId );
|
|
this.frameMap.set( node, this.frameId );
|
|
|
|
node.update( this );
|
|
|
|
}
|
|
|
|
} else if ( updateType === NodeUpdateType.OBJECT ) {
|
|
|
|
node.update( this );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
update() {
|
|
|
|
this.frameId ++;
|
|
|
|
if ( this.lastTime === undefined ) this.lastTime = performance.now();
|
|
|
|
this.deltaTime = ( performance.now() - this.lastTime ) / 1000;
|
|
|
|
this.lastTime = performance.now();
|
|
|
|
this.time += this.deltaTime;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
export default NodeFrame;
|