import { System } from '@serpentity/serpentity'; import LissajousCurve from '../nodes/lissajous_curve'; const internals = { kAmplitude: 1, kPeriod: Math.PI * 12000000 }; export default class WebGLRenderer extends System { constructor() { super(); } added(engine){ this.curves = engine.getNodes(LissajousCurve); this.time = 0; } removed(){ delete this.curves; delete this.time; } update(dt){ this.time = (this.time + dt / 500) % internals.kPeriod; for (const curve of this.curves) { curve.position.x = this._getPosition(curve.amplitude.a, curve.frequency.a, this.time, 0); curve.position.y = this._getPosition(curve.amplitude.b, curve.frequency.b, this.time, 0); curve.position.z = this._getPosition(curve.amplitude.c, curve.frequency.c, this.time, 0); } } _getPosition(amplitude, frequency, time, phaseShift) { return amplitude * Math.sin(frequency * time + phaseShift); } };