@woosh/meep-engine 2.33.20 → 2.33.24

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/__detailed_box_volume_intersection.js +11 -8
  9. package/core/collection/ArrayUtils.js +1 -1
  10. package/core/collection/HashMap.js +66 -22
  11. package/core/collection/array/arrayQuickSort.js +9 -6
  12. package/core/collection/array/array_swap.js +22 -0
  13. package/core/collection/array/computeHashArray.js +22 -0
  14. package/core/collection/array/computeHashIntegerArray.js +15 -0
  15. package/core/collection/table/DataType2TypedArrayConstructorMapping.js +15 -0
  16. package/core/color/Color.js +2 -1
  17. package/core/function/FunctionCompiler.js +2 -1
  18. package/core/geom/3d/CircleMath.js +4 -4
  19. package/core/geom/3d/aabb/aabb3_computeDistanceAbovePlane.js +9 -33
  20. package/core/geom/3d/cone/computeConeBoundingBox.js +4 -4
  21. package/core/geom/3d/{compute_bounding_cone_of_2_cones.js → cone/compute_bounding_cone_of_2_cones.js} +3 -3
  22. package/core/geom/3d/{compute_bounding_cone_of_2_cones.spec.js → cone/compute_bounding_cone_of_2_cones.spec.js} +1 -1
  23. package/core/geom/3d/frustum/array_setFromProjectionMatrix.js +1 -1
  24. package/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +11 -3
  25. package/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.js +41 -0
  26. package/core/geom/3d/morton/mortonEncode_magicbits.js +2 -1
  27. package/core/geom/3d/morton/reinterpret_float32_as_int32.js +13 -0
  28. package/core/geom/3d/morton/v3_morton_encode_transformed.js +33 -0
  29. package/core/geom/3d/{encode_unit3_hemioct.js → normal/hemioct/encode_unit3_hemioct.js} +0 -0
  30. package/core/geom/3d/{unit_hemioct.spec.js → normal/hemioct/unit_hemioct.spec.js} +1 -1
  31. package/core/geom/3d/normal/lamber_azimuth/transform.js +61 -0
  32. package/core/geom/3d/normal/spherical/sphere_map_transform.js +77 -0
  33. package/core/geom/3d/{lerp_planes_to_array.js → plane/lerp_planes_to_array.js} +1 -3
  34. package/core/geom/3d/plane/plane3_lerp.js +3 -1
  35. package/core/geom/3d/plane/plane3_slerp.js +4 -1
  36. package/core/geom/3d/{plane_computeConvex3PlaneIntersection.js → plane/plane_computeConvex3PlaneIntersection.js} +14 -16
  37. package/core/geom/3d/ray/ray_computeNearestPointToPoint.js +37 -0
  38. package/core/geom/3d/shape/AbstractShape3D.js +29 -0
  39. package/core/geom/3d/shape/CompositeShape.js +60 -0
  40. package/core/geom/3d/shape/TransformedShape3D.js +70 -0
  41. package/core/geom/3d/shape/UnitCubeShape3D.js +13 -0
  42. package/core/geom/3d/shape/UnitSphereShape3D.js +16 -0
  43. package/core/geom/3d/topology/TopoTriangle.js +1 -1
  44. package/core/geom/3d/topology/TopoVertex.js +1 -1
  45. package/core/geom/3d/topology/bounds/computeTraingleClusterNormalBoundingCone.js +2 -2
  46. package/core/geom/3d/topology/simplify/compute_face_normal_change_dot_product.js +1 -1
  47. package/core/geom/3d/topology/simplify/quadratic/Quadratic3.js +1 -1
  48. package/core/geom/3d/triangle/computeTrianglePlaneSide.js +1 -1
  49. package/core/geom/3d/triangle/computeTriangleRayIntersection.js +1 -1
  50. package/core/geom/3d/voxel/DenseBitVolume3D.js +87 -0
  51. package/core/geom/3d/voxel/buildVolumeFromProjectedGeometry.js +23 -0
  52. package/core/geom/AABB2.js +1 -1
  53. package/core/geom/ConicRay.js +3 -1
  54. package/core/geom/LineSegment.js +1 -77
  55. package/core/geom/Matrix4.js +8 -8
  56. package/core/geom/Plane.js +15 -10
  57. package/core/geom/Quaternion.js +2 -1
  58. package/core/geom/Rectangle.js +2 -1
  59. package/core/geom/Vector1.js +1 -1
  60. package/core/geom/Vector3.d.ts +2 -0
  61. package/core/geom/Vector3.js +35 -159
  62. package/core/geom/Vector3.spec.js +2 -1
  63. package/core/geom/Vector4.js +2 -1
  64. package/core/geom/random/randomPointInBox.js +7 -3
  65. package/core/geom/random/randomPointInPoint.js +6 -3
  66. package/core/geom/random/randomPointInSphere.js +6 -3
  67. package/core/geom/random/randomPointOnBox.js +7 -3
  68. package/core/geom/random/randomPointOnSphere.js +6 -3
  69. package/core/geom/v3_angle_between.js +31 -0
  70. package/core/geom/v3_distance.js +16 -0
  71. package/core/geom/v3_distance_sqr.js +17 -0
  72. package/core/geom/v3_dot.js +13 -0
  73. package/core/geom/v3_length.js +10 -0
  74. package/core/geom/v3_length_sqr.js +10 -0
  75. package/core/geom/v3_lerp.js +21 -0
  76. package/core/geom/v3_slerp.js +48 -0
  77. package/core/graph/graph_k_means_cluster.js +1 -1
  78. package/core/math/MathUtils.js +0 -354
  79. package/core/math/MathUtils.spec.js +7 -1
  80. package/core/math/gaussian.js +9 -0
  81. package/core/math/hash/computeHashFloat.js +17 -0
  82. package/core/math/hash/computeHashFloatArray.js +34 -0
  83. package/core/math/hash/computeObjectHash.js +54 -0
  84. package/core/math/intersects1D.js +19 -0
  85. package/core/math/interval/NumericInterval.js +2 -2
  86. package/core/math/isValueBetween.js +10 -0
  87. package/core/math/isValueBetweenInclusive.js +10 -0
  88. package/core/math/noise/curl_noise_3dt.js +1 -1
  89. package/core/math/noise/sdnoise.js +10 -10
  90. package/core/math/overlap1D.js +19 -0
  91. package/core/math/pingpong.js +17 -0
  92. package/core/math/random/makeRangedRandom.js +19 -0
  93. package/core/math/random/randomFloatBetween.js +14 -0
  94. package/core/math/random/randomFromArray.js +19 -0
  95. package/core/math/random/randomGaussian.js +15 -0
  96. package/core/math/random/randomIntegerBetween.js +14 -0
  97. package/core/math/random/roundFair.js +15 -0
  98. package/core/math/separation1D.js +21 -0
  99. package/core/math/solveQuadratic.js +25 -0
  100. package/core/model/BoundedValue.js +1 -1
  101. package/core/model/node-graph/node/NodeInstancePortReference.js +1 -1
  102. package/core/model/node-graph/node/Port.js +1 -1
  103. package/core/model/reactive/evaluation/MultiPredicateEvaluator.spec.js +3 -1
  104. package/core/model/reactive/model/ReactiveBinaryExpression.js +1 -1
  105. package/core/model/reactive/model/terminal/ReactiveLiteralNumber.js +1 -1
  106. package/core/model/reactive/model/terminal/ReactiveReference.js +1 -1
  107. package/core/model/reactive/model/util/createRandomReactiveExpression.js +1 -1
  108. package/core/model/stat/LinearModifier.js +1 -1
  109. package/core/primitives/array/computeIntegerArrayHash.js +6 -1
  110. package/engine/animation/curve/AnimationCurve.js +72 -0
  111. package/engine/animation/curve/Keyframe.js +27 -0
  112. package/engine/animation/keyed2/AnimationTrack.js +27 -3
  113. package/engine/asset/Asset.js +1 -1
  114. package/engine/asset/loaders/GLTFAssetLoader.d.ts +1 -1
  115. package/engine/asset/loaders/GLTFAssetLoader.js +10 -0
  116. package/engine/asset/loaders/image/ImageRGBADataAsset.js +8 -1
  117. package/engine/asset/loaders/material/computeImageBitmapEquality.js +11 -0
  118. package/engine/asset/loaders/material/computeImageBitmapHash.js +22 -28
  119. package/engine/asset/loaders/material/computeMaterialHash.js +4 -3
  120. package/engine/asset/loaders/material/computeTextureEquality.js +13 -5
  121. package/engine/asset/loaders/material/computeTextureHash.js +2 -1
  122. package/engine/ecs/animation/Animation.js +2 -1
  123. package/engine/ecs/animation/InverseKinematics.js +2 -1
  124. package/engine/ecs/animation/OneBoneSurfaceAlignmentSolver.js +3 -1
  125. package/engine/ecs/animation/TwoBoneInverseKinematicsSolver.js +3 -1
  126. package/engine/ecs/dynamic_actions/DynamicActorSystem.js +2 -1
  127. package/engine/ecs/dynamic_actions/DynamicRuleDescriptionTable.spec.js +3 -5
  128. package/engine/ecs/dynamic_actions/actions/definition/WeightedRandomActionDescription.js +1 -1
  129. package/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.js +1 -1
  130. package/engine/ecs/foliage/ecs/Foliage2.js +1 -1
  131. package/engine/ecs/fow/FogOfWar.js +2 -3
  132. package/engine/ecs/fow/shader/FogOfWarRenderer.js +1 -1
  133. package/engine/ecs/gui/GUIElement.js +1 -1
  134. package/engine/ecs/gui/hud/HeadsUpDisplay.js +1 -1
  135. package/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +1 -1
  136. package/engine/ecs/gui/position/ViewportPosition.js +2 -1
  137. package/engine/ecs/systems/RangedAttackSystem.js +1 -1
  138. package/engine/ecs/systems/SteeringSystem.js +3 -2
  139. package/engine/ecs/terrain/ecs/Terrain.js +6 -0
  140. package/engine/ecs/terrain/ecs/layers/TerrainLayers.js +5 -0
  141. package/engine/ecs/terrain/ecs/splat/SplatMapping.js +5 -0
  142. package/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -1
  143. package/engine/ecs/tooltip/TooltipComponent.js +15 -0
  144. package/engine/ecs/util/hideEntityGracefully.js +18 -0
  145. package/engine/graphics/GraphicsEngine.js +1 -0
  146. package/engine/graphics/camera/testClippingPlaneComputation.js +2 -2
  147. package/engine/graphics/ecs/animation/animator/AnimationClip.js +2 -1
  148. package/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -1
  149. package/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -1
  150. package/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -1
  151. package/engine/graphics/ecs/animation/animator/graph/AnimationGraph.js +2 -1
  152. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -1
  153. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +1 -1
  154. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +2 -1
  155. package/engine/graphics/ecs/camera/CameraClippingPlaneComputer.js +2 -2
  156. package/engine/graphics/ecs/highlight/HighlightDefinition.js +2 -1
  157. package/engine/graphics/ecs/highlight/renderer/OutlineRenderer.js +0 -53
  158. package/engine/graphics/ecs/light/Light.d.ts +1 -1
  159. package/engine/graphics/ecs/light/Light.js +3 -0
  160. package/engine/graphics/ecs/mesh/Mesh.js +2 -1
  161. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +13 -0
  162. package/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts +6 -0
  163. package/engine/graphics/ecs/path/testPathDisplaySystem.js +98 -98
  164. package/engine/graphics/ecs/trail2d/Trail2D.js +17 -4
  165. package/engine/graphics/ecs/trail2d/Trail2DSystem.d.ts +2 -3
  166. package/engine/graphics/ecs/trail2d/Trail2DSystem.js +34 -118
  167. package/engine/graphics/geometry/AttributeSpec.js +105 -0
  168. package/engine/graphics/{micron/format/MicronVertexDataSpec.js → geometry/VertexDataSpec.js} +56 -25
  169. package/engine/graphics/geometry/bvh/buffered/BVHGeometryRaycaster.js +2 -1
  170. package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +7 -7
  171. package/engine/graphics/micron/build/clustering/computeFaceCurvatureScore.js +1 -1
  172. package/engine/graphics/micron/build/clustering/compute_face_connection_weight.js +1 -1
  173. package/engine/graphics/micron/build/fill_patch_geometry_data.js +1 -1
  174. package/engine/graphics/micron/build/hierarchy/computePatchMergeScore.js +1 -1
  175. package/engine/graphics/micron/build/hierarchy/patch_combine.js +1 -1
  176. package/engine/graphics/micron/buildPatchwork.js +1 -1
  177. package/engine/graphics/micron/format/MicronGeometry.js +3 -3
  178. package/engine/graphics/micron/format/serialization/MicronGeometryBinarySerializationAdapter.js +2 -2
  179. package/engine/graphics/micron/format/serialization/deserialize_attribute_spec.js +1 -1
  180. package/engine/graphics/micron/format/serialization/serialize_attribute_spec.js +1 -1
  181. package/engine/graphics/micron/render/PatchCacheKey.js +1 -1
  182. package/engine/graphics/micron/render/instanced/AttributeDataTexture.js +5 -5
  183. package/engine/graphics/micron/render/refinement/is_patch_facing_back.js +2 -2
  184. package/engine/graphics/micron/render/v1/ThreeVirtualGeometryAdapter.js +1 -1
  185. package/engine/graphics/particles/particular/engine/ParticularEngine.js +4 -2
  186. package/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.js +84 -0
  187. package/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +92 -144
  188. package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +14 -3
  189. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +51 -12
  190. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.spec.js +3 -2
  191. package/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +37 -0
  192. package/engine/graphics/particles/particular/engine/emitter/distance_to_camera.js +25 -0
  193. package/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +8 -2
  194. package/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +2 -1
  195. package/engine/graphics/particles/particular/engine/parameter/ParameterTrack.js +1 -1
  196. package/engine/graphics/particles/particular/engine/parameter/ParticleParameter.js +1 -1
  197. package/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.js +21 -0
  198. package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +0 -20
  199. package/engine/graphics/particles/particular/engine/renderers/billboard/prototypeBillboardRenderer.js +9 -9
  200. package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +7 -25
  201. package/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.js +2 -5
  202. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js +2 -6
  203. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +2 -7
  204. package/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +2 -5
  205. package/engine/graphics/particles/particular/engine/simulator/update_parameters.js +1 -1
  206. package/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js +1 -1
  207. package/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +1 -1
  208. package/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.js +384 -0
  209. package/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +558 -0
  210. package/engine/graphics/particles/particular/group/Operation.js +18 -0
  211. package/engine/graphics/particles/particular/group/OperationType.js +9 -0
  212. package/engine/graphics/particles/particular/group/ParticleAttribute.js +2 -1
  213. package/engine/graphics/particles/particular/group/ParticleAttributeType.js +11 -0
  214. package/engine/graphics/particles/particular/group/ParticleDataType.js +10 -0
  215. package/engine/graphics/particles/particular/group/ParticleGroup.js +7 -245
  216. package/engine/graphics/particles/particular/group/ParticleGroup.spec.js +3 -1
  217. package/engine/graphics/particles/particular/group/ParticleSpecification.js +21 -14
  218. package/engine/graphics/particles/particular/group/itemSizeFromAttributeType.js +20 -0
  219. package/engine/graphics/particles/particular/group/optimizeCommandQueue.js +162 -0
  220. package/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.js +19 -0
  221. package/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +2 -2
  222. package/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js +1 -1
  223. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameter.js +2 -1
  224. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameterSet.js +1 -1
  225. package/engine/graphics/render/forward_plus/LightManager.js +126 -95
  226. package/engine/graphics/render/forward_plus/PointLight.js +9 -0
  227. package/engine/graphics/render/forward_plus/PointLightData.js +1 -1
  228. package/engine/graphics/render/forward_plus/SpotLight.js +9 -0
  229. package/engine/graphics/render/forward_plus/cluster/compute_light_data_hash_0.js +2 -2
  230. package/engine/graphics/render/forward_plus/computeFrustumCorners.js +15 -33
  231. package/engine/graphics/render/forward_plus/plugin/ForwardPlusRenderingPlugin.js +1 -1
  232. package/engine/graphics/render/forward_plus/plugin/MaterialTransformer.js +12 -2
  233. package/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +6 -6
  234. package/engine/graphics/render/forward_plus/prototypeLightManager.js +231 -136
  235. package/engine/graphics/render/forward_plus/query/analytical_triplanar_corner_mapping.js +8 -0
  236. package/engine/graphics/render/forward_plus/query/cube_mapping.js +38 -0
  237. package/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +86 -0
  238. package/engine/graphics/render/forward_plus/query/point_light_inside_volume.js +73 -0
  239. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_objects.js +131 -0
  240. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.js +129 -0
  241. package/engine/graphics/render/forward_plus/query/spot_light_inside_volume.js +33 -0
  242. package/engine/graphics/render/forward_plus/read_frustum_corner.js +14 -0
  243. package/engine/graphics/render/forward_plus/testClusterEquality.js +22 -0
  244. package/engine/graphics/render/layers/RenderLayerUtils.js +8 -5
  245. package/engine/graphics/render/visibility/IncrementalDeltaSet.js +11 -0
  246. package/engine/graphics/render/visibility/hiz/prototypeHiZ.js +2 -2
  247. package/engine/graphics/texture/atlas/AtlasPatch.js +7 -2
  248. package/engine/graphics/texture/atlas/TextureAtlas.js +18 -14
  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/projectSphere.js +1 -1
  258. package/engine/grid/components/GridObstacle.js +3 -10
  259. package/engine/intelligence/behavior/selector/WeightedElement.js +2 -1
  260. package/engine/intelligence/optimization/RandomOptimizer.js +1 -1
  261. package/engine/navigation/ecs/components/Path.js +3 -2
  262. package/engine/navigation/grid/FastBinaryHeap.spec.js +1 -1
  263. package/engine/reference/v2/Reference.js +6 -0
  264. package/engine/sound/ecs/emitter/SoundEmitter.js +2 -1
  265. package/engine/sound/ecs/emitter/SoundTrack.js +2 -1
  266. package/engine/sound/material/concrete/RandomSoundMaterial.js +1 -1
  267. package/engine/ui/notification/notificationGenerator.js +1 -1
  268. package/generation/filtering/numeric/complex/CellFilterAngleToNormal.js +3 -2
  269. package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +1 -1
  270. package/generation/grid/generation/GridTaskExecuteRuleTimes.js +2 -1
  271. package/generation/markers/GridCellActionPlaceMarker.js +13 -1
  272. package/generation/markers/MarkerNode.js +6 -0
  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 +5 -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 +19 -101
  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
@@ -11,95 +11,13 @@ import {
11
11
  InstancedBufferGeometry
12
12
  } from "three";
13
13
  import ObservedValue from "../../../../../core/model/ObservedValue.js";
14
+ import { typedArrayConstructorFromDataType } from "./typedArrayConstructorFromDataType.js";
15
+ import { itemSizeFromAttributeType } from "./itemSizeFromAttributeType.js";
16
+ import { OperationType } from "./OperationType.js";
17
+ import { Operation } from "./Operation.js";
18
+ import { optimizeCommandQueue } from "./optimizeCommandQueue.js";
14
19
 
15
20
 
16
- /**
17
- *
18
- * @enum {number}
19
- */
20
- const ParticleDataType = {
21
- Float32: 0,
22
- Float64: 1,
23
- Uint8: 2
24
- };
25
-
26
- /**
27
- *
28
- * @enum {number}
29
- */
30
- const ParticleAttributeType = {
31
- Scalar: 1,
32
- Vector2: 2,
33
- Vector3: 3,
34
- Vector4: 4
35
- };
36
-
37
- /**
38
- *
39
- * @enum {number}
40
- */
41
- const OperationType = {
42
- Remove: 0,
43
- Add: 1,
44
- WriteAttribute: 2
45
- };
46
-
47
- /**
48
- *
49
- * @param {OperationType} operator
50
- * @param {Array} operands
51
- * @constructor
52
- */
53
- function Operation(operator, operands) {
54
- /**
55
- *
56
- * @type {OperationType}
57
- */
58
- this.operator = operator;
59
- /**
60
- *
61
- * @type {Array}
62
- */
63
- this.operands = operands;
64
- }
65
-
66
- /**
67
- *
68
- * @param {ParticleAttributeType} type
69
- */
70
- export function itemSizeFromAttributeType(type) {
71
- switch (type) {
72
- case ParticleAttributeType.Scalar:
73
- return 1;
74
- case ParticleAttributeType.Vector2:
75
- return 2;
76
- case ParticleAttributeType.Vector3:
77
- return 3;
78
- case ParticleAttributeType.Vector4:
79
- return 4;
80
- default:
81
- throw new Error(`Unsupported attribute type: ${type}`);
82
- }
83
- }
84
-
85
- /**
86
- *
87
- * @param {ParticleDataType} type
88
- * @returns {*}
89
- */
90
- export function typedArrayConstructorFromDataType(type) {
91
- switch (type) {
92
- case ParticleDataType.Float32:
93
- return Float32Array;
94
- case ParticleDataType.Float64:
95
- return Float64Array;
96
- case ParticleDataType.Uint8:
97
- return Uint8Array;
98
- default:
99
- throw new Error(`Unsupported type: ${type}`);
100
- }
101
- }
102
-
103
21
  /**
104
22
  *
105
23
  * @param {ParticleSpecification} spec
@@ -264,161 +182,7 @@ ParticleGroup.prototype.update = function () {
264
182
  };
265
183
 
266
184
  ParticleGroup.prototype.optimizeCommandQueue = function () {
267
- const queue = this.commandQueue;
268
-
269
- /**
270
- * TODO this is pretty slow and should be optimized
271
- * @param {Array.<Operation>} queue
272
- */
273
- function cutRedundantOperations(queue) {
274
- const queueLength = queue.length;
275
- loop_Main: for (let i = queueLength - 1; i >= 0; i--) {
276
- const opA = queue[i];
277
- if (opA.operator === OperationType.Add) {
278
- //nothing to do
279
- continue;
280
- }
281
- const operandsA = opA.operands;
282
- if (opA.operator === OperationType.Remove) {
283
- //hunt and delete operations before this remove that affect deleted references
284
- for (let k = 0, kl = operandsA.length; k < kl; k++) {
285
- const refA = operandsA[k];
286
-
287
- //walk the queue back and remove all previous operations on these references
288
- loop_B: for (let j = i - 1; j >= 0; j--) {
289
- const opB = queue[j];
290
- const operandsB = opB.operands;
291
- const operatorB = opB.operator;
292
- if (operatorB === OperationType.WriteAttribute) {
293
- const refB = operandsB[0];
294
- if (refA === refB) {
295
- //cut operation
296
- queue.splice(j, 1);
297
- i--;
298
- }
299
- } else if (operatorB === OperationType.Add) {
300
- for (let m = 0, ml = operandsB.length; m < ml; m++) {
301
- const refB = operandsB[m];
302
- if (refA === refB) {
303
- let jump = 0;
304
- //delete operation and add operation cancel each other out
305
- if (kl > 1) {
306
- operandsA.splice(k, 1);
307
- kl--;
308
- k--;
309
- } else {
310
- queue.splice(i, 1);
311
- i--;
312
- jump |= 2;
313
- }
314
-
315
- if (ml > 1) {
316
- operandsB.splice(m, 1);
317
- m--;
318
- ml--;
319
- } else {
320
- //cut operation from the queue
321
- queue.splice(j, 1);
322
- i--;
323
- jump |= 1;
324
- }
325
-
326
- if ((jump & 2) !== 0) {
327
- continue loop_Main;
328
- } else if (jump !== 0) {
329
- continue loop_B;
330
- }
331
- }
332
- }
333
- }
334
- }
335
- }
336
- } else if (opA.operator === OperationType.WriteAttribute) {
337
- //find other operations that modify the same attribute, any previous operations are redundant at this point
338
- const refA = operandsA[0];
339
- const attributeIndexA = operandsA[1];
340
- //walk the queue back and remove all previous operations on these references
341
- for (let j = i - 1; j >= 0; j--) {
342
- const opB = queue[j];
343
- if (opB.operator !== OperationType.WriteAttribute) {
344
- //ignore
345
- continue;
346
- }
347
-
348
- const operandsB = opB.operands;
349
- if (operandsB[0] === refA && operandsB[1] === attributeIndexA) {
350
- //operation will be overwritten anyway, cut it
351
- queue.splice(j, 1);
352
- i--;
353
- }
354
- }
355
- }
356
- }
357
- }
358
-
359
- /**
360
- *
361
- * @param {Array.<Operation>} queue
362
- */
363
- function groupOperations(queue) {
364
- let l = queue.length;
365
- for (let i = 0; i < l; i++) {
366
- const opA = queue[i];
367
- const operatorA = opA.operator;
368
- const operandsA = opA.operands;
369
- if (operatorA === OperationType.Add || operatorA === OperationType.Remove) {
370
- for (let j = i + 1; j < l; j++) {
371
- const opB = queue[j];
372
- if (opB.operator === operatorA) {
373
- const operandsB = opB.operands;
374
- const numOperands = operandsB.length;
375
-
376
- for (let k = 0; k < numOperands; k++) {
377
- const refB = operandsB[k];
378
- if (operandsA.indexOf(refB) === -1) {
379
- operandsA.push(refB);
380
- }
381
- }
382
-
383
- queue.splice(j, 1);
384
- j--;
385
- l--;
386
- }
387
- }
388
- }
389
- }
390
- }
391
-
392
- /**
393
- * @param {Array.<Operation>} queue
394
- */
395
- function sortOperations(queue) {
396
- queue.sort(function (a, b) {
397
- const operatorA = a.operator;
398
- const operatorB = b.operator;
399
-
400
- //it's important that Add and Remove operations are sorted to the front of the queue, before Write operations
401
- if (operatorA < operatorB) {
402
- return -1;
403
- } else if (operatorB > operatorA) {
404
- return 1;
405
- }
406
-
407
- if (operatorA !== OperationType.WriteAttribute) {
408
- return 0;
409
- }
410
-
411
- const attributeIndexA = a.operands[1];
412
- const attributeIndexB = b.operands[1];
413
-
414
- //sort write operations by buffer index
415
- return attributeIndexB - attributeIndexA;
416
- });
417
- }
418
-
419
- cutRedundantOperations(queue);
420
- groupOperations(queue);
421
- sortOperations(queue);
185
+ optimizeCommandQueue(this.commandQueue);
422
186
  };
423
187
 
424
188
  /**
@@ -869,7 +633,5 @@ ParticleGroup.prototype.setSize = function (newSize) {
869
633
  };
870
634
 
871
635
  export {
872
- ParticleGroup,
873
- ParticleAttributeType,
874
- ParticleDataType
636
+ ParticleGroup
875
637
  };
@@ -1,6 +1,8 @@
1
- import { ParticleAttributeType, ParticleDataType, ParticleGroup, } from "./ParticleGroup.js";
1
+ import { ParticleGroup, } from "./ParticleGroup.js";
2
2
  import { ParticleSpecification } from "./ParticleSpecification.js";
3
3
  import { ParticleAttribute } from "./ParticleAttribute.js";
4
+ import { ParticleDataType } from "./ParticleDataType.js";
5
+ import { ParticleAttributeType } from "./ParticleAttributeType.js";
4
6
 
5
7
  test("After calling grow(1) size is increased by 1", () => {
6
8
  const spec = new ParticleSpecification();
@@ -1,9 +1,7 @@
1
- import { ParticleGroup } from "./ParticleGroup.js";
2
-
3
-
4
1
  /**
5
2
  *
6
3
  * @constructor
4
+ * @deprecated use {@link VertexDataSpec} instead
7
5
  */
8
6
  export function ParticleSpecification() {
9
7
  /**
@@ -13,6 +11,25 @@ export function ParticleSpecification() {
13
11
  this.attributes = [];
14
12
  }
15
13
 
14
+ /**
15
+ *
16
+ * @param {string} name
17
+ * @return {undefined|ParticleAttribute}
18
+ */
19
+ ParticleSpecification.prototype.getByName = function (name) {
20
+ const attributes = this.attributes;
21
+ const n = attributes.length;
22
+ for (let i = 0; i < n; i++) {
23
+ const attribute = attributes[i];
24
+
25
+ if (attribute.name === name) {
26
+ return attribute;
27
+ }
28
+ }
29
+
30
+ return undefined;
31
+ };
32
+
16
33
  /**
17
34
  *
18
35
  * @param {ParticleAttribute} attribute
@@ -20,9 +37,7 @@ export function ParticleSpecification() {
20
37
  */
21
38
  ParticleSpecification.prototype.add = function (attribute) {
22
39
  //check uniqueness of name
23
- if (this.attributes.some(function (a) {
24
- return a.name === attribute.name;
25
- })) {
40
+ if (this.getByName(attribute.name) !== undefined) {
26
41
  throw new Error(`Attribute named '${attribute.name}' already exists`);
27
42
  }
28
43
 
@@ -31,11 +46,3 @@ ParticleSpecification.prototype.add = function (attribute) {
31
46
  //for chaining, return self
32
47
  return this;
33
48
  };
34
-
35
- /**
36
- *
37
- * @return {ParticleGroup}
38
- */
39
- ParticleSpecification.prototype.build = function () {
40
- return new ParticleGroup(this);
41
- };
@@ -0,0 +1,20 @@
1
+ import { ParticleAttributeType } from "./ParticleAttributeType.js";
2
+
3
+ /**
4
+ *
5
+ * @param {ParticleAttributeType} type
6
+ */
7
+ export function itemSizeFromAttributeType(type) {
8
+ switch (type) {
9
+ case ParticleAttributeType.Scalar:
10
+ return 1;
11
+ case ParticleAttributeType.Vector2:
12
+ return 2;
13
+ case ParticleAttributeType.Vector3:
14
+ return 3;
15
+ case ParticleAttributeType.Vector4:
16
+ return 4;
17
+ default:
18
+ throw new Error(`Unsupported attribute type: ${type}`);
19
+ }
20
+ }
@@ -0,0 +1,162 @@
1
+ import { OperationType } from "./OperationType.js";
2
+
3
+ /**
4
+ *
5
+ * @param {Operation[]} queue
6
+ */
7
+ export function optimizeCommandQueue(queue) {
8
+
9
+ /**
10
+ * TODO this is pretty slow and should be optimized
11
+ * @param {Array.<Operation>} queue
12
+ */
13
+ function cutRedundantOperations(queue) {
14
+ const queueLength = queue.length;
15
+ loop_Main: for (let i = queueLength - 1; i >= 0; i--) {
16
+ const opA = queue[i];
17
+ if (opA.operator === OperationType.Add) {
18
+ //nothing to do
19
+ continue;
20
+ }
21
+ const operandsA = opA.operands;
22
+ if (opA.operator === OperationType.Remove) {
23
+ //hunt and delete operations before this remove that affect deleted references
24
+ for (let k = 0, kl = operandsA.length; k < kl; k++) {
25
+ const refA = operandsA[k];
26
+
27
+ //walk the queue back and remove all previous operations on these references
28
+ loop_B: for (let j = i - 1; j >= 0; j--) {
29
+ const opB = queue[j];
30
+ const operandsB = opB.operands;
31
+ const operatorB = opB.operator;
32
+ if (operatorB === OperationType.WriteAttribute) {
33
+ const refB = operandsB[0];
34
+ if (refA === refB) {
35
+ //cut operation
36
+ queue.splice(j, 1);
37
+ i--;
38
+ }
39
+ } else if (operatorB === OperationType.Add) {
40
+ for (let m = 0, ml = operandsB.length; m < ml; m++) {
41
+ const refB = operandsB[m];
42
+ if (refA === refB) {
43
+ let jump = 0;
44
+ //delete operation and add operation cancel each other out
45
+ if (kl > 1) {
46
+ operandsA.splice(k, 1);
47
+ kl--;
48
+ k--;
49
+ } else {
50
+ queue.splice(i, 1);
51
+ i--;
52
+ jump |= 2;
53
+ }
54
+
55
+ if (ml > 1) {
56
+ operandsB.splice(m, 1);
57
+ m--;
58
+ ml--;
59
+ } else {
60
+ //cut operation from the queue
61
+ queue.splice(j, 1);
62
+ i--;
63
+ jump |= 1;
64
+ }
65
+
66
+ if ((jump & 2) !== 0) {
67
+ continue loop_Main;
68
+ } else if (jump !== 0) {
69
+ continue loop_B;
70
+ }
71
+ }
72
+ }
73
+ }
74
+ }
75
+ }
76
+ } else if (opA.operator === OperationType.WriteAttribute) {
77
+ //find other operations that modify the same attribute, any previous operations are redundant at this point
78
+ const refA = operandsA[0];
79
+ const attributeIndexA = operandsA[1];
80
+ //walk the queue back and remove all previous operations on these references
81
+ for (let j = i - 1; j >= 0; j--) {
82
+ const opB = queue[j];
83
+ if (opB.operator !== OperationType.WriteAttribute) {
84
+ //ignore
85
+ continue;
86
+ }
87
+
88
+ const operandsB = opB.operands;
89
+ if (operandsB[0] === refA && operandsB[1] === attributeIndexA) {
90
+ //operation will be overwritten anyway, cut it
91
+ queue.splice(j, 1);
92
+ i--;
93
+ }
94
+ }
95
+ }
96
+ }
97
+ }
98
+
99
+ /**
100
+ *
101
+ * @param {Array.<Operation>} queue
102
+ */
103
+ function groupOperations(queue) {
104
+ let l = queue.length;
105
+ for (let i = 0; i < l; i++) {
106
+ const opA = queue[i];
107
+ const operatorA = opA.operator;
108
+ const operandsA = opA.operands;
109
+ if (operatorA === OperationType.Add || operatorA === OperationType.Remove) {
110
+ for (let j = i + 1; j < l; j++) {
111
+ const opB = queue[j];
112
+ if (opB.operator === operatorA) {
113
+ const operandsB = opB.operands;
114
+ const numOperands = operandsB.length;
115
+
116
+ for (let k = 0; k < numOperands; k++) {
117
+ const refB = operandsB[k];
118
+ if (operandsA.indexOf(refB) === -1) {
119
+ operandsA.push(refB);
120
+ }
121
+ }
122
+
123
+ queue.splice(j, 1);
124
+ j--;
125
+ l--;
126
+ }
127
+ }
128
+ }
129
+ }
130
+ }
131
+
132
+ /**
133
+ * @param {Array.<Operation>} queue
134
+ */
135
+ function sortOperations(queue) {
136
+ queue.sort(function (a, b) {
137
+ const operatorA = a.operator;
138
+ const operatorB = b.operator;
139
+
140
+ //it's important that Add and Remove operations are sorted to the front of the queue, before Write operations
141
+ if (operatorA < operatorB) {
142
+ return -1;
143
+ } else if (operatorB > operatorA) {
144
+ return 1;
145
+ }
146
+
147
+ if (operatorA !== OperationType.WriteAttribute) {
148
+ return 0;
149
+ }
150
+
151
+ const attributeIndexA = a.operands[1];
152
+ const attributeIndexB = b.operands[1];
153
+
154
+ //sort write operations by buffer index
155
+ return attributeIndexB - attributeIndexA;
156
+ });
157
+ }
158
+
159
+ cutRedundantOperations(queue);
160
+ groupOperations(queue);
161
+ sortOperations(queue);
162
+ }
@@ -0,0 +1,19 @@
1
+ import { ParticleDataType } from "./ParticleDataType.js";
2
+
3
+ /**
4
+ *
5
+ * @param {ParticleDataType} type
6
+ * @returns {*}
7
+ */
8
+ export function typedArrayConstructorFromDataType(type) {
9
+ switch (type) {
10
+ case ParticleDataType.Float32:
11
+ return Float32Array;
12
+ case ParticleDataType.Float64:
13
+ return Float64Array;
14
+ case ParticleDataType.Uint8:
15
+ return Uint8Array;
16
+ default:
17
+ throw new Error(`Unsupported type: ${type}`);
18
+ }
19
+ }
@@ -108,7 +108,7 @@ function makeConfig(engine) {
108
108
  new ClingToTerrainSystem(),
109
109
  new TerrainSystem(graphics, assetManager),
110
110
  new WaterSystem(graphics),
111
- new Trail2DSystem(graphics, assetManager),
111
+ new Trail2DSystem(engine),
112
112
  new Foliage2System(assetManager, graphics),
113
113
  new ViewportPositionSystem(graphics.viewport.size),
114
114
  new GridPosition2TransformSystem(),
@@ -326,7 +326,7 @@ function main(engine) {
326
326
  position: {
327
327
  x: 60 + i * 10,
328
328
  y: 0,
329
- z: 30 + j*10
329
+ z: 30 + j * 10
330
330
  },
331
331
  scale: {
332
332
  x: 1,
@@ -50,7 +50,7 @@ export class AmbientOcclusionPostProcessEffect extends EnginePlugin {
50
50
  * @type {boolean}
51
51
  * @private
52
52
  */
53
- this.__use_normals = true;
53
+ this.__use_normals = false;
54
54
 
55
55
  /**
56
56
  * Resolution scale at which AO is to be rendered. Higher scale will lead to sharper and better looking results
@@ -1,6 +1,7 @@
1
- import { computeHashFloat, computeHashIntegerArray } from "../../../../../../core/math/MathUtils.js";
2
1
  import { ProgramValueSlotParameterType } from "./ProgramValueSlotParameterType.js";
3
2
  import { computeStringHash } from "../../../../../../core/primitives/strings/computeStringHash.js";
3
+ import { computeHashIntegerArray } from "../../../../../../core/collection/array/computeHashIntegerArray.js";
4
+ import { computeHashFloat } from "../../../../../../core/math/hash/computeHashFloat.js";
4
5
 
5
6
  /**
6
7
  *
@@ -1,4 +1,4 @@
1
- import { computeHashIntegerArray } from "../../../../../../core/math/MathUtils.js";
1
+ import { computeHashIntegerArray } from "../../../../../../core/collection/array/computeHashIntegerArray.js";
2
2
 
3
3
  export class ProgramValueSlotParameterSet {
4
4
  constructor() {