@woosh/meep-engine 2.37.18 → 2.38.0

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 (289) hide show
  1. package/core/assert.js +1 -1
  2. package/core/binary/float2uint8.js +8 -0
  3. package/core/binary/uint82float.js +8 -0
  4. package/core/bvh2/bvh3/ExplicitBinaryBoundingVolumeHierarchy.js +6 -4
  5. package/core/collection/array/array_get_index_in_range.js +16 -0
  6. package/core/collection/array/typed/isTypedArray.js +20 -0
  7. package/core/collection/array/typedArrayToDataType.js +1 -0
  8. package/{engine/navigation/grid → core/collection/heap}/BinaryHeap.js +6 -1
  9. package/{engine/navigation/grid → core/collection/heap}/FastBinaryHeap.js +3 -2
  10. package/{engine/navigation/grid → core/collection/heap}/FastBinaryHeap.spec.js +3 -3
  11. package/core/collection/heap/Uin32Heap.spec.js +59 -0
  12. package/core/collection/heap/Uint32Heap.js +385 -0
  13. package/core/collection/list/List.d.ts +1 -1
  14. package/core/collection/table/RowFirstTable.js +34 -0
  15. package/core/collection/table/RowFirstTable.spec.js +59 -1
  16. package/core/color/Color.js +83 -1
  17. package/core/color/YCbCr_to_rgb_uint24.js +3 -4
  18. package/core/color/hsv2rgb.js +4 -3
  19. package/core/color/linear_to_sRGB.js +4 -5
  20. package/core/color/rgb2hex.js +1 -1
  21. package/core/color/rgb2uint24.js +6 -4
  22. package/core/color/rgb_to_YCbCr_uint24.js +11 -13
  23. package/core/events/signal/Signal.d.ts +11 -9
  24. package/core/events/signal/Signal.spec.js +16 -0
  25. package/core/geom/2d/quad-tree/qt_collect_by_circle.js +67 -0
  26. package/core/geom/3d/topology/computeTopoMeshVertexDuplicates.js +9 -6
  27. package/core/geom/3d/topology/expandConnectivityByLocality.js +5 -5
  28. package/core/geom/3d/topology/query/query_edge_is_boundary.js +7 -0
  29. package/core/geom/3d/topology/query/query_edge_is_manifold.js +13 -0
  30. package/core/geom/3d/topology/query/query_edge_is_manifold_or_boundary.js +11 -0
  31. package/core/geom/3d/topology/query/query_edge_is_wire.js +13 -0
  32. package/core/geom/3d/topology/query/query_edge_other_vertex.js +20 -0
  33. package/core/geom/3d/topology/query/query_edge_share_vert.js +9 -0
  34. package/core/geom/3d/topology/query/query_face_get_other_edges.js +39 -0
  35. package/core/geom/3d/topology/query/query_face_next_vertex.js +19 -0
  36. package/core/geom/3d/topology/query/query_face_prev_vertex.js +18 -0
  37. package/core/geom/3d/topology/query/query_vertex_in_edge.js +14 -0
  38. package/core/geom/3d/topology/query/query_vertex_pair_share_face.js +24 -0
  39. package/core/geom/3d/topology/query/query_vertices_in_edge.js +19 -0
  40. package/core/geom/3d/topology/simplify/collapseEdge.spec.js +3 -5
  41. package/core/geom/3d/topology/simplify/collapse_all_degenerate_edges.js +8 -10
  42. package/core/geom/3d/topology/simplify/compute_face_normal_change_dot_product.js +12 -2
  43. package/core/geom/3d/topology/simplify/decimate_edge_collapse_snap.js +277 -0
  44. package/core/geom/3d/topology/simplify/edge_collapse_quadratic.js +126 -0
  45. package/core/geom/3d/topology/simplify/prototypeMeshSimplification.js +502 -0
  46. package/core/geom/3d/topology/simplify/quadratic/Quadratic3.js +37 -5
  47. package/core/geom/3d/topology/simplify/quadratic/build_vertex_quadratics.js +86 -1
  48. package/core/geom/3d/topology/simplify/simplifyTopoMesh.js +4 -4
  49. package/core/geom/3d/topology/simplify/simplifyTopoMesh2.js +119 -0
  50. package/core/geom/3d/topology/simplify/tm_edge_collapse_is_degenerate_flip.js +81 -0
  51. package/core/geom/3d/topology/{TopoEdge.js → struct/TopoEdge.js} +47 -20
  52. package/core/geom/3d/topology/{TopoEdge.spec.js → struct/TopoEdge.spec.js} +0 -0
  53. package/core/geom/3d/topology/{TopoMesh.js → struct/TopoMesh.js} +20 -41
  54. package/core/geom/3d/topology/{TopoTriangle.js → struct/TopoTriangle.js} +15 -25
  55. package/core/geom/3d/topology/{TopoVertex.js → struct/TopoVertex.js} +21 -4
  56. package/core/geom/3d/topology/{TopoVertex.spec.js → struct/TopoVertex.spec.js} +0 -0
  57. package/core/geom/3d/topology/tm_edge_kill.js +24 -0
  58. package/core/geom/3d/topology/tm_edge_splice.js +42 -0
  59. package/core/geom/3d/topology/tm_face_area.js +18 -0
  60. package/core/geom/3d/topology/tm_face_kill.js +12 -0
  61. package/core/geom/3d/topology/tm_face_normal.js +14 -0
  62. package/core/geom/3d/topology/tm_kill_only_edge.js +35 -0
  63. package/core/geom/3d/topology/tm_kill_only_face.js +12 -0
  64. package/core/geom/3d/topology/tm_kill_only_vert.js +14 -0
  65. package/core/geom/3d/topology/tm_vert_kill.js +19 -0
  66. package/core/geom/3d/topology/tm_vert_splice.js +64 -0
  67. package/core/geom/3d/topology/tm_vertex_compute_normal.js +42 -0
  68. package/core/geom/3d/topology/topoMeshToBufferGeometry.js +18 -4
  69. package/core/geom/3d/topology/weld_duplicate_vertices.js +63 -0
  70. package/core/geom/Quaternion.d.ts +21 -1
  71. package/core/geom/Quaternion.js +279 -200
  72. package/core/geom/Quaternion.spec.js +71 -2
  73. package/core/geom/Vector2.js +3 -3
  74. package/core/geom/Vector3.d.ts +2 -0
  75. package/core/geom/Vector3.js +31 -7
  76. package/core/geom/Vector3.schema.json +16 -0
  77. package/core/geom/Vector4.js +16 -0
  78. package/core/geom/packing/MaxRectangles.js +1 -1
  79. package/core/graph/cluster_mesh_metis.js +16 -0
  80. package/core/graph/coarsen_graph.js +1 -1
  81. package/core/graph/graph_k_means_cluster.js +1 -1
  82. package/core/json/JsonUtils.js +2 -20
  83. package/core/math/bell_membership_function.js +19 -0
  84. package/core/math/exp2.js +8 -0
  85. package/core/math/interval/NumericInterval.js +17 -0
  86. package/core/math/physics/brdf/brdf_burley.js +25 -0
  87. package/core/math/physics/bsdf/bsdf_schlick.js +22 -0
  88. package/core/math/physics/irradiance/interpolate_irradiance_linear.js +18 -0
  89. package/{engine/sound/ecs/emitter/attenuate/attenuateSoundLogarithmic.js → core/math/physics/irradiance/interpolate_irradiance_lograrithmic.js} +2 -2
  90. package/{engine/sound/ecs/emitter/attenuate/attenuateSoundSmith.js → core/math/physics/irradiance/interpolate_irradiance_smith.js} +1 -1
  91. package/core/math/random/seededRandom.js +2 -31
  92. package/core/math/random/seededRandom_Mulberry32.js +31 -0
  93. package/core/math/random/seededRandom_sine.js +33 -0
  94. package/core/model/ObservedEnum.js +8 -0
  95. package/editor/Editor.js +97 -1
  96. package/editor/actions/concrete/ModifyPatchSampler2DAction.js +118 -0
  97. package/editor/actions/concrete/ModifyPatchSampler2DAction.spec.js +30 -0
  98. package/editor/actions/concrete/PatchTerrainHeightAction.js +13 -105
  99. package/editor/ecs/component/FieldDescriptor.js +34 -0
  100. package/editor/ecs/component/FieldValueAdapter.js +20 -0
  101. package/editor/ecs/component/TypeEditor.js +33 -0
  102. package/editor/ecs/component/TypeSchema.d.ts +38 -0
  103. package/editor/ecs/component/createFieldEditor.js +90 -0
  104. package/editor/ecs/component/createObjectEditor.js +266 -60
  105. package/editor/ecs/component/editors/ColorEditor.js +39 -0
  106. package/editor/ecs/component/editors/HTMLElementEditor.js +17 -0
  107. package/editor/ecs/component/editors/ImagePathEditor.js +50 -0
  108. package/editor/ecs/component/editors/NumericIntervalEditor.js +86 -0
  109. package/editor/ecs/component/editors/ObservedBooleanEditor.js +13 -0
  110. package/editor/ecs/component/editors/ObservedEnumEditor.js +32 -0
  111. package/editor/ecs/component/editors/ObservedIntegerEditor.js +43 -0
  112. package/editor/ecs/component/editors/ObservedStringEditor.js +51 -0
  113. package/editor/ecs/component/editors/Sampler2DEditor.js +107 -0
  114. package/editor/ecs/component/editors/collection/ListEditor.js +83 -0
  115. package/editor/ecs/component/editors/common/BitFlagsEditor.js +80 -0
  116. package/editor/ecs/component/editors/common/EnumEditor.js +41 -0
  117. package/editor/ecs/component/editors/common/makeV3_editor.js +85 -0
  118. package/editor/ecs/component/editors/common/noEditor.js +9 -0
  119. package/editor/ecs/component/editors/ecs/GridObstacleEditor.js +17 -0
  120. package/editor/ecs/component/editors/ecs/MinimapMarkerEditor.js +16 -0
  121. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.js +44 -0
  122. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.js +17 -0
  123. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.js +58 -0
  124. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.js +54 -0
  125. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.js +21 -0
  126. package/editor/ecs/component/editors/ecs/Trail2DEditor.js +33 -0
  127. package/editor/ecs/component/editors/ecs/TransformEditor.js +23 -0
  128. package/editor/ecs/component/editors/ecs/terrain/SplatMappingEditor.js +21 -0
  129. package/editor/ecs/component/editors/ecs/terrain/TerrainEditor.js +89 -0
  130. package/editor/ecs/component/editors/ecs/terrain/TerrainLayerEditor.js +18 -0
  131. package/editor/ecs/component/editors/ecs/terrain/TerrainLayersEditor.js +22 -0
  132. package/editor/ecs/component/editors/ecs/terrain/TerrainOverlayEditor.js +20 -0
  133. package/editor/ecs/component/editors/geom/QuaternionEditor.js +56 -0
  134. package/editor/ecs/component/editors/geom/Vector1Editor.js +57 -0
  135. package/editor/ecs/component/editors/geom/Vector2Editor.js +11 -0
  136. package/editor/ecs/component/editors/geom/Vector3Editor.js +13 -0
  137. package/editor/ecs/component/editors/geom/Vector4Editor.js +12 -0
  138. package/editor/ecs/component/editors/primitive/ArrayEditor.js +46 -0
  139. package/editor/ecs/component/editors/primitive/BooleanEditor.js +27 -0
  140. package/editor/ecs/component/editors/primitive/FunctionEditor.js +29 -0
  141. package/editor/ecs/component/editors/primitive/NumberEditor.js +60 -0
  142. package/editor/ecs/component/editors/primitive/ObjectEditor.js +12 -0
  143. package/editor/ecs/component/editors/primitive/StringEditor.js +31 -0
  144. package/editor/ecs/component/editors/three/BufferGeometryEditor.js +28 -0
  145. package/editor/ecs/component/editors/three/MaterialEditor.js +27 -0
  146. package/editor/ecs/component/editors/three/MeshEditor.js +35 -0
  147. package/editor/ecs/component/editors/three/TextureEditor.js +32 -0
  148. package/editor/ecs/component/findNearestRegisteredType.js +59 -0
  149. package/editor/ecs/component/prototypeObjectEditor.js +379 -0
  150. package/editor/tools/SelectionTool.js +1 -1
  151. package/editor/tools/paint/TerrainHeightPaintTool.js +88 -68
  152. package/editor/tools/paint/TerrainPaintTool.js +2 -1
  153. package/editor/tools/paint/TerrainTexturePaintTool.js +8 -73
  154. package/editor/view/EditorView.js +1 -1
  155. package/editor/view/ecs/ComponentControlView.js +2 -30
  156. package/editor/view/ecs/EntityEditor.js +61 -139
  157. package/editor/view/ecs/components/GridObstacleController.js +4 -4
  158. package/editor/view/ecs/components/TerrainController.js +1 -1
  159. package/editor/view/ecs/components/common/NumberController.js +19 -7
  160. package/editor/view/node-graph/NodeGraphView.js +2 -2
  161. package/editor/view/node-graph/NodeView.js +7 -9
  162. package/engine/animation/keyed2/AnimationTrack.js +1 -1
  163. package/engine/asset/AssetManager.d.ts +1 -1
  164. package/engine/asset/AssetManager.js +390 -388
  165. package/engine/asset/loaders/gltf/extensions/MSFT_texture_dds.js +14 -2
  166. package/engine/ecs/components/TagEditor.js +15 -0
  167. package/engine/ecs/fow/FogOfWarEditor.js +13 -0
  168. package/engine/ecs/parent/ParentEntitySystem.js +57 -0
  169. package/engine/ecs/terrain/ecs/OffsetScaleTransform2D.d.ts +6 -0
  170. package/engine/ecs/terrain/ecs/Terrain.js +44 -43
  171. package/engine/ecs/terrain/ecs/TerrainSystem.js +2 -2
  172. package/engine/ecs/terrain/ecs/layers/TerrainLayer.js +1 -1
  173. package/engine/ecs/terrain/ecs/splat/SplatMapping.js +26 -28
  174. package/engine/ecs/terrain/overlay/TerrainOverlay.js +71 -66
  175. package/engine/ecs/terrain/tiles/TerrainTileManager.js +23 -0
  176. package/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +1 -1
  177. package/engine/ecs/terrain/util/paintTerrainOverlayViaLookupTable.js +13 -7
  178. package/engine/ecs/terrain/util/tensionOptimizeUV.js +1 -1
  179. package/engine/ecs/transform/Transform.d.ts +2 -0
  180. package/engine/ecs/transform/Transform.editor.schema.json +16 -0
  181. package/engine/ecs/transform/Transform.js +3 -0
  182. package/engine/graphics/ecs/highlight/HighlightEditor.js +17 -0
  183. package/engine/graphics/ecs/light/Light.js +0 -47
  184. package/engine/graphics/ecs/light/LightSerializationAdapter.js +50 -0
  185. package/engine/graphics/ecs/mesh/MeshEditor.js +28 -0
  186. package/engine/graphics/ecs/mesh-v2/DrawMode.js +2 -1
  187. package/engine/graphics/ecs/mesh-v2/aggregate/prototypeSGMesh.js +3 -3
  188. package/engine/graphics/ecs/mesh-v2/build_three_object.js +3 -1
  189. package/engine/graphics/ecs/mesh-v2/sg_compute_hierarchy_bounding_box_by_parent_entity.js +31 -0
  190. package/engine/graphics/ecs/mesh-v2/sg_hierarchy_compute_bounding_box_via_parent_entity.d.ts +4 -0
  191. package/engine/graphics/ecs/sprite/Sprite.js +11 -0
  192. package/engine/graphics/ecs/sprite/SpriteSystemPE.js +133 -0
  193. package/engine/graphics/ecs/sprite/prototypeSpriteSystem.js +1570 -0
  194. package/engine/graphics/micron/build/PatchRepresentation.js +7 -3
  195. package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +18 -8
  196. package/engine/graphics/micron/build/clustering/build_clustering_2.js +1 -1
  197. package/engine/graphics/micron/build/clustering/build_leaf_patches.js +2 -2
  198. package/engine/graphics/micron/build/clustering/build_leaf_patches_metis.js +1 -1
  199. package/engine/graphics/micron/build/hierarchy/buildAbstractPatchHierarchy.js +21 -3
  200. package/engine/graphics/micron/build/hierarchy/merge_patches.js +96 -43
  201. package/engine/graphics/micron/build/hierarchy/qvdr_build_simplified_clusters.js +11 -5
  202. package/engine/graphics/micron/format/VirtualGeometry.js +46 -3
  203. package/engine/graphics/micron/format/micron_build_proxy_geometry.js +4 -2
  204. package/engine/graphics/micron/prototypeVirtualGeometry.js +47 -10
  205. package/engine/graphics/micron/render/instanced/shader/shader_rewrite_standard.js +17 -17
  206. package/engine/graphics/micron/render/refinement/get_geometry_patch_cut.js +15 -3
  207. package/engine/graphics/micron/simplifyGeometry.js +1 -1
  208. package/engine/graphics/particles/particular/engine/ParticularEngine.js +5 -0
  209. package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +17 -9
  210. package/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.js +12 -10
  211. package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +7 -2
  212. package/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.js +27 -0
  213. package/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.js +80 -0
  214. package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +16 -4
  215. package/engine/graphics/shaders/TerrainShader.js +8 -8
  216. package/engine/graphics/texture/atlas/TextureAtlasDebugger.js +2 -1
  217. package/engine/graphics/texture/sampler/Sampler2D.js +206 -201
  218. package/engine/graphics/texture/sampler/Sampler2D.spec.js +34 -35
  219. package/engine/graphics/texture/sampler/bicubic.js +59 -0
  220. package/engine/graphics/texture/sampler/downsampleSample2D.spec.js +2 -2
  221. package/engine/graphics/texture/sampler/genericResampleSampler2D.js +0 -2
  222. package/engine/graphics/texture/sampler/prototypeSamplerFiltering.js +146 -0
  223. package/engine/graphics/texture/sampler/{downsampleSampler2D.js → sampler2D_scale_down_linear.js} +8 -4
  224. package/engine/graphics/texture/sampler/sampler2_d_scale_down_lanczos.js +140 -0
  225. package/engine/graphics/texture/sampler/scaleSampler2D.js +3 -3
  226. package/engine/graphics/texture/sampler/writeSampler2DDataToDataTexture.js +1 -1
  227. package/engine/graphics/util/ScaleObject3ToBox.js +14 -1
  228. package/engine/graphics/util/makeMeshPreviewScene.js +2 -1
  229. package/engine/grid/components/GridObstacle.js +0 -44
  230. package/engine/grid/components/GridObstacleSerializationAdapter.js +46 -0
  231. package/engine/input/devices/PointerDevice.d.ts +1 -1
  232. package/engine/input/devices/PointerDevice.js +17 -2
  233. package/engine/input/ecs/util/TerrainCameraTargetSampler.js +2 -2
  234. package/engine/navigation/ecs/components/Path.d.ts +2 -0
  235. package/engine/navigation/ecs/components/Path.js +6 -1
  236. package/engine/navigation/ecs/components/computeNonuniformCatmullRomSplineSample.js +117 -0
  237. package/engine/navigation/grid/AStar.js +1 -1
  238. package/engine/navigation/grid/GridField.js +3 -2
  239. package/engine/platform/GetURLHash.js +27 -0
  240. package/engine/platform/WebEnginePlatform.js +1 -22
  241. package/engine/sound/ecs/emitter/SoundEmitter.js +10 -6
  242. package/engine/ui/DraggableAspect.js +2 -2
  243. package/generation/GridGenerator.js +7 -6
  244. package/generation/example/SampleGenerator0.js +39 -35
  245. package/generation/example/filters/SampleGroundMoistureFilter.js +58 -17
  246. package/generation/example/generators/interactive/mir_generator_place_buff_objects.js +7 -6
  247. package/generation/example/generators/mir_generator_place_bases.js +7 -3
  248. package/generation/example/generators/mir_generator_place_road_decorators.js +3 -3
  249. package/generation/example/generators/mir_generator_place_starting_point.js +3 -2
  250. package/generation/example/themes/SampleTheme0.js +11 -7
  251. package/generation/filtering/numeric/CellFilterLiteralFloat.js +5 -0
  252. package/generation/filtering/numeric/complex/CellFilterDilate.js +36 -0
  253. package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +15 -5
  254. package/generation/filtering/numeric/complex/CellFilterSimplexNoise.js +53 -1
  255. package/generation/filtering/numeric/math/CellFilterMax2.js +3 -0
  256. package/generation/filtering/numeric/math/CellFilterMembershipGeneralizedBell.js +55 -0
  257. package/generation/filtering/numeric/sampling/AbstractCellFilterSampleGridLayer.js +42 -0
  258. package/generation/filtering/numeric/sampling/CellFilterSampleLayerCubic.js +36 -0
  259. package/generation/filtering/numeric/sampling/CellFilterSampleLayerLinear.js +41 -0
  260. package/generation/grid/GridData.d.ts +5 -1
  261. package/generation/grid/GridData.js +35 -36
  262. package/generation/grid/MarkerMatchCounter.js +5 -3
  263. package/generation/grid/generation/discrete/GridTaskConnectRooms.js +1 -1
  264. package/generation/grid/generation/discrete/layer/GridTaskBuildSourceDistanceMap.js +1 -1
  265. package/generation/grid/generation/discrete/layer/GridTaskDistanceToMarkers.js +1 -1
  266. package/generation/grid/generation/road/GridTaskGenerateRoads.js +1 -1
  267. package/generation/markers/GridActionRuleSet.js +15 -32
  268. package/generation/markers/GridCellActionPlaceMarker.js +12 -8
  269. package/generation/markers/debug/visualizeMarkers.js +56 -36
  270. package/generation/markers/emitter/MarkerNodeEmitterFromAction.js +8 -8
  271. package/generation/markers/prototypeGridCellActionPlaceMarker.js +209 -0
  272. package/generation/markers/transform/MarkerNodeTransformerOffsetPosition.js +1 -5
  273. package/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.spec.js +2 -2
  274. package/generation/placement/GridCellPlacementRule.js +31 -25
  275. package/generation/theme/ThemeEngine.js +1 -1
  276. package/package.json +1 -1
  277. package/samples/terrain/from_image.js +7 -3
  278. package/samples/terrain/main.js +1 -1
  279. package/view/View.js +23 -1
  280. package/view/common/LabelView.js +1 -1
  281. package/view/compose3x3transform.js +32 -8
  282. package/view/controller/dat/DatGuiUtils.js +1 -1
  283. package/view/elements/DropDownSelectionView.js +11 -3
  284. package/view/elements/image/ImageView.js +3 -1
  285. package/core/model/ObservedReal.js +0 -55
  286. package/editor/ecs/component/ObjectEditor.js +0 -0
  287. package/engine/graphics/particles/particular/engine/renderers/SoftBillboardParticleRenderer.js +0 -7
  288. package/engine/sound/ecs/emitter/attenuate/attenuateSoundLinear.js +0 -11
  289. package/generation/filtering/numeric/CellFilterReadGridLayer.js +0 -73
@@ -9,89 +9,14 @@ import ObservedValue from '../../../core/model/ObservedValue.js';
9
9
  import LabelView from '../../../view/common/LabelView.js';
10
10
  import ButtonView from '../../../view/elements/button/ButtonView.js';
11
11
  import DropDownSelectionView from '../../../view/elements/DropDownSelectionView.js';
12
-
13
- import TransformController from './components/TransformController.js';
14
- import MeshController from './components/MeshController.js';
15
- import { datify } from "../../../view/controller/dat/DatGuiUtils.js";
16
12
  import EmptyView from "../../../view/elements/EmptyView.js";
17
13
  import { EntityManager, EventType } from "../../../engine/ecs/EntityManager.js";
18
- import HighlightController from "./components/HighlightController.js";
19
- import { GridPositionController } from "./components/GridPositionController.js";
20
- import { ParticleEmitterController } from "./components/particles/ParticleEmitterController.js";
21
- import { TerrainController } from "./components/TerrainController.js";
22
- import { TagController } from "./components/TagController.js";
23
- import { ItemContainerController } from "./components/items/ItemContainerController.js";
24
- import { FogOfWarRevealerController } from "./components/FogOfWarRevealerController.js";
25
- import { FogOfWarController } from "./components/FogOfWarController.js";
26
- import { GeneratedArmyController } from "./components/GeneratedArmyController.js";
27
- import { ArmyController } from "./components/army/ArmyController.js";
28
- import { PathFollowerController } from "./components/PathFollowerController.js";
29
14
  import ComponentRemoveAction from "../../actions/concrete/ComponentRemoveAction.js";
30
15
  import ComponentAddAction from "../../actions/concrete/ComponentAddAction.js";
31
- import { StoryTriggerSetController } from "./components/story/StoryTriggerSetController.js";
32
- import { UnitShopController } from "./components/UnitShopController.js";
33
- import { SoundEmitterController } from "./components/sound/SoundEmitterController.js";
34
- import { GUIElementController } from "./components/gui/GUIElementController.js";
35
16
  import { LineView } from "./components/common/LineView.js";
36
17
  import { ComponentControlView } from "./ComponentControlView.js";
37
- import { HeadsUpDisplayController } from "./components/HeadsUpDisplayController.js";
38
- import { BlackboardController } from "./components/BlackboardController.js";
39
- import { GridObstacleController } from "./components/GridObstacleController.js";
40
- import { AttachmentSocketsController } from "./components/sockets/AttachmentSocketsController.js";
41
- import { ParticleEmitterSystem } from "../../../engine/graphics/particles/ecs/ParticleEmitterSystem.js";
42
-
43
- /**
44
- *
45
- * @param {ComponentControlFactory} factory
46
- * @param {Editor} editor
47
- */
48
- function prepareComponentFactory(factory, editor) {
49
- factory
50
- .register('Transform', () => new TransformController())
51
- .register('Mesh', () => new MeshController(editor.engine.assetManager))
52
- .register('GridPosition', () => new GridPositionController())
53
- .register('Name', datify)
54
- .register('Tag', () => new TagController())
55
- .register('Team', datify)
56
- .register('HeadsUpDisplay', () => new HeadsUpDisplayController())
57
- .register('GeneratedArmy', () => new GeneratedArmyController())
58
- .register('Army', () => new ArmyController({
59
- localization: editor.engine.localization,
60
- afflictionDatabase: editor.engine.staticKnowledge.afflictions
61
- }))
62
- .register('ClingToTerrain', datify)
63
- .register('Commander', datify)
64
- .register('MinimapMarker', datify)
65
- .register('Camera', datify)
66
- .register('FacingDirection', datify)
67
- .register('GridObstacle', () => new GridObstacleController())
68
- .register('Terrain', () => new TerrainController(editor.engine.assetManager))
69
- .register('TopDownCameraController', datify)
70
- .register('Light', datify)
71
- .register('FogOfWar', () => new FogOfWarController(editor.engine.entityManager))
72
- .register('FogOfWarRevealer', () => new FogOfWarRevealerController())
73
- .register('PathFollower', () => new PathFollowerController())
74
- .register('Highlight', () => new HighlightController())
75
- .register('Blackboard', () => new BlackboardController())
76
- .register('StoryTriggerSet', () => new StoryTriggerSetController())
77
- .register('UnitShop', () => new UnitShopController())
78
- .register('ItemContainer', () => new ItemContainerController({
79
- localization: editor.engine.localization,
80
- itemDatabase: editor.engine.staticKnowledge.items
81
- }))
82
- .register('ParticleEmitter', () => {
83
- const em = editor.engine.entityManager;
84
-
85
- const particleEmitterSystem = em.getSystem(ParticleEmitterSystem);
86
-
87
- return new ParticleEmitterController(particleEmitterSystem);
88
- })
89
- .register('SoundEmitter', () => new SoundEmitterController(editor.engine))
90
- .register('GUIElement', () => new GUIElementController())
91
- .register('ViewportPosition', datify)
92
- .register('AttachmentSockets', () => new AttachmentSocketsController())
93
- ;
94
- }
18
+ import { buildObjectEditorFromRegistry } from "../../ecs/component/createObjectEditor.js";
19
+ import { isDefined } from "../../../core/process/matcher/Matchers.js";
95
20
 
96
21
 
97
22
  class EntityEditor extends View {
@@ -122,7 +47,11 @@ class EntityEditor extends View {
122
47
 
123
48
  const vComponentList = new EmptyView({ classList: ['component-list'] });
124
49
 
125
- prepareComponentFactory(componentControlFactory, editor);
50
+ /**
51
+ *
52
+ * @type {Map<any, TypeEditor>}
53
+ */
54
+ const registry = editor.type_editor_registry;
126
55
 
127
56
  /**
128
57
  *
@@ -130,6 +59,14 @@ class EntityEditor extends View {
130
59
  */
131
60
  this.componentControllers = new Map();
132
61
 
62
+ /**
63
+ *
64
+ * @returns {EntityComponentDataset}
65
+ */
66
+ function get_dataset() {
67
+ return self.entityManager.get().dataset;
68
+ }
69
+
133
70
  function addComponent(event) {
134
71
  if (event.instance === undefined) {
135
72
  return;
@@ -153,13 +90,8 @@ class EntityEditor extends View {
153
90
  }
154
91
 
155
92
  function watchEntity(entity) {
156
- /**
157
- *
158
- * @type {EntityManager}
159
- */
160
- const entityManager = self.entityManager.get();
161
93
 
162
- const dataset = entityManager.dataset;
94
+ const dataset = get_dataset();
163
95
 
164
96
  if (!dataset.entityExists(entity)) {
165
97
  //doesn't exist, nothing to do
@@ -172,13 +104,8 @@ class EntityEditor extends View {
172
104
  }
173
105
 
174
106
  function unwatchEntity(entity) {
175
- /**
176
- *
177
- * @type {EntityManager}
178
- */
179
- const entityManager = self.entityManager.get();
180
107
 
181
- const dataset = entityManager.dataset;
108
+ const dataset = get_dataset();
182
109
 
183
110
  if (!dataset.entityExists(entity)) {
184
111
  //doesn't exist, nothing to do
@@ -198,13 +125,15 @@ class EntityEditor extends View {
198
125
 
199
126
  self.components.reset();
200
127
 
201
- const entityManager = self.entityManager.get();
202
128
 
203
129
  /**
204
130
  *
205
131
  * @type {EntityComponentDataset}
206
132
  */
207
- const dataset = entityManager.dataset;
133
+ const dataset = get_dataset();
134
+
135
+ unattachedTypes.reset();
136
+ unattachedTypes.addAll(dataset.getComponentTypeMap().map(a => a.typeName).filter(isDefined));
208
137
 
209
138
  const components = dataset.getAllComponents(entity);
210
139
  components.forEach(function (c) {
@@ -221,74 +150,67 @@ class EntityEditor extends View {
221
150
 
222
151
  const unattachedTypes = new List();
223
152
 
224
- function updateList() {
153
+ /**
154
+ * @template T
155
+ * @param {T} component
156
+ */
157
+ function handleComponentAdded(component) {
158
+ let view;
159
+
160
+ try {
161
+ view = buildObjectEditorFromRegistry(component, registry);
162
+ } catch (e) {
163
+ view = new LabelView(`ERROR: ${e.message}\n${e.stack}`);
164
+
165
+ console.warn('Failed to build editor', e);
166
+ }
167
+
168
+ if (!view) {
169
+ view = new LabelView('EMPTY');
170
+ }
171
+
225
172
  /**
226
173
  *
227
174
  * @type {EntityManager}
228
175
  */
229
- const em = self.entityManager.get();
230
-
231
- //all systems
232
- const allTypeNames = em.getComponentTypeMap()
233
- .map(c => c.typeName)
234
- .filter(typeName => typeof typeName === "string")
235
- .sort();
236
-
237
- function has(typeName) {
238
- let result = false;
239
-
240
- self.components.visitFirstMatch(c => c.constructor.typeName === typeName, () => result = true);
176
+ const entityManager = self.entityManager.getValue();
241
177
 
242
- return result;
243
- }
178
+ const entityId = self.model.getValue();
244
179
 
245
- //remove already attached
246
- const unattachedTypeNames = allTypeNames.filter(typeName => !has(typeName));
180
+ const vBody = new EmptyView({
181
+ classList: ['body']
182
+ });
183
+ vBody.addChild(view);
247
184
 
248
- unattachedTypes.reset();
249
- unattachedTypes.addAll(unattachedTypeNames);
250
- }
185
+ const controlView = new ComponentControlView(entityId, component, entityManager, vBody);
251
186
 
252
- /**
253
- * @template T
254
- * @param {T} component
255
- */
256
- function handleComponentAdded(component) {
257
- // console.log("handleComponentAdded",c);
258
187
  const Klass = component.constructor;
259
- if (!self.componentControllers.has(Klass)) {
260
- /**
261
- *
262
- * @type {EntityManager}
263
- */
264
- const entityManager = self.entityManager.getValue();
265
188
 
266
- const entityId = self.model.getValue();
189
+ controlView.signal.remove.add(function () {
267
190
 
268
- const controlView = new ComponentControlView(entityId, component, entityManager, componentControlFactory);
191
+ editor.actions.mark('Remove Component');
192
+ editor.actions.do(new ComponentRemoveAction(entityId, Klass));
193
+ });
269
194
 
270
- controlView.signal.remove.add(function () {
271
195
 
272
- editor.actions.mark('Remove Component');
273
- editor.actions.do(new ComponentRemoveAction(entityId, Klass));
274
- });
196
+ vComponentList.addChild(controlView);
197
+ self.componentControllers.set(component, controlView);
275
198
 
199
+ unattachedTypes.removeOneOf(Klass.typeName);
276
200
 
277
- self.componentControllers.set(Klass, controlView);
278
- vComponentList.addChild(controlView);
279
- }
280
- updateList();
281
201
  }
282
202
 
283
203
  function handleComponentRemoved(c) {
284
204
  // console.log("handleComponentRemoved",c);
285
- const key = c.constructor;
286
- if (self.componentControllers.has(key)) {
287
- const controlView = self.componentControllers.get(key);
288
- self.componentControllers.delete(key);
205
+ if (self.componentControllers.has(c)) {
206
+ const controlView = self.componentControllers.get(c);
207
+ self.componentControllers.delete(c);
289
208
  vComponentList.removeChild(controlView);
209
+
210
+ const Klass = c.constructor;
211
+
212
+ unattachedTypes.add(Klass.typeName);
290
213
  }
291
- updateList();
292
214
  }
293
215
 
294
216
  this.components.on.added.add(handleComponentAdded);
@@ -12,7 +12,7 @@ import Vector2 from "../../../../core/geom/Vector2.js";
12
12
  * @param {GridObstacle} grid
13
13
  * @param {HTMLCanvasElement} canvas
14
14
  */
15
- function buildPreview(grid, canvas) {
15
+ export function buildGridObstaclePreview(grid, canvas) {
16
16
  const source = new Sampler2D(grid.data, 1, grid.size.x, grid.size.y);
17
17
 
18
18
  const target = Sampler2D.uint8(1, canvas.width, canvas.height);
@@ -43,7 +43,7 @@ export class GridObstacleController extends View {
43
43
 
44
44
  vPreview.size.set(200, 200);
45
45
 
46
- buildPreview(model, vPreview.el);
46
+ buildGridObstaclePreview(model, vPreview.el);
47
47
 
48
48
  self.addChild(vPreview);
49
49
 
@@ -57,13 +57,13 @@ export class GridObstacleController extends View {
57
57
 
58
58
  controller.add(proxy, 'size');
59
59
  controller.addAction(() => {
60
- buildPreview(model, vPreview.el);
60
+ buildGridObstaclePreview(model, vPreview.el);
61
61
  }, 'update preview');
62
62
 
63
63
  proxy.size.onChanged.add((x, y) => {
64
64
  model.resize(x, y);
65
65
 
66
- buildPreview(model, vPreview.el);
66
+ buildGridObstaclePreview(model, vPreview.el);
67
67
  });
68
68
  }
69
69
 
@@ -170,7 +170,7 @@ export class TerrainController extends View {
170
170
 
171
171
  if (model !== null) {
172
172
  controller.addAction(() => {
173
- model.tiles.rebuild();
173
+ model.__tiles.rebuild();
174
174
  }, 'Rebuild');
175
175
 
176
176
  controller.addAction(() => {
@@ -5,17 +5,19 @@ export class NumberController extends View {
5
5
  /**
6
6
  *
7
7
  * @param {string[]} [classList]
8
+ * @param {number} [value]
9
+ * @param figures
8
10
  */
9
- constructor({ classList = [] } = {}) {
11
+ constructor({ classList = [], value = 0, figures = 6 } = {}) {
10
12
  super();
11
13
 
12
- const value = new Vector1(0);
14
+ const _value = new Vector1(value);
13
15
 
14
16
  /**
15
17
  *
16
18
  * @type {Vector1}
17
19
  */
18
- this.value = value;
20
+ this.value = _value;
19
21
 
20
22
  const el = document.createElement('input');
21
23
  this.el = el;
@@ -23,6 +25,8 @@ export class NumberController extends View {
23
25
  classList.forEach(c => this.addClass(c));
24
26
 
25
27
  el.setAttribute('type', 'text');
28
+ el.setAttribute('spellcheck', false);
29
+ el.setAttribute('size', 2);
26
30
 
27
31
  el.classList.add('ui-number-controller');
28
32
 
@@ -30,23 +34,31 @@ export class NumberController extends View {
30
34
 
31
35
  function data2view() {
32
36
 
33
- if(lockForward){
37
+ if (lockForward) {
34
38
  return;
35
39
  }
36
40
 
37
- el.value = value.getValue();
41
+ const num_value = _value.getValue();
42
+
43
+ let str = num_value;
44
+
45
+ if (Math.abs(num_value) > 0 && Math.abs(num_value % 1).toString().length > (figures + 2)) {
46
+ str = num_value.toFixed(figures);
47
+ }
48
+
49
+ el.value = str;
38
50
 
39
51
  }
40
52
 
41
53
  function view2data() {
42
54
  lockForward = true;
43
55
 
44
- value.set(parseFloat(el.value));
56
+ _value.set(parseFloat(el.value));
45
57
 
46
58
  lockForward = false;
47
59
  }
48
60
 
49
- value.process(data2view);
61
+ _value.process(data2view);
50
62
 
51
63
  el.addEventListener('input', view2data);
52
64
  }
@@ -26,7 +26,7 @@ export class NodeGraphCamera {
26
26
 
27
27
  const v2 = new Vector2();
28
28
 
29
- const CONNECTION_WIDTH = 4;
29
+ const CONNECTION_WIDTH = 3;
30
30
  const PORT_BEND_OFFSET_X = 100;
31
31
 
32
32
  export class NodeGraphView extends View {
@@ -116,7 +116,7 @@ export class NodeGraphView extends View {
116
116
 
117
117
  tempConnection.enabled = true;
118
118
  tempConnection.endpoint = endpoint;
119
- tempConnection.anchor = p.clone();
119
+
120
120
  },
121
121
  dragEnd() {
122
122
  tempConnection.enabled = false;
@@ -45,20 +45,18 @@ export class NodeView extends View {
45
45
  classList: ['name']
46
46
  });
47
47
 
48
- const v2_origin = new Vector2();
48
+ const v2_prev_position = new Vector2();
49
49
 
50
50
  const self = this;
51
51
 
52
52
  if (enableDrag) {
53
53
  const draggableAspect = new DraggableAspect({
54
54
  el: this.el,
55
- dragStart() {
56
- v2_origin.copy(visual.dimensions.position);
55
+ dragStart(p) {
56
+ v2_prev_position.copy(p);
57
57
  },
58
- drag(position, origin) {
59
- const p = position.clone();
60
-
61
- p.sub(origin);
58
+ drag(position, origin, delta) {
59
+ const p = delta.clone();
62
60
 
63
61
  const scale = new Vector2(1, 1);
64
62
 
@@ -66,9 +64,9 @@ export class NodeView extends View {
66
64
 
67
65
  p.divide(scale);
68
66
 
69
- p.add(v2_origin);
67
+ // p.add(v2_origin);
70
68
 
71
- visual.dimensions.position.copy(p);
69
+ visual.dimensions.position.add(p);
72
70
  }
73
71
  });
74
72
  this.on.linked.add(draggableAspect.start, draggableAspect);
@@ -1,5 +1,5 @@
1
1
  import { assert } from "../../../core/assert.js";
2
- import { isTypedArray } from "../../../core/json/JsonUtils.js";
2
+ import { isTypedArray } from "../../../core/collection/array/typed/isTypedArray.js";
3
3
 
4
4
  /**
5
5
  *
@@ -12,7 +12,7 @@ export class AssetManager {
12
12
 
13
13
  clear(): void
14
14
 
15
- registerLoader<T>(type: string, loader: AssetLoader<T>): Promise<void>
15
+ registerLoader<T>(type: string, loader: AssetLoader<T>): Promise<AssetLoader<T>>
16
16
 
17
17
  unregisterLoader(type: string): Promise<void>
18
18