]>
git.r.bdr.sh - rbdr/lissajous/blob - lib/systems/lissajous_position_updater.js
030d9bab44be5391cc9060a384fe70e9728500e3
1 import { System
} from '@serpentity/serpentity';
2 import LissajousCurve
from '../nodes/lissajous_curve';
6 kPeriod: Math
.PI
* 12000000
10 * Calculates the lissajous curve over time
11 * NOTE: This shouldn't store data, I should have a different entity for
12 * the actual drawable vertices. Either put the storage in the curve, or
13 * create a separate entity.
15 export default class WebGLRenderer
extends System
{
24 this.curves
= engine
.getNodes(LissajousCurve
);
36 this.time
= (this.time
+ dt
/ 500) % internals
.kPeriod
;
38 for (const curve
of this.curves
) {
39 curve
.position
.x
= this._getPosition(curve
.amplitude
.a
, curve
.frequency
.a
, this.time
, curve
.phase
.a
);
40 curve
.position
.y
= this._getPosition(curve
.amplitude
.b
, curve
.frequency
.b
, this.time
, curve
.phase
.b
);
41 curve
.position
.z
= this._getPosition(curve
.amplitude
.c
, curve
.frequency
.c
, this.time
, curve
.phase
.c
);
45 _getPosition(amplitude
, frequency
, time
, phaseShift
) {
47 return amplitude
* Math
.sin(frequency
* time
+ phaseShift
);