]>
git.r.bdr.sh - rbdr/lissajous/blob - lib/main.js
1 import Serpentity
from '@serpentity/serpentity';
2 import { canvasId
, settingsId
, fps
} from './config';
5 import CameraRotator
from './systems/camera_rotator';
6 import WebGLRenderer
from './systems/webgl_renderer';
7 import LissajousPositionUpdater
from './systems/lissajous_position_updater';
8 import CameraAdjuster
from './systems/camera_adjuster';
9 import FrequencyAdjuster
from './systems/frequency_adjuster';
10 import PhaseAdjuster
from './systems/phase_adjuster';
11 import AmplitudeAdjuster
from './systems/amplitude_adjuster';
12 import GlobalAdjuster
from './systems/global_adjuster';
15 import { lissajousCurve
} from './factories/curves';
16 import { camera
, configuration
} from './factories/global';
28 const engine
= new Serpentity();
31 engine
.addEntity(camera());
32 engine
.addEntity(lissajousCurve());
33 engine
.addEntity(configuration());
36 const canvas
= document
.getElementById(canvasId
);
37 const settings
= document
.getElementById(settingsId
);
40 engine
.addSystem(new CameraRotator());
41 engine
.addSystem(new LissajousPositionUpdater());
42 engine
.addSystem(new WebGLRenderer(canvas
));
44 // IMPROVEMENT NOTE: I believe adjusters can be generalized further.
45 // We could potentially have a factory for this.
46 engine
.addSystem(new GlobalAdjuster(settings
));
47 engine
.addSystem(new CameraAdjuster(settings
));
48 engine
.addSystem(new FrequencyAdjuster(settings
));
49 engine
.addSystem(new PhaseAdjuster(settings
));
50 engine
.addSystem(new AmplitudeAdjuster(settings
));
52 internals
.engine
= engine
;
56 internals
.engine
= null;
61 const delta
= time
- internals
.currentTime
;
62 const interval
= 1000 / fps
;
64 if (delta
>= interval
) {
65 internals
.engine
.update(delta
);
66 internals
.currentTime
= time
;
69 internals
.started
&& window
.requestAnimationFrame(internals
.run
);
73 if (!internals
.started
) {
74 internals
.started
= true;
76 window
.requestAnimationFrame(internals
.run
);
81 if (internals
.started
) {
82 internals
.started
= false;