import Serpentity from '@serpentity/serpentity';
+import { canvasId, settingsId, fps } from './config';
+
+// Systems
+import CameraRotator from './systems/camera_rotator';
import WebGLRenderer from './systems/webgl_renderer';
import LissajousPositionUpdater from './systems/lissajous_position_updater';
+import CameraAdjuster from './systems/camera_adjuster';
+import FrequencyAdjuster from './systems/frequency_adjuster';
+import AmplitudeAdjuster from './systems/amplitude_adjuster';
+import GlobalAdjuster from './systems/global_adjuster';
+
+// Factories
import { lissajousCurve } from './factories/curves';
-import { canvasId, fps } from './config';
+import { camera, configuration } from './factories/global';
const internals = {
// Create entities
const engine = new Serpentity();
- // Add Systems
- engine.addSystem(new LissajousPositionUpdater(canvasId));
- engine.addSystem(new WebGLRenderer(canvasId));
-
// Add Entities
+ engine.addEntity(camera());
engine.addEntity(lissajousCurve());
+ engine.addEntity(configuration());
+
+ // Select elements
+ const canvas = document.getElementById(canvasId);
+ const settings = document.getElementById(settingsId);
+
+ // Add Systems
+ engine.addSystem(new CameraRotator());
+ engine.addSystem(new LissajousPositionUpdater());
+ engine.addSystem(new WebGLRenderer(canvas));
+
+ // IMPROVEMENT NOTE: I believe adjusters can be generalized further.
+ // We could potentially have a factory for this.
+ engine.addSystem(new GlobalAdjuster(settings));
+ engine.addSystem(new CameraAdjuster(settings));
+ engine.addSystem(new FrequencyAdjuster(settings));
+ engine.addSystem(new AmplitudeAdjuster(settings));
internals.engine = engine;
},