]>
Commit | Line | Data |
---|---|---|
1 | import { System } from '@serpentity/serpentity'; | |
2 | import Frequent from '../nodes/frequent'; | |
3 | import { settingsContainer, slider } from '../factories/ui'; | |
4 | ||
5 | /** | |
6 | * UI that adjusts the frequency of any compatible object | |
7 | */ | |
8 | const internals = { | |
9 | symbols: { | |
10 | a: '𝛼', | |
11 | b: '𝛽', | |
12 | c: '𝜁' | |
13 | } | |
14 | }; | |
15 | ||
16 | export 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({ | |
42 | id: `frequency-adjuster-${i}-slider-${key}`, | |
43 | min: '0', | |
44 | max: (2 * Math.PI).toString(), | |
45 | step: '0.01', | |
46 | shiftStep: (Math.PI / 8).toString(), | |
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 | }; |