blob: 6a2ea8f9cc427f38372ec488f8298be956c4c6a7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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();
|