@woosh/meep-engine 2.46.29 → 2.46.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/editor/Editor.js +793 -0
  2. package/editor/SelectionVisualizer.js +148 -0
  3. package/editor/actions/concrete/ActionUpdateTexture.js +21 -0
  4. package/editor/actions/concrete/ArrayCopyAction.js +39 -0
  5. package/editor/actions/concrete/ComponentAddAction.js +47 -0
  6. package/editor/actions/concrete/ComponentRemoveAction.js +38 -0
  7. package/editor/actions/concrete/EntityCreateAction.js +47 -0
  8. package/editor/actions/concrete/EntityRemoveAction.js +51 -0
  9. package/editor/actions/concrete/ModifyPatchSampler2DAction.js +118 -0
  10. package/editor/actions/concrete/ModifyPatchSampler2DAction.spec.js +30 -0
  11. package/editor/actions/concrete/ModifyPatchTextureArray2DAction.js +182 -0
  12. package/editor/actions/concrete/PaintTerrainOverlayAction.js +45 -0
  13. package/editor/actions/concrete/PatchTerrainHeightAction.js +67 -0
  14. package/editor/actions/concrete/PatchTerrainTextureAction.js +152 -0
  15. package/editor/actions/concrete/SelectionAddAction.js +36 -0
  16. package/editor/actions/concrete/SelectionClearAction.js +22 -0
  17. package/editor/actions/concrete/SelectionRemoveAction.js +30 -0
  18. package/editor/actions/concrete/TransformModifyAction.js +46 -0
  19. package/editor/actions/concrete/WriteGridValueAction.js +46 -0
  20. package/editor/ecs/EditorEntity.js +12 -0
  21. package/editor/ecs/EditorEntitySystem.js +14 -0
  22. package/editor/ecs/component/FieldDescriptor.js +34 -0
  23. package/editor/ecs/component/FieldValueAdapter.js +20 -0
  24. package/editor/ecs/component/TypeEditor.js +33 -0
  25. package/editor/ecs/component/TypeSchema.d.ts +38 -0
  26. package/editor/ecs/component/createFieldEditor.js +92 -0
  27. package/editor/ecs/component/createObjectEditor.js +361 -0
  28. package/editor/ecs/component/editors/ColorEditor.js +39 -0
  29. package/editor/ecs/component/editors/HTMLElementEditor.js +17 -0
  30. package/editor/ecs/component/editors/ImagePathEditor.js +82 -0
  31. package/editor/ecs/component/editors/LargeStrongEditor.js +107 -0
  32. package/editor/ecs/component/editors/NumericIntervalEditor.js +86 -0
  33. package/editor/ecs/component/editors/ObservedBooleanEditor.js +13 -0
  34. package/editor/ecs/component/editors/ObservedEnumEditor.js +32 -0
  35. package/editor/ecs/component/editors/ObservedIntegerEditor.js +43 -0
  36. package/editor/ecs/component/editors/ObservedStringEditor.js +51 -0
  37. package/editor/ecs/component/editors/Sampler2DEditor.js +221 -0
  38. package/editor/ecs/component/editors/collection/ListEditor.js +83 -0
  39. package/editor/ecs/component/editors/common/BitFlagsEditor.js +80 -0
  40. package/editor/ecs/component/editors/common/EnumEditor.js +41 -0
  41. package/editor/ecs/component/editors/common/makeV3_editor.js +85 -0
  42. package/editor/ecs/component/editors/common/noEditor.js +9 -0
  43. package/editor/ecs/component/editors/ecs/GridObstacleEditor.js +17 -0
  44. package/editor/ecs/component/editors/ecs/MinimapMarkerEditor.js +16 -0
  45. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.js +225 -0
  46. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.js +17 -0
  47. package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.js +18 -0
  48. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.js +58 -0
  49. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.js +58 -0
  50. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.js +21 -0
  51. package/editor/ecs/component/editors/ecs/Trail2DEditor.js +33 -0
  52. package/editor/ecs/component/editors/ecs/TransformEditor.js +23 -0
  53. package/editor/ecs/component/editors/ecs/terrain/SplatMappingEditor.js +21 -0
  54. package/editor/ecs/component/editors/ecs/terrain/TerrainEditor.js +95 -0
  55. package/editor/ecs/component/editors/ecs/terrain/TerrainLayerEditor.js +18 -0
  56. package/editor/ecs/component/editors/ecs/terrain/TerrainLayersEditor.js +22 -0
  57. package/editor/ecs/component/editors/ecs/terrain/TerrainOverlayEditor.js +20 -0
  58. package/editor/ecs/component/editors/geom/QuaternionEditor.js +63 -0
  59. package/editor/ecs/component/editors/geom/Vector1Editor.js +57 -0
  60. package/editor/ecs/component/editors/geom/Vector2Editor.js +11 -0
  61. package/editor/ecs/component/editors/geom/Vector3Editor.js +13 -0
  62. package/editor/ecs/component/editors/geom/Vector4Editor.js +12 -0
  63. package/editor/ecs/component/editors/primitive/ArrayEditor.js +46 -0
  64. package/editor/ecs/component/editors/primitive/BooleanEditor.js +27 -0
  65. package/editor/ecs/component/editors/primitive/FunctionEditor.js +29 -0
  66. package/editor/ecs/component/editors/primitive/NumberEditor.js +60 -0
  67. package/editor/ecs/component/editors/primitive/ObjectEditor.js +12 -0
  68. package/editor/ecs/component/editors/primitive/StringEditor.js +31 -0
  69. package/editor/ecs/component/editors/three/BufferGeometryEditor.js +28 -0
  70. package/editor/ecs/component/editors/three/MaterialEditor.js +27 -0
  71. package/editor/ecs/component/editors/three/MeshEditor.js +35 -0
  72. package/editor/ecs/component/editors/three/TextureEditor.js +112 -0
  73. package/editor/ecs/component/findNearestRegisteredType.js +59 -0
  74. package/editor/ecs/component/prototypeObjectEditor.js +379 -0
  75. package/editor/enableEditor.js +85 -0
  76. package/editor/library/MeshLibrary.js +33 -0
  77. package/editor/process/DisableGameUIProcess.js +43 -0
  78. package/editor/process/EditorProcess.js +35 -0
  79. package/editor/process/ObstacleGridDisplayProcess.js +120 -0
  80. package/editor/process/ProcessEngine.js +123 -0
  81. package/editor/process/SymbolicDisplayProcess.js +132 -0
  82. package/editor/process/symbolic/ComponentSymbolicDisplay.js +34 -0
  83. package/editor/process/symbolic/SymbolicDisplayInternalAPI.js +159 -0
  84. package/editor/process/symbolic/buildThreeJSHelperEntity.js +36 -0
  85. package/editor/process/symbolic/make3DSymbolicDisplay.js +91 -0
  86. package/editor/process/symbolic/makeCameraSymbolicDisplay.js +32 -0
  87. package/editor/process/symbolic/makeGridPositionSymbolDisplay.js +176 -0
  88. package/editor/process/symbolic/makeHelperBoxGeometry.js +44 -0
  89. package/editor/process/symbolic/makeHelperSphereGeometry.js +73 -0
  90. package/editor/process/symbolic/makeLightSymbolicDisplay.js +77 -0
  91. package/editor/process/symbolic/makeParticleEmitterSymbolicDisplay.js +146 -0
  92. package/editor/process/symbolic/makePathSymbolicDisplay.js +105 -0
  93. package/editor/process/symbolic/makePositionedIconDisplaySymbol.js +74 -0
  94. package/editor/process/symbolic/makeSocketsSymbolicDisplay.js +153 -0
  95. package/editor/process/symbolic/makeSolidArrowGeometry.js +391 -0
  96. package/editor/process/symbolic/makeSoundEmitterSymbolicDisplay.js +89 -0
  97. package/editor/process/symbolic/makeStoryTriggerSetAreaDisplay.js +114 -0
  98. package/editor/process/symbolic/synchronizeTransform.js +50 -0
  99. package/editor/tools/FoliagePaintTool.js +168 -0
  100. package/editor/tools/GridPaintTool.js +247 -0
  101. package/editor/tools/SelectionTool.js +407 -0
  102. package/editor/tools/TopDownCameraControlTool.js +59 -0
  103. package/editor/tools/TransformTool.js +370 -0
  104. package/editor/tools/engine/Tool.js +121 -0
  105. package/editor/tools/engine/ToolEngine.js +193 -0
  106. package/editor/tools/engine/ToolState.js +9 -0
  107. package/editor/tools/engine/ToolStateMachine.js +53 -0
  108. package/editor/tools/paint/TerrainHeightPaintTool.js +297 -0
  109. package/editor/tools/paint/TerrainPaintTool.js +211 -0
  110. package/editor/tools/paint/TerrainTexturePaintTool.js +193 -0
  111. package/editor/tools/paint/prototypeTerrainEditor.js +135 -0
  112. package/editor/tools/v2/BlenderCameraOrientationGizmo.d.ts +50 -0
  113. package/editor/tools/v2/BlenderCameraOrientationGizmo.js +500 -0
  114. package/editor/tools/v2/TransformControls.d.ts +20 -0
  115. package/editor/tools/v2/TransformControls.js +1782 -0
  116. package/editor/tools/v2/prototypeTransformControls.js +92 -0
  117. package/editor/view/EditorView.js +462 -0
  118. package/editor/view/GridPickCoordinateView.js +88 -0
  119. package/editor/view/ecs/ComponentControlFactory.js +48 -0
  120. package/editor/view/ecs/ComponentControlView.js +214 -0
  121. package/editor/view/ecs/EntityEditor.js +258 -0
  122. package/editor/view/ecs/EntityList.js +258 -0
  123. package/editor/view/ecs/components/BlackboardController.js +50 -0
  124. package/editor/view/ecs/components/DatGuiController.js +216 -0
  125. package/editor/view/ecs/components/FogOfWarController.js +78 -0
  126. package/editor/view/ecs/components/FogOfWarRevealerController.js +44 -0
  127. package/editor/view/ecs/components/GeneratedArmyController.js +42 -0
  128. package/editor/view/ecs/components/GridObstacleController.js +72 -0
  129. package/editor/view/ecs/components/GridPositionController.js +40 -0
  130. package/editor/view/ecs/components/HeadsUpDisplayController.js +30 -0
  131. package/editor/view/ecs/components/HighlightController.js +47 -0
  132. package/editor/view/ecs/components/MeshController.js +125 -0
  133. package/editor/view/ecs/components/PathFollowerController.js +87 -0
  134. package/editor/view/ecs/components/TagController.js +80 -0
  135. package/editor/view/ecs/components/TerrainController.js +225 -0
  136. package/editor/view/ecs/components/TransformController.js +103 -0
  137. package/editor/view/ecs/components/UnitShopController.js +112 -0
  138. package/editor/view/ecs/components/army/ArmyController.js +130 -0
  139. package/editor/view/ecs/components/color/GaugeView.js +107 -0
  140. package/editor/view/ecs/components/common/AutoCanvasView.js +53 -0
  141. package/editor/view/ecs/components/common/LineView.js +17 -0
  142. package/editor/view/ecs/components/common/NumberController.js +112 -0
  143. package/editor/view/ecs/components/common/NumericIntervalController.js +64 -0
  144. package/editor/view/ecs/components/gui/GUIElementController.js +117 -0
  145. package/editor/view/ecs/components/items/ItemContainerController.js +132 -0
  146. package/editor/view/ecs/components/items/ItemContainerController.stories.js +50 -0
  147. package/editor/view/ecs/components/items/ItemController.js +52 -0
  148. package/editor/view/ecs/components/particles/ColorParameterLUTController.js +444 -0
  149. package/editor/view/ecs/components/particles/ParameterTrackController.js +51 -0
  150. package/editor/view/ecs/components/particles/ParticleEmitterController.js +213 -0
  151. package/editor/view/ecs/components/particles/ParticleLayerController.js +213 -0
  152. package/editor/view/ecs/components/particles/ScalarParameterLUTController.js +401 -0
  153. package/editor/view/ecs/components/sockets/AttachmentSocketsController.js +51 -0
  154. package/editor/view/ecs/components/sound/SoundEmitterController.js +137 -0
  155. package/editor/view/ecs/components/story/StoryTriggerSetController.js +214 -0
  156. package/editor/view/ecs/components/unit/AuraController.js +45 -0
  157. package/editor/view/library/MeshLibraryView.js +164 -0
  158. package/editor/view/node-graph/NodeGraphEditorView.js +170 -0
  159. package/editor/view/node-graph/NodeGraphView.js +453 -0
  160. package/editor/view/node-graph/NodeView.js +135 -0
  161. package/editor/view/node-graph/PortView.js +69 -0
  162. package/editor/view/process/ProcessView.js +63 -0
  163. package/editor/view/tools/ToolSettingsView.js +143 -0
  164. package/editor/view/tools/ToolView.js +58 -0
  165. package/package.json +2 -1
@@ -0,0 +1,72 @@
1
+ import ObservedValue from "../../../../src/core/model/ObservedValue.js";
2
+ import View from "../../../../src/view/View.js";
3
+ import { CanvasView } from "../../../../src/view/elements/CanvasView.js";
4
+ import DatGuiController from "./DatGuiController.js";
5
+ import convertSampler2D2Canvas from "../../../../src/engine/graphics/texture/sampler/Sampler2D2Canvas.js";
6
+ import { Sampler2D } from "../../../../src/engine/graphics/texture/sampler/Sampler2D.js";
7
+ import { scaleSampler2D } from "../../../../src/engine/graphics/texture/sampler/scaleSampler2D.js";
8
+ import Vector2 from "../../../../src/core/geom/Vector2.js";
9
+
10
+ /**
11
+ *
12
+ * @param {GridObstacle} grid
13
+ * @param {HTMLCanvasElement} canvas
14
+ */
15
+ export function buildGridObstaclePreview(grid, canvas) {
16
+ const source = new Sampler2D(grid.data, 1, grid.size.x, grid.size.y);
17
+
18
+ const target = Sampler2D.uint8(1, canvas.width, canvas.height);
19
+
20
+ scaleSampler2D(source, target);
21
+
22
+ convertSampler2D2Canvas(target, 255, 0, canvas);
23
+ }
24
+
25
+ export class GridObstacleController extends View {
26
+ constructor() {
27
+ super();
28
+
29
+ this.el = document.createElement('div');
30
+
31
+ this.model = new ObservedValue(null);
32
+
33
+ const self = this;
34
+
35
+ /**
36
+ *
37
+ * @param {GridObstacle} model
38
+ */
39
+ function setModel(model) {
40
+ self.removeAllChildren();
41
+
42
+ const vPreview = new CanvasView();
43
+
44
+ vPreview.size.set(200, 200);
45
+
46
+ buildGridObstaclePreview(model, vPreview.el);
47
+
48
+ self.addChild(vPreview);
49
+
50
+ const controller = new DatGuiController();
51
+
52
+ self.addChild(controller);
53
+
54
+ const proxy = {
55
+ size: new Vector2(model.size.x, model.size.y)
56
+ };
57
+
58
+ controller.add(proxy, 'size');
59
+ controller.addAction(() => {
60
+ buildGridObstaclePreview(model, vPreview.el);
61
+ }, 'update preview');
62
+
63
+ proxy.size.onChanged.add((x, y) => {
64
+ model.resize(x, y);
65
+
66
+ buildGridObstaclePreview(model, vPreview.el);
67
+ });
68
+ }
69
+
70
+ this.model.onChanged.add(setModel);
71
+ }
72
+ }
@@ -0,0 +1,40 @@
1
+ import GuiControl from "../../../../src/view/controller/controls/GuiControl.js";
2
+ import Vector2Control from "../../../../src/view/controller/controls/Vector2Control.js";
3
+ import LabelView from "../../../../src/view/common/LabelView.js";
4
+
5
+ export class GridPositionController extends GuiControl {
6
+ constructor() {
7
+ super();
8
+
9
+ this.cPosition = new Vector2Control();
10
+
11
+
12
+ const self = this;
13
+
14
+ this.handlers = {
15
+ modelChanged: function (newModel, oldModel) {
16
+ if (newModel !== null) {
17
+ self.cPosition.model.set(newModel);
18
+ }
19
+ if (oldModel !== null) {
20
+ //do nothing really
21
+ }
22
+ }
23
+ };
24
+
25
+ const lPosition = new LabelView('Position');
26
+
27
+ this.addChild(lPosition);
28
+ this.addChild(this.cPosition);
29
+
30
+ this.bindSignal(this.model.onChanged, this.handlers.modelChanged);
31
+ }
32
+
33
+ link() {
34
+ super.link();
35
+
36
+ if (this.model.getValue() !== null) {
37
+ this.handlers.modelChanged(this.model.getValue(), null);
38
+ }
39
+ }
40
+ }
@@ -0,0 +1,30 @@
1
+ import DatGuiController from "./DatGuiController.js";
2
+ import { clear } from "../../../../src/view/controller/dat/DatGuiUtils.js";
3
+ import { HeadsUpDisplayFlag } from "../../../../src/engine/ecs/gui/hud/HeadsUpDisplayFlag.js";
4
+
5
+ export class HeadsUpDisplayController extends DatGuiController {
6
+ constructor() {
7
+ super();
8
+
9
+ const self = this;
10
+
11
+
12
+ /**
13
+ *
14
+ * @param {HeadsUpDisplay} model
15
+ */
16
+ function setModel(model) {
17
+ const gui = self.gui;
18
+
19
+ clear(gui);
20
+
21
+ if (model !== null) {
22
+ self.add(model, 'worldOffset');
23
+ self.addBitFlag(model, 'flags', HeadsUpDisplayFlag.TransformWorldOffset, 'transform offset');
24
+ self.addBitFlag(model, 'flags', HeadsUpDisplayFlag.PerspectiveRotation, 'perspective rotation');
25
+ }
26
+ }
27
+
28
+ this.model.onChanged.add(setModel);
29
+ }
30
+ }
@@ -0,0 +1,47 @@
1
+ import DatGuiController from "./DatGuiController.js";
2
+ import { NativeListController } from "../../../../src/view/controller/controls/NativeListController.js";
3
+ import { HighlightDefinition } from "../../../../src/engine/graphics/ecs/highlight/HighlightDefinition.js";
4
+
5
+ class HighlightController extends DatGuiController {
6
+ /**
7
+ *
8
+ * @constructor
9
+ */
10
+ constructor() {
11
+ super();
12
+
13
+ const self = this;
14
+
15
+
16
+ /**
17
+ *
18
+ * @param {Highlight} model
19
+ */
20
+ function setModel(model) {
21
+ self.removeAllChildren();
22
+
23
+ self.addChild(new NativeListController({
24
+ model: model.elements,
25
+ elementFactory() {
26
+ return new HighlightDefinition();
27
+ },
28
+ elementViewFactory(el) {
29
+ const ctrl = new DatGuiController();
30
+
31
+
32
+ ctrl.addControl(el.color, 'r').name('Red').min(0).max(1).step(0.01);
33
+ ctrl.addControl(el.color, 'g').name('Green').min(0).max(1).step(0.01);
34
+ ctrl.addControl(el.color, 'b').name('Blue').min(0).max(1).step(0.01);
35
+ ctrl.addControl(el, 'opacity').name('Alpha').min(0).max(1).step(0.01);
36
+
37
+ return ctrl;
38
+ }
39
+ }));
40
+ }
41
+
42
+ this.model.onChanged.add(setModel);
43
+ }
44
+ }
45
+
46
+
47
+ export default HighlightController;
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Created by Alex on 16/01/2017.
3
+ */
4
+ import GuiControl from '../../../../src/view/controller/controls/GuiControl.js';
5
+
6
+ import MeshPreview from '../../../../src/view/elements/MeshPreview.js';
7
+
8
+ import { clear } from "../../../../src/view/controller/dat/DatGuiUtils.js";
9
+ import DatGuiController from "./DatGuiController.js";
10
+ import EmptyView from "../../../../src/view/elements/EmptyView.js";
11
+ import { MeshSystem } from "../../../../src/engine/graphics/ecs/mesh/MeshSystem.js";
12
+
13
+ class MeshController extends GuiControl {
14
+ /**
15
+ *
16
+ * @param {AssetManager} assetManager
17
+ * @constructor
18
+ */
19
+ constructor(assetManager) {
20
+ super();
21
+
22
+ this.addClass("ui-mesh-controller");
23
+
24
+ this.assetManager = assetManager;
25
+
26
+ this.vPreview = null;
27
+
28
+ const self = this;
29
+
30
+ this.vDat = new DatGuiController();
31
+
32
+ const gui = this.vDat.gui;
33
+
34
+ this.vPreviewContainer = new EmptyView();
35
+
36
+ this.addChild(this.vPreviewContainer);
37
+
38
+ this.addChild(this.vDat);
39
+
40
+ function modelSet(meshNew, meshOld) {
41
+ if (self.vPreview !== null) {
42
+ self.vPreview.size.set(200, 200);
43
+ self.removeChild(self.vPreview);
44
+ self.vPreview = null;
45
+ }
46
+
47
+ clear(gui);
48
+
49
+ if (meshNew !== null) {
50
+ self.createPreview();
51
+
52
+ const proxy = {
53
+ url: typeof meshNew.url === "string" ? meshNew.url : ""
54
+ };
55
+
56
+ gui.add(proxy, 'url').onFinishChange(function (v) {
57
+ meshNew.url = v;
58
+
59
+ self.createPreview();
60
+ /**
61
+ * @type {EntityManager}
62
+ */
63
+ const entityManager = self.entityManager;
64
+
65
+ /**
66
+ *
67
+ * @type {MeshSystem}
68
+ */
69
+ const meshSystem = entityManager.getSystem(MeshSystem);
70
+
71
+ /**
72
+ *
73
+ * @type {Mesh}
74
+ */
75
+ const meshComponent = self.model.getValue();
76
+
77
+ meshComponent.mesh = null;
78
+
79
+ meshSystem.process(self.entity, meshComponent);
80
+ });
81
+ gui.add(meshNew, 'castShadow');
82
+ gui.add(meshNew, 'receiveShadow');
83
+ gui.add(meshNew, 'opacity').min(0).max(1).step(0.0001);
84
+ }
85
+ }
86
+
87
+ this.model.onChanged.add(modelSet);
88
+
89
+ }
90
+
91
+ destroyPreview() {
92
+ if (this.vPreview !== null) {
93
+ this.vPreviewContainer.removeChild(this.vPreview);
94
+ this.vPreview = null;
95
+ }
96
+ }
97
+
98
+ createPreview() {
99
+ this.destroyPreview();
100
+ const mesh = this.model.get();
101
+ if (mesh !== null) {
102
+
103
+ let meshPreview = null;
104
+
105
+ try {
106
+ meshPreview = new MeshPreview({
107
+ url: mesh.url,
108
+ assetManager: this.assetManager
109
+ });
110
+ } catch (e) {
111
+ console.error(e);
112
+ }
113
+
114
+ this.vPreview = meshPreview;
115
+
116
+ if (this.vPreview !== null) {
117
+ this.vPreview.size.set(200, 200);
118
+ this.vPreviewContainer.addChild(this.vPreview);
119
+ }
120
+ }
121
+ }
122
+ }
123
+
124
+
125
+ export default MeshController;
@@ -0,0 +1,87 @@
1
+ import LabelView from "../../../../src/view/common/LabelView.js";
2
+ import Vector1Control from "../../../../src/view/controller/controls/Vector1Control.js";
3
+ import ObservedValue from "../../../../src/core/model/ObservedValue.js";
4
+ import { LineView } from "./common/LineView.js";
5
+ import View from "../../../../src/view/View.js";
6
+ import { BooleanVector3Control } from "../../../../src/view/controller/controls/BooleanVector3Control.js";
7
+ import DatGuiController from "./DatGuiController.js";
8
+ import { PathFollowerFlags } from "../../../../src/engine/navigation/ecs/path_following/PathFollowerFlags.js";
9
+
10
+ export class PathFollowerController extends View {
11
+ constructor() {
12
+ super();
13
+
14
+ const self = this;
15
+
16
+ this.el = document.createElement('div');
17
+ this.addClass('ui-path-follower-controller');
18
+
19
+ this.model = new ObservedValue(null);
20
+
21
+ const cRotationSpeed = new Vector1Control();
22
+
23
+ this.addChild(new LineView({
24
+ elements: [
25
+ new LabelView('rotation speed'),
26
+ cRotationSpeed
27
+ ]
28
+ }));
29
+
30
+ const cSpeed = new Vector1Control();
31
+ this.addChild(new LineView({
32
+ elements: [
33
+ new LabelView('speed'),
34
+ cSpeed
35
+ ]
36
+ }));
37
+
38
+ const cRotationAlignment = new BooleanVector3Control();
39
+
40
+ this.addChild(new LineView({
41
+ elements: [
42
+ new LabelView('rotation alignment'),
43
+ cRotationAlignment
44
+ ]
45
+ }));
46
+
47
+ const cPositionAlignment = new BooleanVector3Control();
48
+
49
+ this.addChild(new LineView({
50
+ elements: [
51
+ new LabelView('position writing'),
52
+ cPositionAlignment
53
+ ]
54
+ }));
55
+
56
+ let d = new DatGuiController();
57
+
58
+ this.addChild(d);
59
+
60
+
61
+ /**
62
+ *
63
+ * @param {PathFollower} model
64
+ */
65
+ function setModel(model) {
66
+
67
+ self.removeChild(d);
68
+
69
+ d = new DatGuiController();
70
+
71
+ self.addChild(d);
72
+
73
+ if (model !== null) {
74
+ cRotationSpeed.model.set(model.rotationSpeed);
75
+ cSpeed.model.set(model.speed);
76
+ cRotationAlignment.model.set(model.rotationAlignment);
77
+ cPositionAlignment.model.set(model.positionWriting);
78
+
79
+ d.addBitFlag(model, 'flags', PathFollowerFlags.Active, 'active');
80
+ d.addBitFlag(model, 'flags', PathFollowerFlags.Loop, 'loop');
81
+ d.addBitFlag(model, 'flags', PathFollowerFlags.Locked, 'locked');
82
+ }
83
+ }
84
+
85
+ this.model.onChanged.add(setModel);
86
+ }
87
+ }
@@ -0,0 +1,80 @@
1
+ import EmptyView from "../../../../src/view/elements/EmptyView.js";
2
+ import ButtonView from "../../../../src/view/elements/button/ButtonView.js";
3
+ import ObservedValue from "../../../../src/core/model/ObservedValue.js";
4
+ import View from "../../../../src/view/View.js";
5
+
6
+ function makeTag({ index, values, update }) {
7
+ const vValue = new EmptyView({ classList: ['value'], tag: 'input' });
8
+ const elValue = vValue.el;
9
+
10
+ elValue.setAttribute('type', 'text');
11
+ elValue.value = values[index];
12
+
13
+
14
+ elValue.addEventListener('input', () => {
15
+ const v = elValue.value;
16
+
17
+ values[index] = v;
18
+ });
19
+
20
+ const vRemove = new ButtonView({
21
+ action() {
22
+ values.splice(index, 1);
23
+
24
+ update();
25
+ },
26
+ classList: ['remove']
27
+ });
28
+
29
+
30
+ const vTag = new EmptyView({ classList: ['tag'] });
31
+
32
+ vTag.addChild(vValue);
33
+ vTag.addChild(vRemove);
34
+
35
+ return vTag;
36
+ }
37
+
38
+ export class TagController extends View {
39
+ constructor() {
40
+ super();
41
+
42
+ this.el = document.createElement('div');
43
+ this.addClass('controller');
44
+ this.addClass('tag-controller');
45
+
46
+ const self = this;
47
+
48
+ function update() {
49
+ /**
50
+ *
51
+ * @type {Tag}
52
+ */
53
+ const model = self.model.getValue();
54
+
55
+
56
+ self.removeAllChildren();
57
+
58
+ if (model !== null) {
59
+ const values = model.values;
60
+
61
+ values.forEach((v, i) => {
62
+ const vTag = makeTag({ index: i, values, update });
63
+ self.addChild(vTag);
64
+ });
65
+
66
+ self.addChild(new ButtonView({
67
+ action() {
68
+ values.push("");
69
+ update();
70
+ },
71
+ name: 'Create'
72
+ }));
73
+ }
74
+ }
75
+
76
+ this.model = new ObservedValue(null);
77
+
78
+ this.model.onChanged.add(update);
79
+ }
80
+ }