@woosh/meep-engine 2.33.21 → 2.33.25

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 (285) hide show
  1. package/core/assert.js +3 -1
  2. package/core/bvh2/BinaryNode.js +1 -1
  3. package/core/bvh2/aabb3/AABB3.js +18 -0
  4. package/core/bvh2/aabb3/AABB3Math.js +1 -1
  5. package/core/bvh2/binary/2/BinaryUint32BVH.js +498 -0
  6. package/core/bvh2/binary/2/BinaryUint32BVH.spec.js +54 -0
  7. package/core/bvh2/binary/IndexedBinaryBVH.js +22 -26
  8. package/core/bvh2/traversal/ThreeClippingPlaneComputingBVHVisitor.js +5 -1
  9. package/core/bvh2/traversal/__detailed_box_volume_intersection.js +31 -11
  10. package/core/collection/ArrayUtils.js +1 -1
  11. package/core/collection/array/arrayQuickSort.js +9 -6
  12. package/core/collection/array/array_swap.js +22 -0
  13. package/core/collection/array/binarySearchHighIndex.js +1 -1
  14. package/core/collection/array/computeHashArray.js +22 -0
  15. package/core/collection/array/computeHashIntegerArray.js +15 -0
  16. package/core/collection/array/copyArray.js +2 -2
  17. package/core/collection/table/DataType2TypedArrayConstructorMapping.js +15 -0
  18. package/core/color/Color.js +2 -1
  19. package/core/function/FunctionCompiler.js +2 -1
  20. package/core/geom/3d/aabb/aabb3_computeDistanceAbovePlane.js +9 -33
  21. package/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +10 -2
  22. package/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.js +41 -0
  23. package/core/geom/3d/morton/mortonEncode_magicbits.js +2 -1
  24. package/core/geom/3d/morton/reinterpret_float32_as_int32.js +13 -0
  25. package/core/geom/3d/morton/v3_morton_encode_transformed.js +33 -0
  26. package/core/geom/3d/normal/hemioct/unit_hemioct.spec.js +1 -1
  27. package/core/geom/3d/plane/plane_computeConvex3PlaneIntersection.js +13 -14
  28. package/core/geom/3d/ray/ray_computeNearestPointToPoint.js +37 -0
  29. package/core/geom/3d/shape/AbstractShape3D.js +38 -0
  30. package/core/geom/3d/shape/CompositeShape.js +240 -0
  31. package/core/geom/3d/shape/TransformedShape3D.js +126 -0
  32. package/core/geom/3d/shape/UnitCubeShape3D.js +24 -0
  33. package/core/geom/3d/shape/UnitSphereShape3D.js +24 -0
  34. package/core/geom/3d/shape/util/shape_to_visual_entity.js +159 -0
  35. package/core/geom/3d/voxel/DenseBitVolume3D.js +87 -0
  36. package/core/geom/3d/voxel/buildVolumeFromProjectedGeometry.js +23 -0
  37. package/core/geom/AABB2.js +1 -1
  38. package/core/geom/ConicRay.js +3 -1
  39. package/core/geom/LineSegment.js +0 -78
  40. package/core/geom/Matrix4.js +7 -8
  41. package/core/geom/Plane.js +14 -9
  42. package/core/geom/Rectangle.js +2 -1
  43. package/core/geom/Vector1.js +1 -1
  44. package/core/geom/Vector3.js +2 -1
  45. package/core/geom/Vector4.js +2 -1
  46. package/core/geom/random/randomPointInBox.js +7 -3
  47. package/core/geom/random/randomPointInPoint.js +6 -3
  48. package/core/geom/random/randomPointInSphere.js +9 -5
  49. package/core/geom/random/randomPointOnBox.js +7 -3
  50. package/core/geom/random/randomPointOnSphere.js +6 -3
  51. package/core/geom/v3_length.js +8 -3
  52. package/core/graph/graph_k_means_cluster.js +1 -1
  53. package/core/json/resolvePathByArray.js +2 -2
  54. package/core/math/MathUtils.js +0 -354
  55. package/core/math/MathUtils.spec.js +7 -1
  56. package/core/math/gaussian.js +9 -0
  57. package/core/math/hash/computeHashFloat.js +17 -0
  58. package/core/math/hash/computeHashFloatArray.js +34 -0
  59. package/core/math/hash/computeObjectHash.js +54 -0
  60. package/core/math/intersects1D.js +19 -0
  61. package/core/math/interval/NumericInterval.js +2 -2
  62. package/core/math/isValueBetween.js +10 -0
  63. package/core/math/isValueBetweenInclusive.js +10 -0
  64. package/core/math/noise/curl_noise_3dt.js +1 -1
  65. package/core/math/noise/sdnoise.js +10 -10
  66. package/core/math/overlap1D.js +19 -0
  67. package/core/math/pingpong.js +17 -0
  68. package/core/math/random/makeRangedRandom.js +19 -0
  69. package/core/math/random/randomFloatBetween.js +14 -0
  70. package/core/math/random/randomFromArray.js +19 -0
  71. package/core/math/random/randomGaussian.js +15 -0
  72. package/core/math/random/randomIntegerBetween.js +14 -0
  73. package/core/math/random/roundFair.js +15 -0
  74. package/core/math/separation1D.js +21 -0
  75. package/core/math/solveQuadratic.js +25 -0
  76. package/core/model/BoundedValue.js +1 -1
  77. package/core/model/node-graph/node/NodeInstancePortReference.js +1 -1
  78. package/core/model/node-graph/node/Port.js +1 -1
  79. package/core/model/reactive/evaluation/MultiPredicateEvaluator.spec.js +3 -1
  80. package/core/model/reactive/model/ReactiveBinaryExpression.js +1 -1
  81. package/core/model/reactive/model/terminal/ReactiveLiteralNumber.js +1 -1
  82. package/core/model/reactive/model/terminal/ReactiveReference.js +1 -1
  83. package/core/model/reactive/model/util/createRandomReactiveExpression.js +1 -1
  84. package/core/model/stat/LinearModifier.js +1 -1
  85. package/core/primitives/array/computeIntegerArrayHash.js +1 -1
  86. package/{engine/graphics/render/forward_plus/materials → core/primitives/strings}/insert_after.js +3 -0
  87. package/core/primitives/strings/insert_after_or_replace.js +27 -0
  88. package/editor/process/symbolic/makeHelperBoxGeometry.js +44 -0
  89. package/editor/view/ecs/EntityEditor.js +2 -2
  90. package/editor/view/ecs/components/particles/ParticleEmitterController.js +2 -2
  91. package/engine/EngineHarness.js +1 -0
  92. package/engine/animation/AnimationUtils.js +5 -5
  93. package/engine/animation/curve/AnimationCurve.js +72 -0
  94. package/engine/animation/curve/Keyframe.js +27 -0
  95. package/engine/animation/keyed2/AnimationTrack.js +27 -3
  96. package/engine/asset/Asset.js +1 -1
  97. package/engine/asset/loaders/GLTFAssetLoader.d.ts +1 -1
  98. package/engine/asset/loaders/GLTFAssetLoader.js +10 -0
  99. package/engine/asset/loaders/image/ImageRGBADataAsset.js +8 -1
  100. package/engine/asset/loaders/material/computeImageBitmapEquality.js +11 -0
  101. package/engine/asset/loaders/material/computeImageBitmapHash.js +22 -28
  102. package/engine/asset/loaders/material/computeMaterialHash.js +3 -1
  103. package/engine/asset/loaders/material/computeTextureHash.js +2 -1
  104. package/engine/ecs/EntityBuilder.js +25 -5
  105. package/engine/ecs/animation/Animation.js +2 -1
  106. package/engine/ecs/animation/InverseKinematics.js +2 -1
  107. package/engine/ecs/attachment/AttachmentBinding.js +8 -0
  108. package/engine/ecs/attachment/AttachmentSystem.js +4 -0
  109. package/engine/ecs/attachment/TransformAttachmentBinding.js +14 -44
  110. package/engine/ecs/components/Tag.js +27 -6
  111. package/engine/ecs/dynamic_actions/DynamicActorSystem.js +2 -1
  112. package/engine/ecs/dynamic_actions/DynamicRuleDescriptionTable.spec.js +3 -5
  113. package/engine/ecs/dynamic_actions/actions/definition/WeightedRandomActionDescription.js +1 -1
  114. package/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.js +1 -1
  115. package/engine/ecs/foliage/ecs/Foliage2.js +1 -1
  116. package/engine/ecs/fow/FogOfWar.js +4 -0
  117. package/engine/ecs/fow/FogOfWarSystem.js +2 -0
  118. package/engine/ecs/fow/shader/FogOfWarRenderer.js +1 -1
  119. package/engine/ecs/gui/GUIElement.js +1 -1
  120. package/engine/ecs/gui/hud/HeadsUpDisplay.js +1 -1
  121. package/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +2 -0
  122. package/engine/ecs/gui/position/ViewportPosition.js +2 -1
  123. package/engine/ecs/system/AbstractContextSystem.js +1 -1
  124. package/engine/ecs/systems/RangedAttackSystem.js +1 -1
  125. package/engine/ecs/systems/SteeringSystem.js +1 -1
  126. package/engine/ecs/systems/TagSystem.js +17 -0
  127. package/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -1
  128. package/engine/ecs/tooltip/TooltipComponent.js +15 -0
  129. package/engine/ecs/transform/Transform.js +19 -6
  130. package/engine/ecs/util/hideEntityGracefully.js +18 -0
  131. package/engine/graphics/GraphicsEngine.js +11 -23
  132. package/engine/graphics/camera/testClippingPlaneComputation.js +2 -2
  133. package/engine/graphics/composit/CompositLayer.js +17 -4
  134. package/engine/graphics/composit/CompositingStages.js +8 -0
  135. package/engine/graphics/composit/LayerCompositer.js +35 -6
  136. package/engine/graphics/ecs/animation/animator/AnimationClip.js +2 -1
  137. package/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -1
  138. package/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -1
  139. package/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -1
  140. package/engine/graphics/ecs/animation/animator/graph/AnimationGraph.js +2 -1
  141. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -1
  142. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +1 -1
  143. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +2 -1
  144. package/engine/graphics/ecs/camera/CameraClippingPlaneComputer.js +1 -1
  145. package/engine/graphics/ecs/highlight/HighlightDefinition.js +2 -1
  146. package/engine/graphics/ecs/highlight/plugin/OutlineRenderPlugin.js +11 -7
  147. package/engine/graphics/ecs/light/Light.d.ts +1 -1
  148. package/engine/graphics/ecs/light/Light.js +5 -0
  149. package/engine/graphics/ecs/light/binding/three/ThreeLightBinding.js +5 -1
  150. package/engine/graphics/ecs/mesh/Mesh.js +2 -1
  151. package/engine/graphics/ecs/mesh-v2/DrawMode.js +5 -0
  152. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +13 -0
  153. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +32 -18
  154. package/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts +6 -0
  155. package/engine/graphics/ecs/path/testPathDisplaySystem.js +98 -98
  156. package/engine/graphics/ecs/trail2d/Trail2D.js +17 -4
  157. package/engine/graphics/ecs/trail2d/Trail2DSystem.d.ts +2 -3
  158. package/engine/graphics/ecs/trail2d/Trail2DSystem.js +34 -118
  159. package/engine/graphics/geometry/AttributeSpec.js +105 -0
  160. package/engine/graphics/{micron/format/MicronVertexDataSpec.js → geometry/VertexDataSpec.js} +56 -25
  161. package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +7 -7
  162. package/engine/graphics/micron/build/fill_patch_geometry_data.js +1 -1
  163. package/engine/graphics/micron/buildPatchwork.js +1 -1
  164. package/engine/graphics/micron/format/MicronGeometry.js +3 -3
  165. package/engine/graphics/micron/format/serialization/MicronGeometryBinarySerializationAdapter.js +2 -2
  166. package/engine/graphics/micron/format/serialization/deserialize_attribute_spec.js +1 -1
  167. package/engine/graphics/micron/format/serialization/serialize_attribute_spec.js +1 -1
  168. package/engine/graphics/micron/render/PatchCacheKey.js +1 -1
  169. package/engine/graphics/micron/render/instanced/AttributeDataTexture.js +5 -5
  170. package/engine/graphics/micron/render/v1/ThreeVirtualGeometryAdapter.js +1 -1
  171. package/engine/graphics/particles/ParticleEmitterLibrary.js +3 -0
  172. package/engine/graphics/particles/ecs/{ParticleEmitterSystem2.js → ParticleEmitterSystem.js} +17 -9
  173. package/engine/graphics/particles/particular/engine/ParticularEngine.js +12 -4
  174. package/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.js +84 -0
  175. package/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +106 -169
  176. package/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.js +5 -0
  177. package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +14 -3
  178. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +141 -14
  179. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.spec.js +8 -7
  180. package/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +37 -0
  181. package/engine/graphics/particles/particular/engine/emitter/distance_to_camera.js +25 -0
  182. package/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +8 -2
  183. package/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +2 -1
  184. package/engine/graphics/particles/particular/engine/parameter/ParameterTrack.js +1 -1
  185. package/engine/graphics/particles/particular/engine/parameter/ParticleParameter.js +1 -1
  186. package/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.js +24 -0
  187. package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +262 -71
  188. package/engine/graphics/particles/particular/engine/renderers/billboard/prototypeBillboardRenderer.js +9 -9
  189. package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +80 -46
  190. package/engine/graphics/particles/particular/engine/shader/debugAtlas.js +14 -0
  191. package/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.js +2 -5
  192. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js +2 -6
  193. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +2 -7
  194. package/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +2 -5
  195. package/engine/graphics/particles/particular/engine/simulator/update_parameters.js +1 -1
  196. package/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js +1 -1
  197. package/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +1 -1
  198. package/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.js +141 -0
  199. package/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.js +478 -0
  200. package/engine/graphics/particles/particular/engine/utils/volume/lut_to_sampler.js +27 -0
  201. package/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +935 -0
  202. package/engine/graphics/particles/particular/group/Operation.js +18 -0
  203. package/engine/graphics/particles/particular/group/OperationType.js +9 -0
  204. package/engine/graphics/particles/particular/group/ParticleAttribute.js +2 -1
  205. package/engine/graphics/particles/particular/group/ParticleAttributeType.js +11 -0
  206. package/engine/graphics/particles/particular/group/ParticleDataType.js +10 -0
  207. package/engine/graphics/particles/particular/group/ParticleGroup.js +7 -245
  208. package/engine/graphics/particles/particular/group/ParticleGroup.spec.js +3 -1
  209. package/engine/graphics/particles/particular/group/ParticleSpecification.js +21 -14
  210. package/engine/graphics/particles/particular/group/itemSizeFromAttributeType.js +20 -0
  211. package/engine/graphics/particles/particular/group/optimizeCommandQueue.js +162 -0
  212. package/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.js +19 -0
  213. package/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +2 -2
  214. package/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js +13 -7
  215. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameter.js +2 -1
  216. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameterSet.js +1 -1
  217. package/engine/graphics/render/forward_plus/LightManager.js +126 -95
  218. package/engine/graphics/render/forward_plus/PointLight.js +9 -0
  219. package/engine/graphics/render/forward_plus/PointLightData.js +1 -1
  220. package/engine/graphics/render/forward_plus/SpotLight.js +9 -0
  221. package/engine/graphics/render/forward_plus/cluster/compute_light_data_hash_0.js +2 -2
  222. package/engine/graphics/render/forward_plus/computeFrustumCorners.js +14 -32
  223. package/engine/graphics/render/forward_plus/materials/FP_INJECTION_POINT_ACCUMULATION.js +1 -0
  224. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_ACCUMULATION.js +32 -0
  225. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_DECODE_PARS.js +51 -0
  226. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_PREAMBLE.js +25 -0
  227. package/engine/graphics/render/forward_plus/materials/fp_build_fragment_shader.js +31 -120
  228. package/engine/graphics/render/forward_plus/materials/fp_build_vertex_lighting_shared.js +35 -0
  229. package/engine/graphics/render/forward_plus/materials/fp_build_vertex_shader.js +4 -5
  230. package/engine/graphics/render/forward_plus/plugin/ForwardPlusRenderingPlugin.js +1 -1
  231. package/engine/graphics/render/forward_plus/plugin/MaterialTransformer.js +10 -3
  232. package/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +595 -60
  233. package/engine/graphics/render/forward_plus/prototypeLightManager.js +256 -136
  234. package/engine/graphics/render/forward_plus/query/analytical_triplanar_corner_mapping.js +8 -0
  235. package/engine/graphics/render/forward_plus/query/cube_mapping.js +38 -0
  236. package/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +86 -0
  237. package/engine/graphics/render/forward_plus/query/point_light_inside_volume.js +73 -0
  238. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_objects.js +131 -0
  239. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.js +129 -0
  240. package/engine/graphics/render/forward_plus/query/spot_light_inside_volume.js +33 -0
  241. package/engine/graphics/render/forward_plus/read_frustum_corner.js +14 -0
  242. package/engine/graphics/render/forward_plus/testClusterEquality.js +22 -0
  243. package/engine/graphics/render/layers/RenderLayerUtils.js +7 -4
  244. package/engine/graphics/render/visibility/IncrementalDeltaSet.js +11 -0
  245. package/engine/graphics/render/visibility/hiz/prototypeHiZ.js +2 -2
  246. package/engine/graphics/shaders/TerrainShader.js +4 -5
  247. package/engine/graphics/texture/atlas/AtlasPatch.js +7 -2
  248. package/engine/graphics/texture/atlas/TextureAtlas.js +2 -2
  249. package/engine/graphics/texture/sampler/HarmonicDiffusionGrid.spec.js +1 -1
  250. package/engine/graphics/texture/sampler/SampleTraverser.js +1 -1
  251. package/engine/graphics/texture/sampler/Sampler2D.js +8 -7
  252. package/engine/graphics/texture/sampler/distanceField.spec.js +1 -1
  253. package/engine/graphics/texture/sampler/scaleSampler2D.js +7 -10
  254. package/engine/graphics/trail/x/RibbonMaterialX.js +3 -3
  255. package/engine/graphics/trail/x/RibbonX.js +17 -2
  256. package/engine/graphics/trail/x/RibbonXPlugin.js +51 -1
  257. package/engine/graphics/util/composeMatrix4.js +33 -23
  258. package/engine/graphics/util/decompose_matrix_4_array.js +61 -0
  259. package/engine/grid/components/GridObstacle.js +3 -10
  260. package/engine/intelligence/behavior/ecs/BehaviorComponent.js +30 -14
  261. package/engine/intelligence/behavior/selector/WeightedElement.js +2 -1
  262. package/engine/intelligence/optimization/RandomOptimizer.js +1 -1
  263. package/engine/knowledge/database/StaticKnowledgeDataTable.js +6 -1
  264. package/engine/navigation/ecs/components/Path.js +1 -6
  265. package/engine/navigation/grid/FastBinaryHeap.spec.js +1 -1
  266. package/engine/reference/v2/Reference.js +6 -0
  267. package/engine/sound/ecs/emitter/SoundEmitter.js +2 -1
  268. package/engine/sound/ecs/emitter/SoundTrack.js +2 -1
  269. package/engine/sound/material/concrete/RandomSoundMaterial.js +1 -1
  270. package/engine/ui/notification/notificationGenerator.js +1 -1
  271. package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +1 -1
  272. package/generation/grid/generation/GridTaskExecuteRuleTimes.js +2 -1
  273. package/generation/markers/actions/MarkerNodeActionSelectRandom.js +1 -1
  274. package/generation/markers/transform/MarkerNodeTransformerRecordUniqueRandomEnum.js +1 -1
  275. package/generation/placement/action/random/CellActionSelectRandom.js +1 -1
  276. package/generation/theme/ThemeEngine.js +2 -2
  277. package/misc/makeMaterialIconCached.js +2 -2
  278. package/package.json +3 -3
  279. package/view/View.js +4 -2
  280. package/view/elements/image/HTMLElementCacheKey.js +2 -1
  281. package/view/elements/radial/RadialText.js +2 -1
  282. package/view/minimap/gl/MinimapMarkersGL.js +6 -100
  283. package/view/minimap/gl/buildMaterial.js +94 -0
  284. package/engine/graphics/micron/format/MicronGeometryBufferAttributeSpec.js +0 -71
  285. package/engine/graphics/render/forward_plus/queryBVH_Frustum.js +0 -345
@@ -0,0 +1,105 @@
1
+ import { DataType } from "../../../core/collection/table/DataType.js";
2
+ import { computeStringHash } from "../../../core/primitives/strings/computeStringHash.js";
3
+ import { DataTypeByteSizes } from "../../../core/collection/table/DataTypeByteSizes.js";
4
+ import { assert } from "../../../core/assert.js";
5
+
6
+ export class AttributeSpec {
7
+ constructor() {
8
+ /**
9
+ *
10
+ * @type {string}
11
+ */
12
+ this.name = "";
13
+
14
+ /**
15
+ *
16
+ * @type {DataType}
17
+ */
18
+ this.type = DataType.Float32;
19
+
20
+ /**
21
+ *
22
+ * @type {number}
23
+ */
24
+ this.itemSize = 1;
25
+
26
+ /**
27
+ * Normalized values will be automatically converted to float32 in the shader
28
+ * This gives good optimization opportunities for things like normal vectors
29
+ * Applies to integer types only
30
+ * @type {boolean}
31
+ */
32
+ this.normalized = false;
33
+ }
34
+
35
+ static fromJSON(j) {
36
+ const r = new AttributeSpec();
37
+
38
+ r.fromJSON(j);
39
+
40
+ return r;
41
+ }
42
+
43
+ fromJSON({
44
+ name,
45
+ type,
46
+ itemSize,
47
+ normalized = false
48
+ }) {
49
+
50
+ assert.isString(name, 'name');
51
+ assert.enum(type, DataType, 'type');
52
+
53
+ assert.isNumber(itemSize, 'itemSize');
54
+ assert.isNonNegativeInteger(itemSize, 'itemSize');
55
+ assert.greaterThanOrEqual(itemSize, 1, 'itemSize must be >= 1');
56
+
57
+ assert.isBoolean(normalized, 'normalized');
58
+
59
+ this.name = name;
60
+ this.type = type;
61
+ this.itemSize = itemSize;
62
+ this.normalized = normalized;
63
+ }
64
+
65
+ hash() {
66
+ return computeStringHash(this.name);
67
+ }
68
+
69
+ /**
70
+ *
71
+ * @param {AttributeSpec} other
72
+ * @returns {boolean}
73
+ */
74
+ equals(other) {
75
+ return this.type === other.type
76
+ && this.itemSize === other.itemSize
77
+ && this.normalized === other.normalized
78
+ && this.name === other.name
79
+ ;
80
+ }
81
+
82
+ /**
83
+ *
84
+ * @returns {number}
85
+ */
86
+ getByteSize() {
87
+ return this.itemSize * DataTypeByteSizes[this.type];
88
+ }
89
+
90
+ /**
91
+ *
92
+ * @param {AttributeSpec} a
93
+ * @param {AttributeSpec} b
94
+ * @return {number}
95
+ */
96
+ static byName(a, b) {
97
+ return a.name.localeCompare(b.name);
98
+ }
99
+ }
100
+
101
+ /**
102
+ * @readonly
103
+ * @type {boolean}
104
+ */
105
+ AttributeSpec.prototype.isAttributeSpec = true;
@@ -1,14 +1,14 @@
1
- import { isArrayEqual } from "../../../../core/collection/ArrayUtils.js";
2
- import { computeHashArray } from "../../../../core/math/MathUtils.js";
3
- import { invokeObjectHash } from "../../../../core/model/object/invokeObjectHash.js";
1
+ import { isArrayEqual } from "../../../core/collection/ArrayUtils.js";
2
+ import { invokeObjectHash } from "../../../core/model/object/invokeObjectHash.js";
3
+ import { computeHashArray } from "../../../core/collection/array/computeHashArray.js";
4
4
 
5
5
  const DEFAULT_HASH = 123456;
6
6
 
7
- export class MicronVertexDataSpec {
7
+ export class VertexDataSpec {
8
8
  constructor() {
9
9
  /**
10
10
  *
11
- * @type {MicronGeometryBufferAttributeSpec[]}
11
+ * @type {AttributeSpec[]}
12
12
  */
13
13
  this.attributes = [];
14
14
 
@@ -22,7 +22,49 @@ export class MicronVertexDataSpec {
22
22
 
23
23
  /**
24
24
  *
25
- * @param {MicronGeometryBufferAttributeSpec[]} attributes
25
+ * @param {string} name
26
+ * @return {AttributeSpec|undefined}
27
+ */
28
+ getAttributeByName(name) {
29
+
30
+ const attributes = this.attributes;
31
+ const n = attributes.length;
32
+
33
+ for (let i = 0; i < n; i++) {
34
+ const attribute = attributes[i];
35
+
36
+ if (attribute.name === name) {
37
+ return attribute;
38
+ }
39
+ }
40
+
41
+ return undefined;
42
+ }
43
+
44
+ /**
45
+ *
46
+ * @param {AttributeSpec} attribute
47
+ * @return {VertexDataSpec}
48
+ */
49
+ add(attribute) {
50
+
51
+ //check uniqueness of name
52
+ if (this.getAttributeByName(attribute.name) !== undefined) {
53
+ throw new Error(`Attribute named '${attribute.name}' already exists`);
54
+ }
55
+
56
+ this.attributes.push(attribute);
57
+
58
+ // reset hash
59
+ this.__hash = DEFAULT_HASH;
60
+
61
+ //for chaining, return self
62
+ return this;
63
+ }
64
+
65
+ /**
66
+ *
67
+ * @param {AttributeSpec[]} attributes
26
68
  */
27
69
  setAttributes(attributes) {
28
70
  this.attributes = attributes;
@@ -33,7 +75,7 @@ export class MicronVertexDataSpec {
33
75
 
34
76
  /**
35
77
  *
36
- * @param {MicronVertexDataSpec} other
78
+ * @param {VertexDataSpec} other
37
79
  * @returns {boolean}
38
80
  */
39
81
  equals(other) {
@@ -56,24 +98,6 @@ export class MicronVertexDataSpec {
56
98
  return this.__hash;
57
99
  }
58
100
 
59
- /**
60
- *
61
- * @param {string} name
62
- * @return {MicronGeometryBufferAttributeSpec|undefined}
63
- */
64
- getAttributeByName(name) {
65
- const attributes = this.attributes;
66
- const n = attributes.length;
67
- for (let i = 0; i < n; i++) {
68
- const spec = attributes[i];
69
-
70
- if (spec.name === name) {
71
- return spec;
72
- }
73
- }
74
-
75
- }
76
-
77
101
  /**
78
102
  *
79
103
  * @returns {number}
@@ -93,3 +117,10 @@ export class MicronVertexDataSpec {
93
117
  return result;
94
118
  }
95
119
  }
120
+
121
+
122
+ /**
123
+ * @readonly
124
+ * @type {boolean}
125
+ */
126
+ VertexDataSpec.prototype.isVertexDataSpec = true;
@@ -2,7 +2,7 @@ import { TopoMesh } from "../../../../core/geom/3d/topology/TopoMesh.js";
2
2
  import { PatchRepresentation } from "./PatchRepresentation.js";
3
3
  import { MicronGeometry } from "../format/MicronGeometry.js";
4
4
  import { buildAbstractPatchHierarchy } from "./hierarchy/buildAbstractPatchHierarchy.js";
5
- import { MicronGeometryBufferAttributeSpec } from "../format/MicronGeometryBufferAttributeSpec.js";
5
+ import { AttributeSpec } from "../../geometry/AttributeSpec.js";
6
6
  import { typedArrayToDataType } from "../../../../core/collection/array/typedArrayToDataType.js";
7
7
  import { DataType } from "../../../../core/collection/table/DataType.js";
8
8
  import { MicronGeometryPatch } from "../format/MicronGeometryPatch.js";
@@ -28,7 +28,7 @@ function current_time_millis() {
28
28
 
29
29
  /**
30
30
  *
31
- * @param {MicronGeometryBufferAttributeSpec} spec
31
+ * @param {AttributeSpec} spec
32
32
  * @param {THREE.BufferAttribute} source
33
33
  */
34
34
  function custom_attribute_format_normal(spec, source) {
@@ -39,7 +39,7 @@ function custom_attribute_format_normal(spec, source) {
39
39
 
40
40
  /**
41
41
  *
42
- * @param {MicronGeometryBufferAttributeSpec} spec
42
+ * @param {AttributeSpec} spec
43
43
  * @param {THREE.BufferAttribute} source
44
44
  */
45
45
  function custom_attribute_format_uv(spec, source) {
@@ -49,7 +49,7 @@ function custom_attribute_format_uv(spec, source) {
49
49
 
50
50
  /**
51
51
  *
52
- * @param {MicronGeometryBufferAttributeSpec} spec
52
+ * @param {AttributeSpec} spec
53
53
  * @param {THREE.BufferAttribute} source
54
54
  * @param {string} name
55
55
  */
@@ -76,7 +76,7 @@ function format_attribute(spec, source, name) {
76
76
  /**
77
77
  *
78
78
  * @param {THREE.BufferGeometry} buffer_geometry
79
- * @returns {MicronGeometryBufferAttributeSpec[]}
79
+ * @returns {AttributeSpec[]}
80
80
  */
81
81
  function attributes_from_buffer_geometry(buffer_geometry) {
82
82
  const result = [];
@@ -84,7 +84,7 @@ function attributes_from_buffer_geometry(buffer_geometry) {
84
84
  const source_attributes = buffer_geometry.attributes;
85
85
  for (const attributesKey in source_attributes) {
86
86
  const source_attribute = source_attributes[attributesKey];
87
- const spec = new MicronGeometryBufferAttributeSpec();
87
+ const spec = new AttributeSpec();
88
88
 
89
89
  format_attribute(spec, source_attribute, attributesKey);
90
90
 
@@ -92,7 +92,7 @@ function attributes_from_buffer_geometry(buffer_geometry) {
92
92
  }
93
93
 
94
94
  // to ensure that input order of attributes does not matter, we sort the attributes by name
95
- result.sort(MicronGeometryBufferAttributeSpec.byName);
95
+ result.sort(AttributeSpec.byName);
96
96
 
97
97
  return result;
98
98
  }
@@ -110,7 +110,7 @@ const DataConverterType = {
110
110
 
111
111
  /**
112
112
  * How to convert data from source three.js buffer attribute to what we store in the patch description based on the supplied micron spec
113
- * @param {MicronGeometryBufferAttributeSpec} spec
113
+ * @param {AttributeSpec} spec
114
114
  * @param {THREE.BufferAttribute} source
115
115
  * @returns {DataConverterType}
116
116
  */
@@ -2,7 +2,7 @@ import { FrontSide, Group, Mesh, MeshBasicMaterial, MeshStandardMaterial } from
2
2
  import { patchToBufferGeometry } from "./util/patchToBufferGeometry.js";
3
3
  import { Color } from "../../../core/color/Color.js";
4
4
  import { seededRandom } from "../../../core/math/random/seededRandom.js";
5
- import { randomFloatBetween } from "../../../core/math/MathUtils.js";
5
+ import { randomFloatBetween } from "../../../core/math/random/randomFloatBetween.js";
6
6
 
7
7
  /**
8
8
  *
@@ -1,4 +1,4 @@
1
- import { MicronVertexDataSpec } from "./MicronVertexDataSpec.js";
1
+ import { VertexDataSpec } from "../../geometry/VertexDataSpec.js";
2
2
  import { assert } from "../../../../core/assert.js";
3
3
 
4
4
  let id_counter = 0;
@@ -30,9 +30,9 @@ export class MicronGeometry {
30
30
 
31
31
  /**
32
32
  *
33
- * @type {MicronVertexDataSpec|null}
33
+ * @type {VertexDataSpec|null}
34
34
  */
35
- this.vertex_spec = new MicronVertexDataSpec();
35
+ this.vertex_spec = new VertexDataSpec();
36
36
 
37
37
  /**
38
38
  *
@@ -1,6 +1,6 @@
1
1
  import { BinaryClassSerializationAdapter } from "../../../../ecs/storage/binary/BinaryClassSerializationAdapter.js";
2
2
  import { MicronGeometry } from "../MicronGeometry.js";
3
- import { MicronGeometryBufferAttributeSpec } from "../MicronGeometryBufferAttributeSpec.js";
3
+ import { AttributeSpec } from "../../../geometry/AttributeSpec.js";
4
4
  import { MicronGeometryPatch } from "../MicronGeometryPatch.js";
5
5
  import { serialize_patch } from "./serialize_patch.js";
6
6
  import { deserialize_patch } from "./deserialize_patch.js";
@@ -63,7 +63,7 @@ export class MicronGeometryBinarySerializationAdapter extends BinaryClassSeriali
63
63
  const attribute_count = buffer.readUintVar();
64
64
  const attributes = [];
65
65
  for (let i = 0; i < attribute_count; i++) {
66
- const spec = new MicronGeometryBufferAttributeSpec();
66
+ const spec = new AttributeSpec();
67
67
 
68
68
  deserialize_attribute_spec(buffer, spec);
69
69
  attributes[i] = spec;
@@ -3,7 +3,7 @@ import { computeDataTypeByIndex } from "../../../../../core/collection/table/com
3
3
  /**
4
4
  *
5
5
  * @param {BinaryBuffer} buffer
6
- * @param {MicronGeometryBufferAttributeSpec} spec
6
+ * @param {AttributeSpec} spec
7
7
  */
8
8
  export function deserialize_attribute_spec(buffer, spec) {
9
9
 
@@ -3,7 +3,7 @@ import { DataTypeIndices } from "../../../../../core/collection/table/DataTypeIn
3
3
  /**
4
4
  *
5
5
  * @param {BinaryBuffer} buffer
6
- * @param {MicronGeometryBufferAttributeSpec} spec
6
+ * @param {AttributeSpec} spec
7
7
  */
8
8
  export function serialize_attribute_spec(buffer, spec) {
9
9
  buffer.writeUTF8String(spec.name);
@@ -1,7 +1,7 @@
1
1
  import { mortonEncode_magicbits } from "../../../../core/geom/3d/morton/mortonEncode_magicbits.js";
2
- import { computeHashFloat } from "../../../../core/math/MathUtils.js";
3
2
  import { isArrayEqualStrict } from "../../../../core/collection/array/isArrayEqualStrict.js";
4
3
  import { SimpleObjectPoolFactory } from "../../../../core/model/object/SimpleObjectPoolFactory.js";
4
+ import { computeHashFloat } from "../../../../core/math/hash/computeHashFloat.js";
5
5
 
6
6
  export class PatchCacheKey {
7
7
  constructor() {
@@ -53,18 +53,18 @@ function normalized_internal_format(dt, channel_count) {
53
53
  export class AttributeDataTexture {
54
54
  /**
55
55
  *
56
- * @param {MicronGeometryBufferAttributeSpec} spec
56
+ * @param {AttributeSpec} spec
57
57
  * @param {number} column_count
58
58
  */
59
59
  constructor(spec, column_count) {
60
60
  assert.defined(spec, 'spec');
61
- assert.equal(spec.isMicronGeometryBufferAttributeSpec, true, 'spec.isMicronGeometryBufferAttributeSpec !== true');
61
+ assert.equal(spec.isAttributeSpec, true, 'spec.isAttributeSpec !== true');
62
62
 
63
63
  assert.isNonNegativeInteger(column_count, 'column_count');
64
64
 
65
65
  /**
66
66
  *
67
- * @type {MicronGeometryBufferAttributeSpec}
67
+ * @type {AttributeSpec}
68
68
  * @private
69
69
  */
70
70
  this.__spec = spec;
@@ -90,7 +90,7 @@ export class AttributeDataTexture {
90
90
 
91
91
  /**
92
92
  *
93
- * @return {MicronGeometryBufferAttributeSpec}
93
+ * @return {AttributeSpec}
94
94
  */
95
95
  get spec() {
96
96
  return this.__spec;
@@ -320,7 +320,7 @@ export class AttributeDataTexture {
320
320
  /**
321
321
  *
322
322
  * @return {AttributeDataTexture}
323
- * @param {MicronGeometryBufferAttributeSpec} spec
323
+ * @param {AttributeSpec} spec
324
324
  * @param {number} column_count
325
325
  */
326
326
  static from(spec, column_count) {
@@ -4,7 +4,7 @@ import { DataType2TypedArrayConstructorMapping } from "../../../../../core/colle
4
4
  import { getTransformedPositionsCached } from "./getTransformedPositionsCached.js";
5
5
  import { Color } from "../../../../../core/color/Color.js";
6
6
  import { seededRandom } from "../../../../../core/math/random/seededRandom.js";
7
- import { randomFloatBetween } from "../../../../../core/math/MathUtils.js";
7
+ import { randomFloatBetween } from "../../../../../core/math/random/randomFloatBetween.js";
8
8
 
9
9
 
10
10
  const scratch_random = seededRandom(0);
@@ -2,6 +2,9 @@ import { ParticleEmitter } from "./particular/engine/emitter/ParticleEmitter.js"
2
2
  import { GameAssetType } from "../../asset/GameAssetType.js";
3
3
  import { assert } from "../../../core/assert.js";
4
4
 
5
+ /**
6
+ * @deprecated Use "Effect" API to achieve the same results
7
+ */
5
8
  export class ParticleEmitterLibrary {
6
9
  /**
7
10
  *
@@ -8,6 +8,7 @@ import { ParticleEmitterLibrary } from "../ParticleEmitterLibrary.js";
8
8
  import { GameAssetType } from "../../../asset/GameAssetType.js";
9
9
  import { ImageRGBADataLoader } from "../../../asset/loaders/image/ImageRGBADataLoader.js";
10
10
  import { StandardFrameBuffers } from "../../StandardFrameBuffers.js";
11
+ import { assert } from "../../../../core/assert.js";
11
12
 
12
13
  /**
13
14
  *
@@ -28,36 +29,38 @@ function putEmitterToSleep(emitter) {
28
29
  emitter.setFlag(ParticleEmitterFlag.Sleeping);
29
30
  }
30
31
 
31
- export class ParticleEmitterSystem2 extends System {
32
+ export class ParticleEmitterSystem extends System {
32
33
  /**
33
34
  *
34
35
  * @extends {System.<ParticleEmitter>}
35
36
  * @constructor
36
- * @param {AssetManager} assetManager
37
- * @param {GraphicsEngine} graphicsEngine
37
+ * @param {Engine} engine
38
38
  */
39
- constructor(assetManager, graphicsEngine) {
39
+ constructor(engine) {
40
40
  super();
41
41
 
42
+ assert.defined(engine, 'engine');
43
+ assert.equal(engine.isEngine, true, 'engine.isEngine !== true');
44
+
42
45
  this.dependencies = [ParticleEmitter, Transform];
43
46
 
44
47
  /**
45
48
  *
46
49
  * @type {GraphicsEngine}
47
50
  */
48
- this.graphicsEngine = graphicsEngine;
51
+ this.graphicsEngine = engine.graphics;
49
52
 
50
53
  /**
51
54
  *
52
55
  * @type {AssetManager}
53
56
  */
54
- this.assetManager = assetManager;
57
+ this.assetManager = engine.assetManager;
55
58
 
56
59
  /**
57
60
  *
58
61
  * @type {ParticularEngine}
59
62
  */
60
- this.particleEngine = new ParticularEngine(assetManager);
63
+ this.particleEngine = new ParticularEngine(engine.assetManager, engine.graphics.getMaterialManager());
61
64
 
62
65
  /**
63
66
  *
@@ -72,14 +75,19 @@ export class ParticleEmitterSystem2 extends System {
72
75
  this.bvh = null;
73
76
 
74
77
  /**
75
- *
78
+ * @deprecated Use "Effect" API to achieve the same results
76
79
  * @type {ParticleEmitterLibrary}
77
80
  */
78
- this.library = new ParticleEmitterLibrary(assetManager);
81
+ this.__library = new ParticleEmitterLibrary(engine.assetManager);
79
82
 
80
83
  this.__handlers = [];
81
84
  }
82
85
 
86
+ get library() {
87
+ console.warn('Deprecated, use "Effect" API to achieve the same results');
88
+ return this.__library;
89
+ }
90
+
83
91
  get componentClass() {
84
92
  return ParticleEmitter;
85
93
  }
@@ -8,8 +8,14 @@ import { SimulationStepApplyForce } from "./simulator/SimulationStepApplyForce.j
8
8
  import { SimulationStepCurlNoiseVelocity } from "./simulator/SimulationStepCurlNoiseVelocity.js";
9
9
 
10
10
 
11
- function ParticularEngine(assetManager) {
12
- this.shaderManager = new ShaderManager(assetManager);
11
+ /**
12
+ *
13
+ * @param {AssetManager} assetManager
14
+ * @param {MaterialManager} material_manager
15
+ * @constructor
16
+ */
17
+ function ParticularEngine(assetManager, material_manager) {
18
+ this.shaderManager = new ShaderManager(assetManager, material_manager);
13
19
 
14
20
  /**
15
21
  *
@@ -63,10 +69,12 @@ ParticularEngine.prototype.add = function (emitter) {
63
69
  * @param {ParticleEmitter} emitter
64
70
  */
65
71
  ParticularEngine.prototype.remove = function (emitter) {
66
- const i = this.emitters.indexOf(emitter);
72
+ const emitters = this.emitters;
73
+
74
+ const i = emitters.indexOf(emitter);
67
75
 
68
76
  if (i !== -1) {
69
- this.emitters.remove(i);
77
+ emitters.remove(i);
70
78
  }
71
79
 
72
80
  this.shaderManager.deregister(emitter);
@@ -0,0 +1,84 @@
1
+ import { VertexDataSpec } from "../../../../geometry/VertexDataSpec.js";
2
+ import { AttributeSpec } from "../../../../geometry/AttributeSpec.js";
3
+ import { DataType } from "../../../../../../core/collection/table/DataType.js";
4
+
5
+ //build particle spec
6
+ export const PARTICULAR_PARTICLE_SPECIFICATION = new VertexDataSpec();
7
+
8
+ PARTICULAR_PARTICLE_SPECIFICATION.add(AttributeSpec.fromJSON({
9
+ name: 'position',
10
+ itemSize: 3,
11
+ type: DataType.Float32,
12
+ normalized: false
13
+ }));
14
+ PARTICULAR_PARTICLE_SPECIFICATION.add(AttributeSpec.fromJSON({
15
+ name: 'age',
16
+ itemSize: 1,
17
+ type: DataType.Float32,
18
+ normalized: false
19
+ }));
20
+ PARTICULAR_PARTICLE_SPECIFICATION.add(AttributeSpec.fromJSON({
21
+ name: 'deathAge',
22
+ itemSize: 1,
23
+ type: DataType.Float32,
24
+ normalized: false
25
+ }));
26
+
27
+ PARTICULAR_PARTICLE_SPECIFICATION.add(AttributeSpec.fromJSON({
28
+ name: 'atlasPatch',
29
+ itemSize: 4,
30
+ type: DataType.Uint16,
31
+ normalized: true
32
+ }));
33
+
34
+ // TODO convert "size" to scale instead
35
+ PARTICULAR_PARTICLE_SPECIFICATION.add(AttributeSpec.fromJSON({
36
+ name: 'size',
37
+ itemSize: 1,
38
+ type: DataType.Float32,
39
+ normalized: false
40
+ }));
41
+
42
+ PARTICULAR_PARTICLE_SPECIFICATION.add(AttributeSpec.fromJSON({
43
+ name: 'layerPosition',
44
+ itemSize: 1,
45
+ type: DataType.Uint8,
46
+ normalized: false
47
+ }));
48
+
49
+ PARTICULAR_PARTICLE_SPECIFICATION.add(AttributeSpec.fromJSON({
50
+ name: 'velocity',
51
+ itemSize: 3,
52
+ type: DataType.Float32,
53
+ normalized: false
54
+ }));
55
+ PARTICULAR_PARTICLE_SPECIFICATION.add(AttributeSpec.fromJSON({
56
+ name: 'rotation',
57
+ itemSize: 1,
58
+ type: DataType.Float32,
59
+ normalized: false
60
+ }));
61
+ PARTICULAR_PARTICLE_SPECIFICATION.add(AttributeSpec.fromJSON({
62
+ name: 'rotationSpeed',
63
+ itemSize: 1,
64
+ type: DataType.Float32,
65
+ normalized: false
66
+ }));
67
+ PARTICULAR_PARTICLE_SPECIFICATION.add(AttributeSpec.fromJSON({
68
+ name: 'color',
69
+ itemSize: 4,
70
+ type: DataType.Uint8,
71
+ normalized: true
72
+ }));
73
+ PARTICULAR_PARTICLE_SPECIFICATION.add(AttributeSpec.fromJSON({
74
+ name: 'blending',
75
+ itemSize: 1,
76
+ type: DataType.Float32,
77
+ normalized: false
78
+ }));
79
+ PARTICULAR_PARTICLE_SPECIFICATION.add(AttributeSpec.fromJSON({
80
+ name: 'size_initial',
81
+ itemSize: 1,
82
+ type: DataType.Float32,
83
+ normalized: false
84
+ }));