TimerNode.js 1.8 KB
Newer Older
M
r95  
Mr.doob 已提交
1 2
import { FloatNode } from '../inputs/FloatNode.js';
import { NodeLib } from '../core/NodeLib.js';
M
r74  
Mr.doob 已提交
3

M
r95  
Mr.doob 已提交
4 5 6
function TimerNode( scale, scope, timeScale ) {

	FloatNode.call( this );
M
r74  
Mr.doob 已提交
7 8

	this.scale = scale !== undefined ? scale : 1;
M
r95  
Mr.doob 已提交
9
	this.scope = scope || TimerNode.GLOBAL;
M
r90  
Mr.doob 已提交
10

M
r101  
Mr.doob 已提交
11
	this.timeScale = timeScale !== undefined ? timeScale : scale !== undefined;
M
r74  
Mr.doob 已提交
12

M
r95  
Mr.doob 已提交
13
}
M
r74  
Mr.doob 已提交
14

M
r95  
Mr.doob 已提交
15 16 17
TimerNode.GLOBAL = 'global';
TimerNode.LOCAL = 'local';
TimerNode.DELTA = 'delta';
M
r90  
Mr.doob 已提交
18

M
r95  
Mr.doob 已提交
19 20
TimerNode.prototype = Object.create( FloatNode.prototype );
TimerNode.prototype.constructor = TimerNode;
M
r124  
Mr.doob 已提交
21
TimerNode.prototype.nodeType = 'Timer';
M
r90  
Mr.doob 已提交
22

M
r101  
Mr.doob 已提交
23
TimerNode.prototype.getReadonly = function () {
M
r95  
Mr.doob 已提交
24 25

	// never use TimerNode as readonly but aways as "uniform"
M
r90  
Mr.doob 已提交
26 27 28 29 30

	return false;

};

M
r101  
Mr.doob 已提交
31
TimerNode.prototype.getUnique = function () {
M
r90  
Mr.doob 已提交
32 33

	// share TimerNode "uniform" input if is used on more time with others TimerNode
M
r95  
Mr.doob 已提交
34 35

	return this.timeScale && ( this.scope === TimerNode.GLOBAL || this.scope === TimerNode.DELTA );
M
r90  
Mr.doob 已提交
36 37 38

};

M
r95  
Mr.doob 已提交
39
TimerNode.prototype.updateFrame = function ( frame ) {
M
r90  
Mr.doob 已提交
40 41 42

	var scale = this.timeScale ? this.scale : 1;

M
r95  
Mr.doob 已提交
43
	switch ( this.scope ) {
M
r90  
Mr.doob 已提交
44

M
r95  
Mr.doob 已提交
45
		case TimerNode.LOCAL:
M
r90  
Mr.doob 已提交
46

M
r93  
Mr.doob 已提交
47
			this.value += frame.delta * scale;
M
r90  
Mr.doob 已提交
48 49 50

			break;

M
r95  
Mr.doob 已提交
51
		case TimerNode.DELTA:
M
r90  
Mr.doob 已提交
52

M
r93  
Mr.doob 已提交
53
			this.value = frame.delta * scale;
M
r90  
Mr.doob 已提交
54 55 56 57 58

			break;

		default:

M
r93  
Mr.doob 已提交
59
			this.value = frame.time * scale;
M
r90  
Mr.doob 已提交
60 61 62 63 64

	}

};

M
r95  
Mr.doob 已提交
65 66 67 68 69 70 71 72 73
TimerNode.prototype.copy = function ( source ) {

	FloatNode.prototype.copy.call( this, source );

	this.scope = source.scope;
	this.scale = source.scale;

	this.timeScale = source.timeScale;

M
r107  
Mr.doob 已提交
74 75
	return this;

M
r95  
Mr.doob 已提交
76 77 78
};

TimerNode.prototype.toJSON = function ( meta ) {
M
r90  
Mr.doob 已提交
79 80 81 82 83 84 85 86 87

	var data = this.getJSONNode( meta );

	if ( ! data ) {

		data = this.createJSONNode( meta );

		data.scope = this.scope;
		data.scale = this.scale;
M
r95  
Mr.doob 已提交
88

M
r90  
Mr.doob 已提交
89
		data.timeScale = this.timeScale;
M
r74  
Mr.doob 已提交
90

M
r90  
Mr.doob 已提交
91
	}
M
r74  
Mr.doob 已提交
92

M
r90  
Mr.doob 已提交
93
	return data;
M
r74  
Mr.doob 已提交
94 95

};
M
r95  
Mr.doob 已提交
96 97 98 99 100 101 102 103

NodeLib.addKeyword( 'time', function () {

	return new TimerNode();

} );

export { TimerNode };