diff options
| author | Ruben Beltran del Rio <git@r.bdr.sh> | 2024-05-06 22:28:48 +0200 |
|---|---|---|
| committer | Ruben Beltran del Rio <git@r.bdr.sh> | 2024-05-06 22:28:48 +0200 |
| commit | 5f6ef99eae91f53239f08143cead1249893fef81 (patch) | |
| tree | fac495ea31140060ccd0b916897bbd7adf72fc2f /lib/main.js | |
Initial commit
Diffstat (limited to 'lib/main.js')
| -rw-r--r-- | lib/main.js | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/lib/main.js b/lib/main.js new file mode 100644 index 0000000..6a2ea8f --- /dev/null +++ b/lib/main.js @@ -0,0 +1,62 @@ +import Serpentity from '@serpentity/serpentity'; +import WebGLRenderer from './systems/webgl_renderer'; +import LissajousPositionUpdater from './systems/lissajous_position_updater'; +import { lissajousCurve } from './factories/curves'; +import { canvasId, fps } from './config'; + +const internals = { + + // State variables + + started: false, + currentTime: 0, + engine: null, + + load() { + // Create entities + const engine = new Serpentity(); + + // Add Systems + engine.addSystem(new LissajousPositionUpdater(canvasId)); + engine.addSystem(new WebGLRenderer(canvasId)); + + // Add Entities + engine.addEntity(lissajousCurve()); + + internals.engine = engine; + }, + + unload() { + internals.engine = null; + }, + + run(time) { + + const delta = time - internals.currentTime; + const interval = 1000 / fps; + + if (delta >= interval) { + internals.engine.update(delta); + internals.currentTime = time; + } + + internals.started && window.requestAnimationFrame(internals.run); + }, + + start() { + if (!internals.started) { + internals.started = true; + internals.load(); + window.requestAnimationFrame(internals.run); + } + }, + + stop() { + if (internals.started) { + internals.started = false; + internals.unload(); + } + } +}; + +internals.start(); |