aboutsummaryrefslogtreecommitdiff
path: root/lib/systems/camera_adjuster.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/systems/camera_adjuster.js')
-rw-r--r--lib/systems/camera_adjuster.js74
1 files changed, 74 insertions, 0 deletions
diff --git a/lib/systems/camera_adjuster.js b/lib/systems/camera_adjuster.js
new file mode 100644
index 0000000..3b6ea41
--- /dev/null
+++ b/lib/systems/camera_adjuster.js
@@ -0,0 +1,74 @@
+import { System } from '@serpentity/serpentity';
+import Cameras from '../nodes/cameras';
+import { settingsContainer, slider } from '../factories/ui';
+
+const internals = {
+ symbols: {
+ x: '𝜃',
+ y: '𝜓',
+ z: '𝜙'
+ }
+};
+
+export default class CameraAdjuster extends System {
+
+ constructor(container) {
+
+ super();
+ this.container = container;
+ }
+
+ added(engine){
+
+ this.nodes = engine.getNodes(Cameras);
+ this.adjusterContainer = settingsContainer({
+ id: 'camera-adjuster',
+ label: 'Camera'
+ })
+
+ let i = 0;
+ for (const node of this.nodes) {
+ const nodeElement = settingsContainer({
+ id: `camera-adjuster-${i}`,
+ label: `C${i + 1}`,
+ level: 3
+ });
+
+ nodeElement.appendChild(slider({
+ min: '2',
+ max: '10',
+ step: '0.1',
+ label: '𝑟',
+ className: 'radius',
+ get: () => node.radius.radius.toString(),
+ set: (value) => (node.radius.radius = parseFloat(value))
+ }));
+
+ ['x', 'y', 'z'].forEach(key => {
+ nodeElement.appendChild(slider({
+ min: '0',
+ max: '0.5',
+ step: '0.001',
+ label: internals.symbols[key],
+ className: `rotation-${key}`,
+ get: () => node.velocity[key].toString(),
+ set: (value) => (node.velocity[key] = parseFloat(value))
+ }));
+ });
+
+ this.adjusterContainer.appendChild(nodeElement);
+ ++i;
+ }
+
+ this.container.appendChild(this.adjusterContainer);
+ }
+
+ removed(){
+
+ this.container.removeChild(this.adjusterContainer);
+ delete this.adjusterContainer;
+ delete this.nodes;
+ }
+
+ update(){}
+};