@woosh/meep-engine 2.33.23 → 2.33.27

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 (302) hide show
  1. package/core/binary/BitSet.js +151 -167
  2. package/core/binary/BitSet.spec.js +99 -1
  3. package/core/binary/ValidatingBitSetWrapper.js +81 -0
  4. package/core/bvh2/BinaryNode.js +1 -1
  5. package/core/bvh2/aabb3/AABB3.js +21 -10
  6. package/core/bvh2/aabb3/AABB3Math.js +1 -1
  7. package/core/bvh2/binary/2/BinaryUint32BVH.js +498 -0
  8. package/core/bvh2/binary/2/BinaryUint32BVH.spec.js +54 -0
  9. package/core/bvh2/binary/IndexedBinaryBVH.js +22 -26
  10. package/core/bvh2/traversal/ThreeClippingPlaneComputingBVHVisitor.js +5 -1
  11. package/core/bvh2/traversal/__detailed_box_volume_intersection.js +22 -5
  12. package/core/cache/Cache.d.ts +4 -2
  13. package/core/cache/Cache.js +5 -2
  14. package/core/collection/ArrayUtils.js +1 -1
  15. package/core/collection/HashMap.d.ts +9 -2
  16. package/core/collection/HashSet.d.ts +7 -2
  17. package/core/collection/HashSet.js +7 -2
  18. package/core/collection/array/arrayQuickSort.js +9 -6
  19. package/core/collection/array/array_swap.js +22 -0
  20. package/core/collection/array/binarySearchHighIndex.js +1 -1
  21. package/core/collection/array/computeHashArray.js +22 -0
  22. package/core/collection/array/computeHashIntegerArray.js +15 -0
  23. package/core/collection/array/copyArray.js +2 -2
  24. package/core/collection/array/typed/typed_array_copy.js +1 -1
  25. package/core/collection/table/DataType2TypedArrayConstructorMapping.js +15 -0
  26. package/core/color/Color.js +2 -1
  27. package/core/function/FunctionCompiler.js +2 -1
  28. package/core/geom/3d/aabb/aabb3_computeDistanceAbovePlane.js +9 -33
  29. package/core/geom/3d/frustum/array_setFromProjectionMatrix.js +3 -3
  30. package/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +1 -1
  31. package/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.js +41 -0
  32. package/core/geom/3d/morton/mortonEncode_magicbits.js +2 -1
  33. package/core/geom/3d/morton/reinterpret_float32_as_int32.js +13 -0
  34. package/core/geom/3d/morton/v3_morton_encode_transformed.js +33 -0
  35. package/core/geom/3d/normal/hemioct/unit_hemioct.spec.js +1 -1
  36. package/core/geom/3d/ray/ray_computeNearestPointToPoint.js +37 -0
  37. package/core/geom/3d/shape/AbstractShape3D.js +65 -0
  38. package/core/geom/3d/shape/TransformedShape3D.js +181 -0
  39. package/core/geom/3d/shape/TransformedShape3D.spec.js +33 -0
  40. package/core/geom/3d/shape/UnionShape3D.js +255 -0
  41. package/core/geom/3d/shape/UnitCubeShape3D.js +101 -0
  42. package/core/geom/3d/shape/UnitCubeShape3D.spec.js +42 -0
  43. package/core/geom/3d/shape/UnitSphereShape3D.js +55 -0
  44. package/core/geom/3d/shape/util/compute_signed_distance_gradient_by_sampling.js +48 -0
  45. package/core/geom/3d/shape/util/shape_to_visual_entity.js +159 -0
  46. package/core/geom/AABB2.js +1 -1
  47. package/core/geom/ConicRay.js +3 -1
  48. package/core/geom/LineSegment.js +0 -78
  49. package/core/geom/Matrix4.js +7 -8
  50. package/core/geom/Rectangle.js +2 -1
  51. package/core/geom/Vector1.js +1 -1
  52. package/core/geom/Vector3.js +2 -1
  53. package/core/geom/Vector4.js +2 -1
  54. package/core/geom/random/randomPointInBox.js +7 -3
  55. package/core/geom/random/randomPointInPoint.js +6 -3
  56. package/core/geom/random/randomPointInSphere.js +9 -5
  57. package/core/geom/random/randomPointOnBox.js +7 -3
  58. package/core/geom/random/randomPointOnSphere.js +6 -3
  59. package/core/geom/v3_length.js +8 -3
  60. package/core/graph/graph_k_means_cluster.js +1 -1
  61. package/core/json/resolvePathByArray.js +2 -2
  62. package/core/math/MathUtils.js +0 -354
  63. package/core/math/MathUtils.spec.js +7 -1
  64. package/core/math/gaussian.js +9 -0
  65. package/core/math/hash/computeHashFloat.js +17 -0
  66. package/core/math/hash/computeHashFloatArray.js +34 -0
  67. package/core/math/hash/computeObjectHash.js +54 -0
  68. package/core/math/intersects1D.js +19 -0
  69. package/core/math/interval/NumericInterval.js +2 -2
  70. package/core/math/isValueBetween.js +10 -0
  71. package/core/math/isValueBetweenInclusive.js +10 -0
  72. package/core/math/noise/curl_noise_3dt.js +1 -1
  73. package/core/math/noise/sdnoise.js +10 -10
  74. package/core/math/overlap1D.js +19 -0
  75. package/core/math/pingpong.js +17 -0
  76. package/core/math/random/makeRangedRandom.js +19 -0
  77. package/core/math/random/randomFloatBetween.js +14 -0
  78. package/core/math/random/randomFromArray.js +19 -0
  79. package/core/math/random/randomGaussian.js +15 -0
  80. package/core/math/random/randomIntegerBetween.js +14 -0
  81. package/core/math/random/roundFair.js +15 -0
  82. package/core/math/separation1D.js +21 -0
  83. package/core/math/solveQuadratic.js +25 -0
  84. package/core/model/BoundedValue.js +1 -1
  85. package/core/model/node-graph/node/NodeInstancePortReference.js +1 -1
  86. package/core/model/node-graph/node/Port.js +1 -1
  87. package/core/model/reactive/evaluation/MultiPredicateEvaluator.spec.js +3 -1
  88. package/core/model/reactive/model/ReactiveBinaryExpression.js +1 -1
  89. package/core/model/reactive/model/terminal/ReactiveLiteralNumber.js +1 -1
  90. package/core/model/reactive/model/terminal/ReactiveReference.js +1 -1
  91. package/core/model/reactive/model/util/createRandomReactiveExpression.js +1 -1
  92. package/core/model/stat/LinearModifier.js +1 -1
  93. package/core/parser/simple/Token.d.ts +13 -0
  94. package/core/parser/simple/Token.js +61 -27
  95. package/{engine/graphics/render/forward_plus/materials → core/primitives/strings}/insert_after.js +3 -0
  96. package/core/primitives/strings/insert_after_or_replace.js +27 -0
  97. package/editor/process/symbolic/makeHelperBoxGeometry.js +44 -0
  98. package/editor/tools/FoliagePaintTool.js +4 -4
  99. package/editor/view/ecs/EntityEditor.js +2 -2
  100. package/editor/view/ecs/components/particles/ParticleEmitterController.js +2 -2
  101. package/engine/EngineHarness.js +1 -0
  102. package/engine/animation/AnimationUtils.js +5 -5
  103. package/engine/animation/curve/AnimationCurve.js +72 -0
  104. package/engine/animation/curve/Keyframe.js +27 -0
  105. package/engine/animation/keyed2/AnimationTrack.js +27 -3
  106. package/engine/asset/Asset.js +1 -1
  107. package/engine/asset/loaders/GLTFAssetLoader.d.ts +1 -1
  108. package/engine/asset/loaders/GLTFAssetLoader.js +62 -1
  109. package/engine/asset/loaders/image/ImageDecoderWorker.js +4 -3
  110. package/engine/asset/loaders/image/ImageRGBADataAsset.js +10 -2
  111. package/engine/asset/loaders/image/ImageRGBADataLoader.js +3 -3
  112. package/engine/asset/loaders/image/codec/NativeImageDecoder.js +2 -1
  113. package/engine/asset/loaders/image/png/PNG.js +113 -6
  114. package/engine/asset/loaders/image/png/PNGReader.js +5 -0
  115. package/engine/asset/loaders/material/bitmap2sampler_gl.js +1 -1
  116. package/engine/asset/loaders/material/computeImageBitmapEquality.js +6 -1
  117. package/engine/asset/loaders/material/computeMaterialHash.js +3 -1
  118. package/engine/asset/loaders/material/computeTextureEquality.js +40 -49
  119. package/engine/asset/loaders/material/computeTextureHash.js +2 -1
  120. package/engine/ecs/EntityBuilder.js +25 -5
  121. package/engine/ecs/EntityComponentDataset.js +1 -1
  122. package/engine/ecs/animation/Animation.js +2 -1
  123. package/engine/ecs/animation/InverseKinematics.js +2 -1
  124. package/engine/ecs/attachment/AttachmentBinding.js +8 -0
  125. package/engine/ecs/attachment/AttachmentSystem.js +4 -0
  126. package/engine/ecs/attachment/TransformAttachmentBinding.js +14 -44
  127. package/engine/ecs/components/Tag.js +27 -6
  128. package/engine/ecs/dynamic_actions/DynamicActorSystem.js +2 -1
  129. package/engine/ecs/dynamic_actions/DynamicRuleDescriptionTable.spec.js +3 -5
  130. package/engine/ecs/dynamic_actions/actions/definition/WeightedRandomActionDescription.js +1 -1
  131. package/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.js +1 -1
  132. package/engine/ecs/foliage/InstancedFoliage.js +277 -266
  133. package/engine/ecs/foliage/ecs/Foliage2System.js +7 -7
  134. package/engine/ecs/foliage/ecs/InstancedMeshComponent.js +37 -0
  135. package/engine/ecs/foliage/ecs/{Foliage2.js → InstancedMeshLayer.js} +3 -45
  136. package/engine/ecs/foliage/ecs/InstancedMeshSerializationAdapter.js +6 -5
  137. package/engine/ecs/foliage/ecs/InstancedMeshUtils.js +7 -6
  138. package/engine/ecs/fow/FogOfWar.js +4 -0
  139. package/engine/ecs/fow/FogOfWarSystem.js +2 -0
  140. package/engine/ecs/fow/shader/FogOfWarRenderer.js +1 -1
  141. package/engine/ecs/gui/GUIElement.js +1 -1
  142. package/engine/ecs/gui/hud/HeadsUpDisplay.js +1 -1
  143. package/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +2 -0
  144. package/engine/ecs/gui/position/ViewportPosition.js +2 -1
  145. package/engine/ecs/storage/binary/BinarySerializationRegistry.js +1 -1
  146. package/engine/ecs/system/AbstractContextSystem.js +1 -1
  147. package/engine/ecs/systems/RangedAttackSystem.js +1 -1
  148. package/engine/ecs/systems/SteeringSystem.js +1 -1
  149. package/engine/ecs/systems/TagSystem.js +17 -0
  150. package/engine/ecs/terrain/ecs/layers/TerrainLayer.js +12 -16
  151. package/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -1
  152. package/engine/ecs/tooltip/TooltipComponent.js +15 -0
  153. package/engine/ecs/transform/Transform.js +19 -6
  154. package/engine/graphics/GraphicsEngine.js +11 -6
  155. package/engine/graphics/composit/CompositLayer.js +17 -4
  156. package/engine/graphics/composit/CompositingStages.js +8 -0
  157. package/engine/graphics/composit/LayerCompositer.js +35 -6
  158. package/engine/graphics/ecs/animation/animator/AnimationClip.js +2 -1
  159. package/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -1
  160. package/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -1
  161. package/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -1
  162. package/engine/graphics/ecs/animation/animator/graph/AnimationGraph.js +2 -1
  163. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -1
  164. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +1 -1
  165. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +2 -1
  166. package/engine/graphics/ecs/camera/CameraClippingPlaneComputer.js +1 -1
  167. package/engine/graphics/ecs/highlight/HighlightDefinition.js +2 -1
  168. package/engine/graphics/ecs/highlight/plugin/OutlineRenderPlugin.js +11 -7
  169. package/engine/graphics/ecs/light/Light.d.ts +1 -1
  170. package/engine/graphics/ecs/light/Light.js +5 -0
  171. package/engine/graphics/ecs/light/binding/three/ThreeLightBinding.js +5 -1
  172. package/engine/graphics/ecs/mesh/Mesh.js +2 -1
  173. package/engine/graphics/ecs/mesh-v2/DrawMode.js +5 -0
  174. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +13 -0
  175. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +32 -18
  176. package/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts +6 -0
  177. package/engine/graphics/geometry/AttributeSpec.js +105 -0
  178. package/engine/graphics/{micron/format/MicronVertexDataSpec.js → geometry/VertexDataSpec.js} +56 -25
  179. package/engine/graphics/geometry/instancing/InstancedMeshGroup.js +14 -72
  180. package/engine/graphics/geometry/instancing/rewriteMaterial.js +70 -0
  181. package/engine/graphics/material/manager/MaterialManager.js +2 -1
  182. package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +7 -7
  183. package/engine/graphics/micron/build/fill_patch_geometry_data.js +1 -1
  184. package/engine/graphics/micron/buildPatchwork.js +1 -1
  185. package/engine/graphics/micron/format/MicronGeometry.js +3 -3
  186. package/engine/graphics/micron/format/serialization/MicronGeometryBinarySerializationAdapter.js +2 -2
  187. package/engine/graphics/micron/format/serialization/deserialize_attribute_spec.js +1 -1
  188. package/engine/graphics/micron/format/serialization/serialize_attribute_spec.js +1 -1
  189. package/engine/graphics/micron/render/PatchCacheKey.js +1 -1
  190. package/engine/graphics/micron/render/instanced/AttributeDataTexture.js +11 -9
  191. package/engine/graphics/micron/render/instanced/ThreeInstancedAdapter.js +0 -2
  192. package/engine/graphics/micron/render/v1/ThreeVirtualGeometryAdapter.js +1 -1
  193. package/engine/graphics/particles/ParticleEmitterLibrary.js +3 -0
  194. package/engine/graphics/particles/ecs/{ParticleEmitterSystem2.js → ParticleEmitterSystem.js} +17 -9
  195. package/engine/graphics/particles/particular/engine/ParticularEngine.js +8 -2
  196. package/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.js +80 -16
  197. package/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +71 -77
  198. package/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.js +5 -0
  199. package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +2 -1
  200. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +141 -14
  201. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.spec.js +8 -7
  202. package/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +1 -1
  203. package/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +8 -2
  204. package/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +2 -1
  205. package/engine/graphics/particles/particular/engine/parameter/ParameterTrack.js +1 -1
  206. package/engine/graphics/particles/particular/engine/parameter/ParticleParameter.js +1 -1
  207. package/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.js +24 -0
  208. package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +262 -71
  209. package/engine/graphics/particles/particular/engine/renderers/billboard/prototypeBillboardRenderer.js +9 -9
  210. package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +81 -48
  211. package/engine/graphics/particles/particular/engine/shader/debugAtlas.js +14 -0
  212. package/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.js +2 -5
  213. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js +2 -6
  214. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +2 -7
  215. package/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +2 -5
  216. package/engine/graphics/particles/particular/engine/simulator/update_parameters.js +1 -1
  217. package/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js +1 -1
  218. package/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +1 -1
  219. package/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.js +141 -0
  220. package/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.js +478 -0
  221. package/engine/graphics/particles/particular/engine/utils/volume/lut_to_sampler.js +27 -0
  222. package/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +938 -0
  223. package/engine/graphics/particles/particular/group/Operation.js +18 -0
  224. package/engine/graphics/particles/particular/group/OperationType.js +9 -0
  225. package/engine/graphics/particles/particular/group/ParticleAttribute.js +2 -1
  226. package/engine/graphics/particles/particular/group/ParticleAttributeType.js +11 -0
  227. package/engine/graphics/particles/particular/group/ParticleDataType.js +10 -0
  228. package/engine/graphics/particles/particular/group/ParticleGroup.js +7 -245
  229. package/engine/graphics/particles/particular/group/ParticleGroup.spec.js +3 -1
  230. package/engine/graphics/particles/particular/group/ParticleSpecification.js +21 -14
  231. package/engine/graphics/particles/particular/group/itemSizeFromAttributeType.js +20 -0
  232. package/engine/graphics/particles/particular/group/optimizeCommandQueue.js +162 -0
  233. package/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.js +19 -0
  234. package/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js +16 -11
  235. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameter.js +2 -1
  236. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameterSet.js +1 -1
  237. package/engine/graphics/render/forward_plus/LightManager.js +117 -94
  238. package/engine/graphics/render/forward_plus/PointLight.js +9 -0
  239. package/engine/graphics/render/forward_plus/PointLightData.js +1 -1
  240. package/engine/graphics/render/forward_plus/SpotLight.js +9 -0
  241. package/engine/graphics/render/forward_plus/cluster/compute_light_data_hash_0.js +2 -2
  242. package/engine/graphics/render/forward_plus/materials/FP_INJECTION_POINT_ACCUMULATION.js +1 -0
  243. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_ACCUMULATION.js +32 -0
  244. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_DECODE_PARS.js +51 -0
  245. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_PREAMBLE.js +25 -0
  246. package/engine/graphics/render/forward_plus/materials/FPlusDebugMaterial.js +3 -3
  247. package/engine/graphics/render/forward_plus/materials/ForwardPlusThreeMaterial.js +1 -1
  248. package/engine/graphics/render/forward_plus/materials/fp_build_fragment_shader.js +31 -120
  249. package/engine/graphics/render/forward_plus/materials/fp_build_vertex_lighting_shared.js +35 -0
  250. package/engine/graphics/render/forward_plus/materials/fp_build_vertex_shader.js +4 -5
  251. package/engine/graphics/render/forward_plus/plugin/ForwardPlusRenderingPlugin.js +1 -1
  252. package/engine/graphics/render/forward_plus/plugin/MaterialTransformer.js +10 -3
  253. package/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +594 -59
  254. package/engine/graphics/render/forward_plus/prototypeLightManager.js +208 -89
  255. package/engine/graphics/render/forward_plus/query/analytical_triplanar_corner_mapping.js +8 -0
  256. package/engine/graphics/render/forward_plus/query/cube_mapping.js +38 -0
  257. package/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +86 -0
  258. package/engine/graphics/render/forward_plus/query/point_light_inside_volume.js +74 -0
  259. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_objects.js +131 -0
  260. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.js +129 -0
  261. package/engine/graphics/render/forward_plus/query/spot_light_inside_volume.js +33 -0
  262. package/engine/graphics/render/forward_plus/read_frustum_corner.js +14 -0
  263. package/engine/graphics/render/forward_plus/testClusterEquality.js +22 -0
  264. package/engine/graphics/render/visibility/IncrementalDeltaSet.js +11 -0
  265. package/engine/graphics/render/visibility/hiz/prototypeHiZ.js +1 -1
  266. package/engine/graphics/shaders/TerrainShader.js +4 -5
  267. package/engine/graphics/shadows/ShadowMapRenderer.js +8 -2
  268. package/engine/graphics/texture/atlas/ManagedTextureAtlas.js +12 -1
  269. package/engine/graphics/texture/sampler/HarmonicDiffusionGrid.spec.js +1 -1
  270. package/engine/graphics/texture/sampler/SampleTraverser.js +1 -1
  271. package/engine/graphics/texture/sampler/Sampler2D.js +3 -1
  272. package/engine/graphics/texture/sampler/convertTexture2Sampler2D.js +1 -1
  273. package/engine/graphics/texture/sampler/copy_Sampler2D_channel_data.js +66 -0
  274. package/engine/graphics/texture/sampler/distanceField.spec.js +1 -1
  275. package/engine/graphics/util/composeMatrix4.js +33 -23
  276. package/engine/graphics/util/decompose_matrix_4_array.js +61 -0
  277. package/engine/grid/components/GridObstacle.js +1 -1
  278. package/engine/intelligence/behavior/ecs/BehaviorComponent.js +30 -14
  279. package/engine/intelligence/behavior/selector/WeightedElement.js +2 -1
  280. package/engine/intelligence/optimization/RandomOptimizer.js +1 -1
  281. package/engine/knowledge/database/StaticKnowledgeDataTable.js +6 -1
  282. package/engine/navigation/ecs/components/Path.js +1 -6
  283. package/engine/navigation/grid/FastBinaryHeap.spec.js +1 -1
  284. package/engine/sound/ecs/emitter/SoundEmitter.js +2 -1
  285. package/engine/sound/ecs/emitter/SoundTrack.js +2 -1
  286. package/engine/sound/material/concrete/RandomSoundMaterial.js +1 -1
  287. package/engine/ui/notification/notificationGenerator.js +1 -1
  288. package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +1 -1
  289. package/generation/grid/generation/GridTaskExecuteRuleTimes.js +2 -1
  290. package/generation/markers/actions/MarkerNodeActionSelectRandom.js +1 -1
  291. package/generation/markers/transform/MarkerNodeTransformerRecordUniqueRandomEnum.js +1 -1
  292. package/generation/placement/action/random/CellActionSelectRandom.js +1 -1
  293. package/generation/theme/ThemeEngine.js +1 -1
  294. package/misc/makeMaterialIconCached.js +2 -2
  295. package/package.json +1 -1
  296. package/view/elements/image/HTMLElementCacheKey.js +2 -1
  297. package/view/elements/radial/RadialText.js +2 -1
  298. package/view/minimap/gl/MinimapMarkersGL.js +6 -100
  299. package/view/minimap/gl/MinimapWorldGL.js +12 -5
  300. package/view/minimap/gl/buildMaterial.js +94 -0
  301. package/engine/graphics/micron/format/MicronGeometryBufferAttributeSpec.js +0 -71
  302. package/engine/graphics/render/forward_plus/queryBVH_Frustum.js +0 -357
@@ -0,0 +1,938 @@
1
+ import { EngineHarness } from "../../../../../../EngineHarness.js";
2
+ import { EngineConfiguration } from "../../../../../../EngineConfiguration.js";
3
+ import GUIElementSystem from "../../../../../../ecs/gui/GUIElementSystem.js";
4
+ import HeadsUpDisplaySystem from "../../../../../../ecs/gui/hud/HeadsUpDisplaySystem.js";
5
+ import TagSystem from "../../../../../../ecs/systems/TagSystem.js";
6
+ import { AttachmentSocketsSystem } from "../../../../../../ecs/sockets/AttachmentSocketsSystem.js";
7
+ import { AttachmentSystem } from "../../../../../../ecs/attachment/AttachmentSystem.js";
8
+ import { SoundEmitterSystem } from "../../../../../../sound/ecs/emitter/SoundEmitterSystem.js";
9
+ import SoundControllerSystem from "../../../../../../sound/ecs/SoundControllerSystem.js";
10
+ import SoundListenerSystem from "../../../../../../sound/ecs/SoundListenerSystem.js";
11
+ import AnimationSystem from "../../../../../../ecs/systems/AnimationSystem.js";
12
+ import TopDownCameraControllerSystem from "../../../../../ecs/camera/topdown/TopDownCameraControllerSystem.js";
13
+ import { CameraSystem } from "../../../../../ecs/camera/CameraSystem.js";
14
+ import { MeshSystem } from "../../../../../ecs/mesh/MeshSystem.js";
15
+ import ClingToTerrainSystem from "../../../../../../ecs/terrain/ecs/ClingToTerrainSystem.js";
16
+ import TerrainSystem from "../../../../../../ecs/terrain/ecs/TerrainSystem.js";
17
+ import Trail2DSystem from "../../../../../ecs/trail2d/Trail2DSystem.js";
18
+ import { Foliage2System } from "../../../../../../ecs/foliage/ecs/Foliage2System.js";
19
+ import ViewportPositionSystem from "../../../../../../ecs/gui/position/ViewportPositionSystem.js";
20
+ import SynchronizePositionSystem from "../../../../../../ecs/systems/SynchronizePositionSystem.js";
21
+ import InputControllerSystem from "../../../../../../input/ecs/systems/InputControllerSystem.js";
22
+ import { InputSystem } from "../../../../../../input/ecs/systems/InputSystem.js";
23
+ import MeshHighlightSystem from "../../../../../ecs/highlight/system/MeshHighlightSystem.js";
24
+ import LightSystem from "../../../../../ecs/light/LightSystem.js";
25
+ import { BehaviorSystem } from "../../../../../../intelligence/behavior/ecs/BehaviorSystem.js";
26
+ import { SerializationMetadataSystem } from "../../../../../../ecs/systems/SerializationMetadataSystem.js";
27
+ import { PathDisplaySystem } from "../../../../../ecs/path/PathDisplaySystem.js";
28
+ import RenderSystem from "../../../../../../ecs/systems/RenderSystem.js";
29
+ import { makeEngineOptionsModel } from "../../../../../../../../model/game/options/makeEngineOptionsModel.js";
30
+ import { enableEditor } from "../../../../../../../editor/enableEditor.js";
31
+ import { buildCubeURLs } from "../../../../../texture/cubemap/buildCubeURLs.js";
32
+ import { AmbientOcclusionPostProcessEffect } from "../../../../../render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js";
33
+ import Vector2 from "../../../../../../../core/geom/Vector2.js";
34
+ import Vector3 from "../../../../../../../core/geom/Vector3.js";
35
+ import EntityBuilder from "../../../../../../ecs/EntityBuilder.js";
36
+ import { Transform } from "../../../../../../ecs/transform/Transform.js";
37
+ import Mesh from "../../../../../ecs/mesh/Mesh.js";
38
+ import { AABB3 } from "../../../../../../../core/bvh2/aabb3/AABB3.js";
39
+ import { ParticleVolume } from "./ParticleVolume.js";
40
+ import { ParticleEmitterSystem } from "../../../../ecs/ParticleEmitterSystem.js";
41
+ import { BehaviorComponent } from "../../../../../../intelligence/behavior/ecs/BehaviorComponent.js";
42
+ import { RepeatBehavior } from "../../../../../../intelligence/behavior/decorator/RepeatBehavior.js";
43
+ import { ActionBehavior } from "../../../../../../intelligence/behavior/primitive/ActionBehavior.js";
44
+ import { pingpong } from "../../../../../../../core/math/pingpong.js";
45
+ import { ParameterLookupTable } from "../../parameter/ParameterLookupTable.js";
46
+ import { pick } from "../../../../../../../../model/game/util/ScreenGridPicker.js";
47
+ import { obtainTerrain } from "../../../../../../../../model/game/scenes/SceneUtils.js";
48
+ import GUIElement from "../../../../../../ecs/gui/GUIElement.js";
49
+ import EmptyView from "../../../../../../../view/elements/EmptyView.js";
50
+ import HeadsUpDisplay from "../../../../../../ecs/gui/hud/HeadsUpDisplay.js";
51
+ import ViewportPosition from "../../../../../../ecs/gui/position/ViewportPosition.js";
52
+ import { CanvasView } from "../../../../../../../view/elements/CanvasView.js";
53
+ import convertSampler2D2Canvas from "../../../../../texture/sampler/Sampler2D2Canvas.js";
54
+ import Vector1 from "../../../../../../../core/geom/Vector1.js";
55
+ import { clamp } from "../../../../../../../core/math/clamp.js";
56
+ import { UnitCubeShape3D } from "../../../../../../../core/geom/3d/shape/UnitCubeShape3D.js";
57
+ import { ShadedGeometrySystem } from "../../../../../ecs/mesh-v2/ShadedGeometrySystem.js";
58
+ import { lut_to_sampler } from "./lut_to_sampler.js";
59
+ import {
60
+ shape_to_visual_entity,
61
+ SHAPE_VISUAL_ENTITY_TAG
62
+ } from "../../../../../../../core/geom/3d/shape/util/shape_to_visual_entity.js";
63
+ import { seededRandom } from "../../../../../../../core/math/random/seededRandom.js";
64
+ import { TransformedShape3D } from "../../../../../../../core/geom/3d/shape/TransformedShape3D.js";
65
+ import { mat4 } from "gl-matrix";
66
+ import { UnionShape3D } from "../../../../../../../core/geom/3d/shape/UnionShape3D.js";
67
+ import { ShadedGeometry } from "../../../../../ecs/mesh-v2/ShadedGeometry.js";
68
+ import { DrawMode } from "../../../../../ecs/mesh-v2/DrawMode.js";
69
+ import { makeHelperBoxGeometry } from "../../../../../../../editor/process/symbolic/makeHelperBoxGeometry.js";
70
+ import { LineBasicMaterial } from "three";
71
+ import Renderable from "../../../../../../ecs/components/Renderable.js";
72
+ import { TransformControls } from "three/examples/jsm/controls/TransformControls.js";
73
+ import { threeUpdateTransform } from "../../../../../util/threeUpdateTransform.js";
74
+ import InputController from "../../../../../../input/ecs/components/InputController.js";
75
+ import { computeStatisticalMean } from "../../../../../../../core/math/statistics/computeStatisticalMean.js";
76
+ import ButtonView from "../../../../../../../view/elements/button/ButtonView.js";
77
+ import { UnitSphereShape3D } from "../../../../../../../core/geom/3d/shape/UnitSphereShape3D.js";
78
+ import TopDownCameraController from "../../../../../ecs/camera/topdown/TopDownCameraController.js";
79
+ import { randomFloatBetween } from "../../../../../../../core/math/random/randomFloatBetween.js";
80
+ import { MicronRenderPlugin } from "../../../../../micron/plugin/MicronRenderPlugin.js";
81
+
82
+ const engineHarness = new EngineHarness();
83
+
84
+ function makeConfig(engine) {
85
+
86
+ const config = new EngineConfiguration();
87
+
88
+ /**
89
+ *
90
+ * @type {SoundEngine}
91
+ */
92
+ const sound = engine.sound;
93
+ const graphics = engine.graphics;
94
+ const assetManager = engine.assetManager;
95
+ const devices = engine.devices;
96
+
97
+ const guiSystem = new GUIElementSystem(engine.gui.view, engine);
98
+ const headsUpDisplaySystem = new HeadsUpDisplaySystem(graphics);
99
+
100
+ config.systems.push(
101
+ new TagSystem(),
102
+ new AttachmentSocketsSystem(),
103
+ new AttachmentSystem(),
104
+ new SoundEmitterSystem(assetManager, sound.destination, sound.context),
105
+ new SoundControllerSystem(),
106
+ new SoundListenerSystem(sound.context),
107
+ guiSystem,
108
+ new AnimationSystem(graphics.viewport.size),
109
+ new TopDownCameraControllerSystem(graphics),
110
+ new CameraSystem(graphics.scene, graphics),
111
+ new MeshSystem(engine),
112
+ new ClingToTerrainSystem(),
113
+ new TerrainSystem(graphics, assetManager),
114
+ new Trail2DSystem(engine),
115
+ new Foliage2System(assetManager, graphics),
116
+ new ViewportPositionSystem(graphics.viewport.size),
117
+ new SynchronizePositionSystem(),
118
+ new InputControllerSystem(devices),
119
+ new InputSystem(devices),
120
+ new MeshHighlightSystem(engine),
121
+ new LightSystem(engine, {
122
+ shadowResolution: 2048
123
+ }),
124
+ headsUpDisplaySystem,
125
+ new BehaviorSystem(engine),
126
+ new SerializationMetadataSystem(),
127
+ new PathDisplaySystem(engine),
128
+ new ParticleEmitterSystem(engine),
129
+ new ShadedGeometrySystem(engine)
130
+ );
131
+
132
+
133
+ // Plugins
134
+ config.addPlugin(MicronRenderPlugin);
135
+
136
+
137
+ // Knowledge
138
+
139
+ return config;
140
+ }
141
+
142
+
143
+ /**
144
+ *
145
+ * @param {EngineHarness} harness
146
+ * @return {Promise<void>}
147
+ */
148
+ async function init(harness) {
149
+ const engine = harness.engine;
150
+
151
+ engine.entityManager.addSystem(new RenderSystem(engine.graphics));
152
+
153
+ makeEngineOptionsModel(engine.options, engine);
154
+
155
+ await makeConfig(engine).apply(engine);
156
+
157
+ enableEditor(engine);
158
+
159
+ await engine.graphics.loadEnvironmentMap(buildCubeURLs('data/textures/cubemaps/hip_miramar/32/', '.png'));
160
+
161
+
162
+ await engine.plugins.acquire(AmbientOcclusionPostProcessEffect);
163
+
164
+ await harness.initialize();
165
+
166
+ main(engine);
167
+ }
168
+
169
+
170
+ const heatmap_lut_0 = new ParameterLookupTable(4);
171
+ heatmap_lut_0.write([
172
+ 0, 0, 255, 10,
173
+ 0, 179, 179, 10,
174
+ 0, 255, 0, 10,
175
+ 255, 255, 0, 10,
176
+ 255, 5, 5, 10
177
+ ]);
178
+ heatmap_lut_0.computeUniformPositions();
179
+
180
+ const heatmap_lut_orange_to_red = new ParameterLookupTable(4);
181
+ heatmap_lut_orange_to_red.write([
182
+ 255, 127, 0, 100,
183
+ 206, 2, 86, 100
184
+ ]);
185
+ heatmap_lut_orange_to_red.computeUniformPositions();
186
+
187
+ const heatmap_lut_pink_to_blue = new ParameterLookupTable(4);
188
+ heatmap_lut_pink_to_blue.write([
189
+ 255, 151, 213, 50,
190
+ 2, 243, 255, 50
191
+ ]);
192
+ heatmap_lut_pink_to_blue.computeUniformPositions();
193
+
194
+ const heatmap_lut_3 = new ParameterLookupTable(4);
195
+ heatmap_lut_3.write(
196
+ [
197
+ 196, 196, 196, 255,
198
+ 196, 196, 196, 255,
199
+ 0, 230, 0, 255,
200
+ 0, 230, 0, 255,
201
+ 255, 212, 0, 255,
202
+ 255, 212, 0, 255,
203
+ ],
204
+ [
205
+ 0,
206
+ 0.1,
207
+ 0.1,
208
+ 0.7,
209
+ 0.7,
210
+ 1
211
+ ]
212
+ );
213
+
214
+
215
+ /**
216
+ *
217
+ * @param {Engine} engine
218
+ */
219
+ function make_shape_vis_toggle(engine) {
220
+ const ecd = engine.entityManager.dataset;
221
+ const entities = TagSystem.find_entities_with_tag(SHAPE_VISUAL_ENTITY_TAG, ecd);
222
+
223
+
224
+ const builders = entities.map(e => EntityBuilder.readFromDataset(e, ecd));
225
+
226
+ function toggle() {
227
+ if (builders.length <= 1) {
228
+ return;
229
+ }
230
+
231
+ if (builders[0].isBuilt) {
232
+ builders.forEach(b => b.destroy());
233
+ } else {
234
+ builders.forEach(b => b.build(ecd));
235
+ }
236
+ }
237
+
238
+ const buttonView = new ButtonView({
239
+ action: toggle,
240
+ name: 'Toggle Shapes',
241
+ css: {
242
+ position: 'absolute',
243
+ bottom: '10px',
244
+ right: '10px',
245
+ background: 'rgba(255,255,255,0.8)',
246
+ border: '1px solid rgba(0,0,0,1)',
247
+ padding: '2px'
248
+ }
249
+ });
250
+
251
+ new EntityBuilder()
252
+ .add(GUIElement.fromView(buttonView))
253
+ .build(ecd);
254
+
255
+ return {
256
+ toggle
257
+ };
258
+ }
259
+
260
+ function mat_from_aabb3(aabb3) {
261
+ const m4 = mat4.create();
262
+
263
+ mat4.fromRotationTranslationScale(m4, [0, 0, 0, 1], [(aabb3.x0 + aabb3.x1) / 2, (aabb3.y0 + aabb3.y1) / 2, (aabb3.z0 + aabb3.z1) / 2], [aabb3.getExtentsX(), aabb3.getExtentsY(), aabb3.getExtentsZ()]);
264
+
265
+ return m4;
266
+ }
267
+
268
+ /**
269
+ *
270
+ * @param {string} url
271
+ * @param {EntityComponentDataset} ecd
272
+ * @returns {EntityBuilder}
273
+ */
274
+ function load_model(url, ecd) {
275
+
276
+ const b = new EntityBuilder();
277
+ b
278
+ .add(new Transform())
279
+ .add(Mesh.fromJSON({
280
+ url: url,
281
+ castShadow: true,
282
+ receiveShadow: true
283
+ }))
284
+ .build(ecd);
285
+
286
+ return b;
287
+ }
288
+
289
+ /**
290
+ *
291
+ * @param {Engine} engine
292
+ * @returns {Promise<void>}
293
+ */
294
+ async function sample_scene_0(engine) {
295
+ const ecd = engine.entityManager.dataset;
296
+
297
+ function load_model_s(url, y_offset = 0) {
298
+ const b = load_model(url, ecd);
299
+ b.getComponent(Transform).position.set(
300
+ 20,
301
+ -5.8 + y_offset,
302
+ 100
303
+ );
304
+
305
+ return b;
306
+ }
307
+
308
+ // load_model('moicon/06_04_hapro/00-environment/model.gltf', -0.1);
309
+ load_model_s('moicon/06_04_hapro/05-ground-floor/model.gltf');
310
+ load_model_s('C:/git/moh/app/moicon/06_04_hapro/08-clickable-assets-new/model.gltf');
311
+ // load_model('moicon/06_04_hapro/02-bearers/model.gltf');
312
+ // load_model('moicon/06_04_hapro/04-1st-floor/model.gltf');
313
+
314
+
315
+ await make_demo_volume({
316
+ ecd: ecd,
317
+ lut: heatmap_lut_0,
318
+ shape: UnionShape3D.from([
319
+ TransformedShape3D.from_m4(new UnitCubeShape3D(), mat_from_aabb3(new AABB3(67.73, 0, 89, 115.84, 3, 118.34))),
320
+ TransformedShape3D.from_m4(new UnitCubeShape3D(), mat_from_aabb3(new AABB3(98, 0, 76.5, 109.5, 3, 89)))
321
+ ]),
322
+ particle_size: 4,
323
+ density: 4,
324
+ period: 10
325
+ });
326
+
327
+ await make_demo_volume({
328
+ ecd: ecd,
329
+ lut: heatmap_lut_0,
330
+ shape: UnionShape3D.from([
331
+ TransformedShape3D.from_m4(new UnitCubeShape3D(), [14.980091485108495, 0, 0, 0, 0, 2.812495250139616, 0, 0, 0, 0, 7.469446746375293, 0, 54.83080514238756, 1.568241402881399, 92.51937192481576, 1]),
332
+ TransformedShape3D.from_m4(new UnitCubeShape3D(), [6.644515553810907, 0, 0, 0, 0, 2.812495250139616, 0, 0, 0, 0, 5.507507223409315, 0, 46.95032009188344, 1.568241402881399, 95.54148649329517, 1]),
333
+ TransformedShape3D.from_m4(new UnitCubeShape3D(), [23.762890107594952, 0, 0, 0, 0, 2.812495250139616, 0, 0, 0, 0, 34.57956316503163, 0, 55.436098243647756, 1.568241402881399, 113.46988143189215, 1])
334
+ ]),
335
+ particle_size: 2,
336
+ density: 1,
337
+ period: 10,
338
+ period_offset: 3,
339
+ });
340
+
341
+ await make_demo_volume({
342
+ ecd: ecd,
343
+ lut: heatmap_lut_orange_to_red,
344
+ shape: TransformedShape3D.from_m4(new UnitCubeShape3D(), mat_from_aabb3(new AABB3(97.68, 0, 67.71, 115.76, 3, 76.14))),
345
+ particle_size: 1,
346
+ density: 1.2,
347
+ period: 7,
348
+ period_offset: 2,
349
+ });
350
+
351
+ await make_demo_volume({
352
+ ecd: ecd,
353
+ lut: heatmap_lut_pink_to_blue,
354
+ shape: UnionShape3D.from([
355
+ TransformedShape3D.from_m4(new UnitCubeShape3D(), [15.218520811592711, 0, 0, 0, 0, 3.058639690434693, 0, 0, 0, 0, 5.828701399328644, 0, 89.53848861962253, 2.0721850959505907, 73.05504876489894, 1]),
356
+ TransformedShape3D.from_m4(new UnitCubeShape3D(), [18.10977091153633, 0, 0, 0, 0, 3.058639690434693, 0, 0, 0, 0, 2.5862076050328002, 0, 88.03260126722904, 2.0721850959505907, 69.0797462656922, 1])
357
+ ]),
358
+ particle_size: 4,
359
+ density: 4,
360
+ period: 7,
361
+ period_offset: 2,
362
+ });
363
+
364
+ // large open room, dense particles
365
+ await make_demo_volume({
366
+ ecd: ecd,
367
+ lut: heatmap_lut_3,
368
+ shape: UnionShape3D.from([
369
+ TransformedShape3D.from_m4(new UnitCubeShape3D(), [20.977896627021547, 0, 0, 0, 0, 2.956899734575006, 0, 0, 0, 0, 36.201589869571954, 0, 99.2120028317975, 1.5919924971428276, 49.21655402009093, 1]),
370
+ TransformedShape3D.from_m4(new UnitCubeShape3D(), [24.455615450514458, 0, 0, 0, 0, 2.956899734575006, 0, 0, 0, 0, 28.081536987027807, 0, 80.11618755300161, 1.5919924971428276, 45.13808745329574, 1]),
371
+ TransformedShape3D.from_m4(new UnitCubeShape3D(), [5.562874425497998, 0, 0, 0, 0, 2.956899734575006, 0, 0, 0, 0, 2.654155224548708, 0, 70.80986716000054, 1.5919924971428276, 59.679876796143446, 1])
372
+ ]),
373
+ particle_size: 0.15,
374
+ density: 5,
375
+ period: 7,
376
+ period_offset: 2,
377
+ });
378
+
379
+ // popsicle
380
+ await make_demo_volume({
381
+ ecd: ecd,
382
+ lut: heatmap_lut_orange_to_red,
383
+ shape: UnionShape3D.from([
384
+ TransformedShape3D.from_m4(new UnitCubeShape3D(), [-3.8971594611231577, -1.9562533614625899, -0.5725042419276598, 0, -8.346390838999248, 16.986127440019352, -1.226109479938015, 0, 0.12112312197093604, 0, -0.8245111322851176, 0, 55.83305788880312, 9.579537179233043, 83.59013920067233, 1]),
385
+ TransformedShape3D.from_m4(new UnitSphereShape3D(), [10.237283879346698, 0, 0, 0, 0, 10.237283879346698, 0, 0, 0, 0, 10.237283879346698, 0, 51.783732965076716, 18.028888481196716, 82.91084586075068, 1])
386
+ ]),
387
+ particle_size: 0.7,
388
+ density: 5,
389
+ period: 3,
390
+ period_offset: 2,
391
+ sort: true
392
+ });
393
+
394
+ engine.devices.pointer.on.down.add((p) => {
395
+ pick(p.x, p.y, engine.graphics, obtainTerrain(ecd), (grid_position, position, normal) => {
396
+ console.log(position.toJSON());
397
+ });
398
+ });
399
+
400
+ make_shape_vis_toggle(engine).toggle(); // turn off shape vis initially
401
+
402
+ // editing box
403
+ make_box_editor(engine, Transform.fromJSON({
404
+ position: {
405
+ x: 20,
406
+ y: 5,
407
+ z: 100
408
+ },
409
+ scale: {
410
+ x: 1,
411
+ y: 1,
412
+ z: 1
413
+ }
414
+ }));
415
+ }
416
+
417
+
418
+ /**
419
+ *
420
+ * @param {Engine} engine
421
+ * @returns {Promise<void>}
422
+ */
423
+ async function sample_scene_nam(engine) {
424
+ const ecd = engine.entityManager.dataset;
425
+
426
+ ecd.getAnyComponent(TopDownCameraController).component.fromJSON({
427
+ "target": {
428
+ "x": 21.09522080045099,
429
+ "y": -0.6327784109623013,
430
+ "z": 6.138907038731565
431
+ },
432
+ "pitch": 1.1099999999999923,
433
+ "yaw": -3.143185307179591,
434
+ "roll": 0,
435
+ "distance": 29,
436
+ "distanceMin": 0,
437
+ "distanceMax": 1000
438
+ });
439
+
440
+ load_model('moicon/20_Dec_2021_Nammo/with_assets(for_alex)/model.gltf', ecd)
441
+
442
+ const P_SIZE_SMALL = 0.15;
443
+ const P_SIZE_MEDIUM = 0.6;
444
+ const P_SIZE_LARGE = 2;
445
+
446
+ const random = seededRandom(42);
447
+
448
+ const PERIOD_LONG = 13;
449
+
450
+ await make_demo_volume({
451
+ ecd: ecd,
452
+ lut: heatmap_lut_pink_to_blue,
453
+ shape: TransformedShape3D.from_m4(new UnitCubeShape3D(), [5.267098043281134, 0, 0, 0, 0, 2.3166487265965343, 0, 0, 0, 0, 6.606365126660234, 0, 2.8037239954452864, 1.4169994923726943, 11.460158766988037, 1]),
454
+ particle_size: P_SIZE_MEDIUM,
455
+ density: 3,
456
+ period: PERIOD_LONG,
457
+ period_offset: randomFloatBetween(random, 0, PERIOD_LONG),
458
+ sprite: 'data/textures/particle/UETools/Hexagon_01.png'
459
+ });
460
+ await make_demo_volume({
461
+ ecd: ecd,
462
+ lut: heatmap_lut_orange_to_red,
463
+ shape: TransformedShape3D.from_m4(new UnitCubeShape3D(), [4.7577406314060395, 0, 0, 0, 0, 2.3166487265965343, 0, 0, 0, 0, 6.606365126660234, 0, 8.075207307031247, 1.4169994923726943, 11.460158766988037, 1]),
464
+ particle_size: P_SIZE_MEDIUM,
465
+ density: 3,
466
+ period: PERIOD_LONG,
467
+ period_offset: randomFloatBetween(random, 0, PERIOD_LONG),
468
+ sprite: 'data/textures/particle/UETools/Circle_04.png'
469
+ });
470
+
471
+ await make_demo_volume({
472
+ ecd: ecd,
473
+ lut: heatmap_lut_pink_to_blue,
474
+ shape: TransformedShape3D.from_m4(new UnitCubeShape3D(), [6.956797095914032, 0, 0, 0, 0, 2.3166487265965343, 0, 0, 0, 0, 6.606365126660234, 0, 14.17733466985805, 1.4169994923726943, 11.460158766988037, 1]),
475
+ particle_size: P_SIZE_MEDIUM,
476
+ density: 3,
477
+ period: PERIOD_LONG,
478
+ period_offset: randomFloatBetween(random, 0, PERIOD_LONG),
479
+ sprite: 'data/textures/particle/travnik/plus_2.png'
480
+ });
481
+
482
+ await make_demo_volume({
483
+ ecd: ecd,
484
+ lut: heatmap_lut_pink_to_blue,
485
+ shape: TransformedShape3D.from_m4(new UnitCubeShape3D(), [4.733772190018377, 0, 0, 0, 0, 2.3166487265965343, 0, 0, 0, 0, 6.606365126660234, 0, 20.284613387782148, 1.4169994923726943, 11.460158766988037, 1]),
486
+ particle_size: P_SIZE_MEDIUM,
487
+ density: 3,
488
+ period: PERIOD_LONG,
489
+ period_offset: randomFloatBetween(random, 0, PERIOD_LONG),
490
+ sprite: 'data/textures/particle/UETools/Circle_04.png'
491
+ });
492
+
493
+ await make_demo_volume({
494
+ ecd: ecd,
495
+ lut: heatmap_lut_pink_to_blue,
496
+ shape: TransformedShape3D.from_m4(new UnitCubeShape3D(), [5.924905976332568, 0, 0, 0, 0, 2.3166487265965343, 0, 0, 0, 0, 6.606365126660234, 0, 31.662442543335885, 1.4169994923726943, 11.460158766988037, 1]),
497
+ particle_size: P_SIZE_MEDIUM,
498
+ density: 3,
499
+ period: PERIOD_LONG,
500
+ period_offset: randomFloatBetween(random, 0, PERIOD_LONG),
501
+ sprite: 'data/textures/particle/UETools/Circle_04.png'
502
+ });
503
+
504
+ await make_demo_volume({
505
+ ecd: ecd,
506
+ lut: heatmap_lut_0,
507
+ shape: TransformedShape3D.from_m4(new UnitCubeShape3D(), [5.7305058801925, 0, 0, 0, 0, 2.3166487265965343, 0, 0, 0, 0, 6.606365126660234, 0, 37.70942297505848, 1.4169994923726943, 11.460158766988037, 1]),
508
+ particle_size: P_SIZE_MEDIUM,
509
+ density: 8,
510
+ period: PERIOD_LONG,
511
+ period_offset: randomFloatBetween(random, 0, PERIOD_LONG),
512
+ sprite: 'data/textures/particle/UETools/Circle_04.png'
513
+ });
514
+ await make_demo_volume({
515
+ ecd: ecd,
516
+ lut: heatmap_lut_0,
517
+ shape: TransformedShape3D.from_m4(new UnitCubeShape3D(), [6.575632395877399, 0, 0, 0, 0, 2.3166487265965343, 0, 0, 0, 0, 4.51714948412602, 0, 37.272800538855826, 1.4169994923726943, 2.4066558057134095, 1]),
518
+ particle_size: P_SIZE_MEDIUM,
519
+ density: 8,
520
+ period: PERIOD_LONG,
521
+ period_offset: randomFloatBetween(random, 0, PERIOD_LONG),
522
+ sprite: 'data/textures/particle/UETools/Circle_04.png'
523
+ });
524
+
525
+ await make_demo_volume({
526
+ ecd: ecd,
527
+ lut: heatmap_lut_0,
528
+ shape: TransformedShape3D.from_m4(new UnitCubeShape3D(), [6.410614101275306, 0, 0, 0, 0, 2.3166487265965343, 0, 0, 0, 0, 4.51714948412602, 0, 30.458756650580582, 1.4169994923726943, 2.4066558057134095, 1]),
529
+ particle_size: P_SIZE_MEDIUM,
530
+ density: 8,
531
+ period: PERIOD_LONG,
532
+ period_offset: randomFloatBetween(random, 0, PERIOD_LONG),
533
+ sprite: 'data/textures/particle/UETools/Circle_04.png'
534
+ });
535
+
536
+ await make_demo_volume({
537
+ ecd: ecd,
538
+ lut: heatmap_lut_3,
539
+ shape: TransformedShape3D.from_m4(new UnitCubeShape3D(), [4.260857135913424, 0, 0, 0, 0, 2.3166487265965343, 0, 0, 0, 0, 4.51714948412602, 0, 24.82865688356064, 1.4169994923726943, 2.4066558057134095, 1]),
540
+ particle_size: P_SIZE_SMALL,
541
+ density: 3,
542
+ period: PERIOD_LONG,
543
+ period_offset: randomFloatBetween(random, 0, PERIOD_LONG),
544
+ sprite: 'data/textures/particle/UETools/Circle_01.png'
545
+ });
546
+
547
+ await make_demo_volume({
548
+ ecd: ecd,
549
+ lut: heatmap_lut_3,
550
+ shape: TransformedShape3D.from_m4(new UnitCubeShape3D(), [4.870266350649175, 0, 0, 0, 0, 2.3166487265965343, 0, 0, 0, 0, 4.51714948412602, 0, 20.022408905267525, 1.4169994923726943, 2.4066558057134095, 1]),
551
+ particle_size: P_SIZE_SMALL,
552
+ density: 3,
553
+ period: PERIOD_LONG,
554
+ period_offset: randomFloatBetween(random, 0, PERIOD_LONG),
555
+ sprite: 'data/textures/particle/UETools/Cross_04.png'
556
+ });
557
+ await make_demo_volume({
558
+ ecd: ecd,
559
+ lut: heatmap_lut_pink_to_blue,
560
+ shape: UnionShape3D.from([
561
+ TransformedShape3D.from_m4(new UnitCubeShape3D(), [5.985827128973811, 0, 0, 0, 0, 2.435269776236539, 0, 0, 0, 0, 4.669621139110231, 0, 11.08356834576874, 1.2643565739307023, 2.4360416869081885, 1]),
562
+ TransformedShape3D.from_m4(new UnitCubeShape3D(), [8.413758403821523, 0, 0, 0, 0, 2.3166487265965343, 0, 0, 0, 0, 7.775469675813772, 0, 4.313201108449287, 1.4169994923726943, 4.011630095541064, 1]),
563
+ TransformedShape3D.from_m4(new UnitCubeShape3D(), [8.413758403821523, 0, 0, 0, 0, 2.3166487265965343, 0, 0, 0, 0, 2.925065210015915, 0, 12.417224289491141, 1.4169994923726943, 6.432483110925785, 1])
564
+ ]),
565
+ particle_size: P_SIZE_LARGE,
566
+ density: 4,
567
+ period: PERIOD_LONG,
568
+ period_offset: randomFloatBetween(random, 0, PERIOD_LONG),
569
+ sprite: 'data/textures/particle/UETools/Circle_04.png'
570
+ });
571
+
572
+ make_shape_vis_toggle(engine).toggle(); // turn off shape vis initially
573
+
574
+ // editing box
575
+ // make_box_editor(engine, Transform.fromJSON({
576
+ // position: {
577
+ // x: -2,
578
+ // y: 5,
579
+ // z: 0
580
+ // },
581
+ // scale: {
582
+ // x: 1,
583
+ // y: 1,
584
+ // z: 1
585
+ // }
586
+ // }));
587
+ }
588
+
589
+ /**
590
+ *
591
+ * @param {Engine} engine
592
+ */
593
+ async function main(engine) {
594
+ EngineHarness.buildBasics({
595
+ engine,
596
+ enableWater: false,
597
+ enableTerrain: false,
598
+ // enableTerrain: true,
599
+ terrainSize: new Vector2(100, 100),
600
+ focus: new Vector3(102, 0, 61),
601
+ // pitch: -0.5,
602
+ // yaw: 2.2,
603
+ // distance: 3
604
+ pitch: 0.9,
605
+ yaw: 3.1,
606
+ distance: 20
607
+ });
608
+
609
+
610
+ engine.graphics.renderer.setClearColor('rgba(99,99,99,1)');
611
+
612
+ // await sample_scene_nam(engine);
613
+ await sample_scene_0(engine);
614
+ }
615
+
616
+ /**
617
+ *
618
+ * @param {Engine} engine
619
+ * @param {Transform} [transform]
620
+ */
621
+ function make_box_editor(engine, transform = new Transform()) {
622
+ const controls = new TransformControls(engine.graphics.camera, engine.graphics.domElement);
623
+
624
+ const eb = new EntityBuilder();
625
+ const g_unit_cube = makeHelperBoxGeometry(1, 1, 1);
626
+
627
+ const ecd = engine.entityManager.dataset;
628
+
629
+ const lineMaterial = new LineBasicMaterial({
630
+ depthTest: true,
631
+ depthWrite: false,
632
+ transparent: true,
633
+ linewidth: 1,
634
+ fog: false,
635
+ color: '#4aff51',
636
+ opacity: 1
637
+ });
638
+
639
+ const box_transform = transform.clone();
640
+ eb.add(box_transform);
641
+ const sg = ShadedGeometry.from(g_unit_cube, lineMaterial, DrawMode.LineSegments);
642
+ eb.add(sg);
643
+
644
+ eb.build(ecd);
645
+
646
+ const cachedObject = sg.__cached_object;
647
+ cachedObject.frustumCulled = false;
648
+ controls.attach(cachedObject);
649
+
650
+
651
+ controls.setSize(1);
652
+ const r_controls = new Renderable(controls);
653
+ r_controls.matrixAutoUpdate = true;
654
+ r_controls.boundingBoxNeedsUpdate = false;
655
+ r_controls.boundingBox.setBounds(0, 0, 0, 1, 1, 1);
656
+
657
+ // make camera controller holder
658
+ const entity = TagSystem.find_entities_with_tag('CameraController', ecd)[0];
659
+
660
+ const camera_controls = EntityBuilder.readFromDataset(entity, ecd);
661
+
662
+
663
+ new EntityBuilder()
664
+ .add(r_controls)
665
+ .add(new Transform())
666
+ .add(new InputController([
667
+ {
668
+ path: 'keyboard/keys/w/down',
669
+ listener() {
670
+ controls.setMode('translate');
671
+ }
672
+ },
673
+ {
674
+ path: 'keyboard/keys/e/down',
675
+ listener() {
676
+ controls.setMode('scale');
677
+ }
678
+ },
679
+ {
680
+ path: 'keyboard/keys/r/down',
681
+ listener() {
682
+ controls.setMode('rotate');
683
+ }
684
+ },
685
+ {
686
+ path: 'keyboard/keys/s/down',
687
+ listener() {
688
+ // output current box
689
+
690
+ const code_snippet = `TransformedShape3D.from_m4(new UnitCubeShape3D(), ${JSON.stringify(cachedObject.matrix.elements)})`;
691
+ console.warn(code_snippet);
692
+
693
+ navigator.clipboard.writeText(code_snippet);
694
+ }
695
+ },
696
+ {
697
+ path: 'keyboard/keys/space/down',
698
+ listener() {
699
+ // reset scale and rotation
700
+ box_transform.scale.setScalar(1);
701
+ box_transform.rotation.set(0, 0, 0, 1);
702
+ }
703
+ }
704
+ ]))
705
+ .add(BehaviorComponent.looping_function(() => {
706
+
707
+ threeUpdateTransform(controls);
708
+
709
+ if (controls.dragging) {
710
+ if (camera_controls.isBuilt) {
711
+ camera_controls.destroy();
712
+ }
713
+ } else {
714
+ if (!camera_controls.isBuilt) {
715
+ camera_controls.build(ecd);
716
+ }
717
+ }
718
+
719
+ cachedObject.updateMatrix();
720
+ const matrix = cachedObject.matrix;
721
+ const t = eb.getComponent(Transform);
722
+
723
+ t.position.onChanged.mute();
724
+ t.rotation.onChanged.mute();
725
+ t.scale.onChanged.mute();
726
+
727
+ t.fromMatrix4(matrix.elements);
728
+
729
+ t.position.onChanged.unmute();
730
+ t.rotation.onChanged.unmute();
731
+ t.scale.onChanged.unmute();
732
+
733
+ sg.updateTransform();
734
+
735
+ }))
736
+ .build(ecd);
737
+ }
738
+
739
+ /**
740
+ *
741
+ * @param {EntityComponentDataset} ecd
742
+ * @param {AbstractShape3D} shape
743
+ * @param {number} density
744
+ * @param {number} particle_size
745
+ * @param {boolean} sort
746
+ * @returns {ParticleVolume}
747
+ */
748
+ function create_volume({
749
+ ecd,
750
+ shape = new UnitCubeShape3D(),
751
+ density = 10,
752
+ particle_size = 1,
753
+ sort = false,
754
+ sprite
755
+ }) {
756
+
757
+ const adjusted_density = density / particle_size;
758
+
759
+ const v = new ParticleVolume();
760
+
761
+ v.from({
762
+ density: adjusted_density,
763
+ particle_size,
764
+ shape: shape,
765
+ sort,
766
+ sprite
767
+ });
768
+
769
+ v.build();
770
+
771
+ v.entity.build(ecd);
772
+
773
+ return v;
774
+ }
775
+
776
+ /**
777
+ *
778
+ * @param {Vector3} position
779
+ * @param {ParameterLookupTable} lut
780
+ * @return {{position: Vector1}}
781
+ */
782
+ function make_symbol_view({
783
+ position,
784
+ lut
785
+ }) {
786
+
787
+ const r = {
788
+ position: new Vector1(1)
789
+ };
790
+
791
+ const symbol_view = new EmptyView();
792
+ symbol_view.size.set(128, 20);
793
+
794
+ symbol_view.css({
795
+ position: 'absolute',
796
+ whiteSpace: 'pre',
797
+ left: 0,
798
+ top: 0
799
+ });
800
+
801
+ const view_lut = new CanvasView();
802
+ view_lut.size.set(128, 10);
803
+ view_lut.css({
804
+ position: 'absolute',
805
+ border: '1px solid white',
806
+ boxShadow: '0 0 6px rgba(0,0,0,0.4)',
807
+ left: 0,
808
+ top: 0
809
+ });
810
+
811
+ const sampler_lut = lut_to_sampler(lut, view_lut.size.x, view_lut.size.y);
812
+
813
+ convertSampler2D2Canvas(sampler_lut, 1, 0, view_lut.el);
814
+
815
+ symbol_view.addChild(view_lut)
816
+
817
+ const view_cursor = new EmptyView();
818
+
819
+ view_cursor.css({
820
+ position: 'absolute',
821
+ left: 0,
822
+ top: "-1px",
823
+ height: "10px",
824
+ width: "4px",
825
+ border: '2px solid white',
826
+ zIndex: 2,
827
+ boxShadow: '0 0 4px black'
828
+ });
829
+
830
+
831
+ r.position.process(f => {
832
+ const c = new Uint8Array(4);
833
+
834
+ lut.sample(f, c);
835
+
836
+ const hex_string = `rgb(${c[0]},${c[1]},${c[2]})`;
837
+
838
+ view_cursor.position.set(f * view_lut.size.x, 0);
839
+ view_cursor.css({
840
+ backgroundColor: hex_string
841
+ })
842
+ });
843
+
844
+ symbol_view.addChild(view_cursor);
845
+
846
+ const symbol_transform = new Transform();
847
+ symbol_transform.position.copy(position);
848
+
849
+ const vp = new ViewportPosition();
850
+ vp.anchor.set(0.5, 1);
851
+
852
+ const entity = new EntityBuilder()
853
+ .add(GUIElement.fromView(symbol_view))
854
+ .add(new HeadsUpDisplay())
855
+ .add(vp)
856
+ .add(symbol_transform);
857
+
858
+ r.entity = entity;
859
+
860
+ return r;
861
+ }
862
+
863
+ async function make_demo_volume({
864
+ ecd,
865
+ shape,
866
+ lut,
867
+ period = 5,
868
+ period_offset = 0,
869
+ density,
870
+ particle_size,
871
+ sort = false,
872
+ sprite
873
+ }) {
874
+
875
+ // estimate bounds
876
+ const bounds = new AABB3();
877
+ bounds.setNegativelyInfiniteBounds();
878
+
879
+ const sample = [];
880
+ const samples_x = [];
881
+ const samples_y = [];
882
+ const samples_z = [];
883
+
884
+ const random = seededRandom(0xBEEF);
885
+
886
+ for (let i = 0; i < 1024; i++) {
887
+ shape.sample_random_point_in_volume(sample, 0, random);
888
+
889
+ samples_x.push(sample[0]);
890
+ samples_y.push(sample[1]);
891
+ samples_z.push(sample[2]);
892
+ }
893
+
894
+ const v = create_volume({
895
+ ecd,
896
+ shape,
897
+ density,
898
+ particle_size,
899
+ sort,
900
+ sprite
901
+ });
902
+
903
+ let time_total = 0;
904
+
905
+ const symbol = make_symbol_view({
906
+ position: new Vector3(
907
+ computeStatisticalMean(samples_x),
908
+ computeStatisticalMean(samples_y),
909
+ computeStatisticalMean(samples_z),
910
+ ),
911
+ lut
912
+ });
913
+
914
+ symbol.entity.build(ecd);
915
+
916
+ v.attributes.color.lookup = lut;
917
+
918
+ new EntityBuilder()
919
+ .add(BehaviorComponent.fromOne(RepeatBehavior.from(new ActionBehavior((time) => {
920
+ time_total += time;
921
+
922
+ const _t = pingpong(time_total + period_offset, period);
923
+
924
+ const f = clamp(_t / period, 0, 1);
925
+
926
+ symbol.position.set(f);
927
+
928
+ v.attributes.color.write_lookup_value(f);
929
+ }))))
930
+ .build(ecd);
931
+
932
+ const shape_entity = shape_to_visual_entity(v.shape, ecd);
933
+ shape_entity
934
+ .getComponent(Transform)
935
+ .copy(v.transform);
936
+ }
937
+
938
+ init(engineHarness);