]> git.r.bdr.sh - rbdr/lissajous/blame - lib/systems/frequency_adjuster.js
Add a few comments
[rbdr/lissajous] / lib / systems / frequency_adjuster.js
CommitLineData
362f9116
RBR
1import { System } from '@serpentity/serpentity';
2import Frequent from '../nodes/frequent';
3import { settingsContainer, slider } from '../factories/ui';
4
32e2eed2
RBR
5/**
6 * UI that adjusts the frequency of any compatible object
7 */
362f9116
RBR
8const internals = {
9 symbols: {
10 a: '𝛼',
11 b: '𝛽',
12 c: '𝜁'
13 }
14};
15
16export default class FrequencyAdjuster extends System {
17
18 constructor(container) {
19
20 super();
21 this.container = container;
22 }
23
24 added(engine){
25
26 this.nodes = engine.getNodes(Frequent);
27 this.adjusterContainer = settingsContainer({
28 id: 'frequency-adjuster',
29 label: 'Frequency'
30 })
31
32 let i = 0;
33 for (const node of this.nodes) {
34 const nodeElement = settingsContainer({
35 id: `frequency-adjuster-${i}`,
36 label: `ɣ${i + 1}`,
37 level: 3
38 });
39
40 ['a', 'b', 'c'].forEach(key => {
41 nodeElement.appendChild(slider({
6a87c253 42 id: `frequency-adjuster-${i}-slider-${key}`,
362f9116 43 min: '0',
6a87c253 44 max: (2 * Math.PI).toString(),
3a88e110 45 step: '0.01',
6a87c253 46 shiftStep: (Math.PI / 8).toString(),
362f9116
RBR
47 label: internals.symbols[key],
48 className: `frequency`,
49 get: () => node.frequency[key].toString(),
50 set: (value) => (node.frequency[key] = parseFloat(value))
51 }));
52 });
53
54 this.adjusterContainer.appendChild(nodeElement);
55 ++i;
56 }
57
58 this.container.appendChild(this.adjusterContainer);
59 }
60
61 removed(){
62
63 this.container.removeChild(this.adjusterContainer);
64 delete this.adjusterContainer;
65 delete this.nodes;
66 }
67
68 update(){}
69};