@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,478 @@
1
+ import { ParticleEmitterFlag } from "../../emitter/ParticleEmitterFlag.js";
2
+ import { PARTICLE_ATTRIBUTE_DEATH_AGE, PARTICLE_ATTRIBUTE_POSITION } from "../../emitter/PARTICLE_ATTRIBUTES.js";
3
+ import { EmissionShapeType } from "../../emitter/EmissionShapeType.js";
4
+ import { Matrix4 } from "three";
5
+ import { composeMatrix4 } from "../../../../../util/composeMatrix4.js";
6
+ import Quaternion from "../../../../../../../core/geom/Quaternion.js";
7
+ import { ParticleEmitter } from "../../emitter/ParticleEmitter.js";
8
+ import { Transform } from "../../../../../../ecs/transform/Transform.js";
9
+ import EntityBuilder from "../../../../../../ecs/EntityBuilder.js";
10
+ import { vec3 } from "gl-matrix";
11
+ import { AttributeValue } from "./AttributeValue.js";
12
+ import { PARTICULAR_PARTICLE_SPECIFICATION } from "../../emitter/PARTICULAR_PARTICLE_SPECIFICATION.js";
13
+ import { SerializationMetadata } from "../../../../../../ecs/components/SerializationMetadata.js";
14
+ import { UnitCubeShape3D } from "../../../../../../../core/geom/3d/shape/UnitCubeShape3D.js";
15
+
16
+ /**
17
+ *
18
+ * @param {ParticleLayer} layer
19
+ * @returns {number}
20
+ */
21
+ function computeLayerVolume(layer) {
22
+ let base_volume = 0;
23
+
24
+ switch (layer.emissionShape) {
25
+ case EmissionShapeType.Box:
26
+ base_volume = 1;
27
+ break;
28
+ case EmissionShapeType.Sphere:
29
+ base_volume = 0.5236;
30
+ break;
31
+ case EmissionShapeType.Point:
32
+ base_volume = 0;
33
+ break;
34
+ }
35
+
36
+ const scale_volume = layer.scale.x * layer.scale.y * layer.scale.z;
37
+
38
+ return base_volume * scale_volume;
39
+ }
40
+
41
+ /**
42
+ *
43
+ * @param {ParticleEmitter} emitter
44
+ * @param {Transform} transform
45
+ * @returns {number}
46
+ */
47
+ function computeEmitterVolume(emitter, transform) {
48
+
49
+ const layers = emitter.layers;
50
+ const n = layers.length;
51
+
52
+ let layer_volume_sum = 0;
53
+
54
+ for (let i = 0; i < n; i++) {
55
+ const particleLayer = layers.get(i);
56
+
57
+ layer_volume_sum += computeLayerVolume(particleLayer);
58
+ }
59
+
60
+ const scale_volume = transform.scale.x * transform.scale.y * transform.scale.z;
61
+
62
+ return layer_volume_sum * scale_volume;
63
+ }
64
+
65
+ const DEFAULT_ATTRIBUTE_VALUES = {
66
+ color: [1, 1, 1, 1],
67
+ age: [0],
68
+ velocity: [0, 0, 0],
69
+ deathAge: [99999999],
70
+ layerPosition: [0],
71
+ rotation: [0],
72
+ rotationSpeed: [0],
73
+ blending: [0],
74
+ size: [1],
75
+ initial_size: [1]
76
+ };
77
+
78
+ const EXPOSED_ATTRIBUTES = [
79
+ "color",
80
+ "size",
81
+ "blending"
82
+ ];
83
+
84
+ export class ParticleVolume {
85
+
86
+ constructor() {
87
+ this.__emitter = new ParticleEmitter();
88
+
89
+ this.__emitter.fromJSON({
90
+ "parameters": [
91
+ {
92
+ "name": "scale",
93
+ "itemSize": 1,
94
+ "defaultTrackValue": {
95
+ "itemSize": 1,
96
+ "data": [
97
+ 1
98
+ ],
99
+ "positions": [
100
+ 0
101
+ ]
102
+ }
103
+ },
104
+ {
105
+ "name": "color",
106
+ "itemSize": 4,
107
+ "defaultTrackValue": {
108
+ "itemSize": 4,
109
+ "data": [
110
+ 1,
111
+ 1,
112
+ 1,
113
+ 1
114
+ ],
115
+ "positions": [
116
+ 0
117
+ ]
118
+ }
119
+ }
120
+ ],
121
+ "preWarm": false,
122
+ "readDepth": true,
123
+ "softDepth": true,
124
+ "depthSort": false,
125
+ "velocityAlign": false,
126
+ "blendingMode": 0,
127
+ "layers": [
128
+ {
129
+ "imageURL": "data/textures/particle/smokeparticle.png",
130
+ "particleLife": {
131
+ "min": 6,
132
+ "max": 8
133
+ },
134
+ "particleSize": {
135
+ "min": 0.4,
136
+ "max": 0.4
137
+ },
138
+ "particleRotation": {
139
+ "min": 0,
140
+ "max": 0
141
+ },
142
+ "particleRotationSpeed": {
143
+ "min": 0,
144
+ "max": 0
145
+ },
146
+ "emissionShape": 1,
147
+ "emissionFrom": 1,
148
+ "emissionRate": 0,
149
+ "emissionImmediate": 0,
150
+ "parameterTracks": [
151
+ {
152
+ "name": "color",
153
+ "track": {
154
+ "itemSize": 4,
155
+ "data": [
156
+ 0.5764705882352941,
157
+ 0.5764705882352941,
158
+ 0.5764705882352941,
159
+ 0,
160
+ 0.803921568627451,
161
+ 0.803921568627451,
162
+ 0.803921568627451,
163
+ 0.28160919540229884,
164
+ 0.803921568627451,
165
+ 0.803921568627451,
166
+ 0.803921568627451,
167
+ 0.21264367816091953,
168
+ 0.803921568627451,
169
+ 0.803921568627451,
170
+ 0.803921568627451,
171
+ 0
172
+ ],
173
+ "positions": [
174
+ 0,
175
+ 0.18085106382978725,
176
+ 0.7074468085106383,
177
+ 1
178
+ ]
179
+ }
180
+ },
181
+ {
182
+ "name": "scale",
183
+ "track": {
184
+ "itemSize": 1,
185
+ "data": [
186
+ 1
187
+ ],
188
+ "positions": [
189
+ 0
190
+ ]
191
+ }
192
+ }
193
+ ],
194
+ "position": {
195
+ "x": 0,
196
+ "y": 0,
197
+ "z": 0
198
+ },
199
+ "scale": {
200
+ "x": 1,
201
+ "y": 1,
202
+ "z": 1
203
+ },
204
+ "particleVelocityDirection": {
205
+ "direction": {
206
+ "x": 0,
207
+ "y": 1,
208
+ "z": 0
209
+ },
210
+ "angle": 0.1
211
+ },
212
+ "particleSpeed": {
213
+ "min": 0,
214
+ "max": 0
215
+ },
216
+ "steps": []
217
+ }
218
+ ]
219
+ });
220
+
221
+ /**
222
+ *
223
+ * @type {Transform}
224
+ * @private
225
+ */
226
+ this.__transform = new Transform();
227
+
228
+ /**
229
+ * Particle count per unit of volume
230
+ * @type {number}
231
+ * @private
232
+ */
233
+ this.__density = 1;
234
+
235
+ /**
236
+ *
237
+ * @type {AbstractShape3D}
238
+ * @private
239
+ */
240
+ this.__shape = new UnitCubeShape3D();
241
+
242
+ const eb = new EntityBuilder();
243
+
244
+ eb.add(this.__emitter)
245
+ .add(SerializationMetadata.Transient)
246
+ .add(this.__transform);
247
+
248
+ /**
249
+ *
250
+ * @type {EntityBuilder}
251
+ */
252
+ this.entity = eb;
253
+
254
+ /**
255
+ *
256
+ * @type {Object<AttributeValue>}
257
+ */
258
+ this.attributes = {};
259
+
260
+ this.init_attributes();
261
+ }
262
+
263
+ get shape() {
264
+ return this.__shape;
265
+ }
266
+
267
+ /**
268
+ * @private
269
+ */
270
+ init_attributes() {
271
+ const spec = PARTICULAR_PARTICLE_SPECIFICATION;
272
+
273
+ for (let i = 0; i < spec.attributes.length; i++) {
274
+ const attributeSpec = spec.attributes[i];
275
+
276
+ const av = new AttributeValue();
277
+ av.spec = attributeSpec;
278
+
279
+ const attribute_name = attributeSpec.name;
280
+
281
+ if (!EXPOSED_ATTRIBUTES.includes(attribute_name)) {
282
+ // don't expose attribute
283
+ continue;
284
+ }
285
+
286
+ const default_value = DEFAULT_ATTRIBUTE_VALUES[attribute_name];
287
+
288
+ if (default_value !== undefined) {
289
+ av.write_value(default_value);
290
+ }
291
+
292
+ this.attributes[attribute_name] = av;
293
+
294
+ const attribute_index = i;
295
+
296
+ av.onValueChange.add(() => {
297
+ this.__write_attribute(attribute_index);
298
+ });
299
+ }
300
+ }
301
+
302
+ get emitter() {
303
+ return this.__emitter;
304
+ }
305
+
306
+ get transform() {
307
+ return this.__transform;
308
+ }
309
+
310
+ /**
311
+ *
312
+ * @param {number} [density]
313
+ * @param {number} [particle_size]
314
+ * @param {AbstractShape3D} [shape]
315
+ * @param {boolean} sort
316
+ * @param {string} [sprite]
317
+ */
318
+ from({
319
+ density = 1,
320
+ particle_size = 1,
321
+ shape = new UnitCubeShape3D(),
322
+ sort = false,
323
+ sprite = "data/textures/particle/smokeparticle.png"
324
+ } = {}) {
325
+
326
+ this.__density = density;
327
+ this.__shape = shape;
328
+
329
+ this.__emitter.writeFlag(ParticleEmitterFlag.DepthSorting, sort);
330
+ this.__emitter.layers.get(0).imageURL = sprite;
331
+
332
+ const attributes = this.attributes;
333
+
334
+ attributes.size.write_value_silent([particle_size]);
335
+ }
336
+
337
+ /**
338
+ *
339
+ * @private
340
+ */
341
+ __ensure_initialized() {
342
+
343
+ const emitter = this.__emitter;
344
+
345
+ if (!emitter.getFlag(ParticleEmitterFlag.Built)) {
346
+ //particle pool needs to be set up first
347
+ emitter.build();
348
+ }
349
+
350
+ if (!emitter.getFlag(ParticleEmitterFlag.Initialized)) {
351
+ //particles are not initialized, do that
352
+ emitter.initialize();
353
+ }
354
+
355
+ }
356
+
357
+ /**
358
+ * Distribute particles in the volume
359
+ * @param {function():number} random
360
+ * @private
361
+ */
362
+ __distribute(random) {
363
+ const emitter = this.__emitter;
364
+ const particles = emitter.particles;
365
+ const particle_count = particles.size();
366
+
367
+ const layer = emitter.layers.get(0);
368
+
369
+ const m4_transform = new Matrix4();
370
+
371
+ const t = this.__transform;
372
+
373
+ composeMatrix4(m4_transform, t.position, t.rotation, t.scale);
374
+
375
+
376
+ const m4_layer = new Matrix4();
377
+
378
+ composeMatrix4(m4_layer, layer.position, new Quaternion(), layer.scale);
379
+
380
+ const v3_position = [];
381
+
382
+ const m4_final = new Matrix4();
383
+
384
+ m4_final.multiplyMatrices(m4_transform, m4_layer);
385
+
386
+ for (let i = 0; i < particle_count; i++) {
387
+
388
+ this.__shape.sample_random_point_in_volume(v3_position, 0, random);
389
+
390
+ vec3.transformMat4(v3_position, v3_position, m4_final.elements);
391
+
392
+ particles.writeAttributeVector3(i, PARTICLE_ATTRIBUTE_POSITION, v3_position[0], v3_position[1], v3_position[2]);
393
+ }
394
+
395
+ // request bounds update
396
+ emitter.setFlag(ParticleEmitterFlag.ParticleBoundsNeedUpdate);
397
+ }
398
+
399
+ /**
400
+ *
401
+ * @private
402
+ */
403
+ __write_attributes() {
404
+ this.__ensure_initialized();
405
+
406
+ const emitter = this.__emitter;
407
+ const particles = emitter.particles;
408
+
409
+ const attributes = particles.spec.attributes;
410
+
411
+ for (let i = 0; i < attributes.length; i++) {
412
+ const name = attributes[i].name;
413
+
414
+ if (this.attributes.hasOwnProperty(name)) {
415
+ this.__write_attribute(i);
416
+ }
417
+ }
418
+ }
419
+
420
+ /**
421
+ *
422
+ * @param {number} index
423
+ * @private
424
+ */
425
+ __write_attribute(index) {
426
+ this.__ensure_initialized();
427
+
428
+ const emitter = this.__emitter;
429
+ const particles = emitter.particles;
430
+
431
+ const spec = particles.spec.attributes[index];
432
+
433
+ const av = this.attributes[spec.name];
434
+
435
+ particles.writeAttributeForAllArray(index, av.__value);
436
+ }
437
+
438
+ build() {
439
+ const volume_value = this.__shape.volume;
440
+
441
+ // total particle count
442
+ const particle_count = Math.max(1, Math.ceil(volume_value * this.__density));
443
+
444
+
445
+ this.__ensure_initialized();
446
+
447
+ const particles = this.__emitter.particles;
448
+
449
+ // reserve particles
450
+ particles.setCapacity(particle_count);
451
+
452
+ // "spawn" particles to occupy the entire pool
453
+ particles.occupancy.setRange(0, particle_count - 1);
454
+
455
+ // set certain defaults
456
+ particles.writeAttributeForAllArray(PARTICLE_ATTRIBUTE_DEATH_AGE, [99999999]);
457
+
458
+ // fill out volume
459
+ this.__distribute(Math.random);
460
+
461
+ // apply attributes
462
+ this.__write_attributes();
463
+
464
+ // trigger sprite update
465
+ this.__emitter.setFlag(ParticleEmitterFlag.SpritesNeedUpdate);
466
+ }
467
+
468
+ /**
469
+ *
470
+ * @param {number} r
471
+ * @param {number} g
472
+ * @param {number} b
473
+ * @param {number} a
474
+ */
475
+ setColor(r, g, b, a) {
476
+ this.attributes.color.write_value([r, g, b, a]);
477
+ }
478
+ }
@@ -0,0 +1,27 @@
1
+ import { Sampler2D } from "../../../../../texture/sampler/Sampler2D.js";
2
+
3
+ /**
4
+ *
5
+ * @param {ParameterLookupTable} lut
6
+ * @param {number} width
7
+ * @param {number} height
8
+ * @returns {Sampler2D}
9
+ */
10
+ export function lut_to_sampler(lut, width, height) {
11
+ const sampler = Sampler2D.uint8(4, width, height);
12
+
13
+ const s = [];
14
+
15
+ for (let i = 0; i < width; i++) {
16
+
17
+ lut.sample(i / (width - 1), s);
18
+ s[3] = 255;
19
+
20
+ for (let j = 0; j < height; j++) {
21
+ sampler.set(i, j, s);
22
+ }
23
+
24
+ }
25
+
26
+ return sampler;
27
+ }