@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
@@ -1,9 +1,10 @@
1
- import { Mesh, Quaternion } from "three";
1
+ import { Line, LineSegments, Mesh } from "three";
2
2
  import { updateNodeByMatrix4AndBBB } from "../mesh/updateNodeByTransformAndBBB.js";
3
3
  import { LeafNode } from "../../../../core/bvh2/LeafNode.js";
4
4
  import { AABB3 } from "../../../../core/bvh2/aabb3/AABB3.js";
5
+ import { DrawMode } from "./DrawMode.js";
6
+ import { applyTransformToThreeObject } from "../mesh/applyTransformToThreeObject.js";
5
7
 
6
- const _q = new Quaternion();
7
8
  const _aabb3 = new AABB3();
8
9
 
9
10
  export class ShadedGeometry {
@@ -19,6 +20,12 @@ export class ShadedGeometry {
19
20
  */
20
21
  this.material = null;
21
22
 
23
+ /**
24
+ *
25
+ * @type {DrawMode|number}
26
+ */
27
+ this.mode = DrawMode.Triangles;
28
+
22
29
  /**
23
30
  *
24
31
  * @type {THREE.Object3D|null}
@@ -34,6 +41,19 @@ export class ShadedGeometry {
34
41
  this.__bvh_leaf = new LeafNode(this, 0, 0, 0, 0, 0, 0);
35
42
  }
36
43
 
44
+ __build_object() {
45
+ const mode = this.mode;
46
+ if (mode === DrawMode.Triangles) {
47
+ this.__cached_object = new Mesh(this.geometry, this.material);
48
+ } else if (mode === DrawMode.Lines) {
49
+ this.__cached_object = new Line(this.geometry, this.material);
50
+ } else if (mode === DrawMode.LineSegments) {
51
+ this.__cached_object = new LineSegments(this.geometry, this.material);
52
+ } else {
53
+ throw new Error(`Unsupported draw mode '${mode}'`);
54
+ }
55
+ }
56
+
37
57
  get bvh() {
38
58
  return this.__bvh_leaf;
39
59
  }
@@ -42,10 +62,12 @@ export class ShadedGeometry {
42
62
  *
43
63
  * @param {THREE.BufferGeometry} geometry
44
64
  * @param {THREE.Material} material
65
+ * @param draw_mode
45
66
  */
46
- from(geometry, material) {
67
+ from(geometry, material, draw_mode = DrawMode.Triangles) {
47
68
  this.geometry = geometry;
48
69
  this.material = material;
70
+ this.mode = draw_mode;
49
71
 
50
72
  // ensure that geometry has a bounding box
51
73
  if (geometry.boundingBox === null) {
@@ -53,7 +75,7 @@ export class ShadedGeometry {
53
75
  }
54
76
 
55
77
  if (this.__cached_object === null) {
56
- this.__cached_object = new Mesh(geometry, material);
78
+ this.__build_object();
57
79
  } else {
58
80
  this.__cached_object.material = material;
59
81
  this.__cached_object.geometry = geometry;
@@ -64,12 +86,13 @@ export class ShadedGeometry {
64
86
  *
65
87
  * @param geometry
66
88
  * @param material
89
+ * @param mode
67
90
  * @return {ShadedGeometry}
68
91
  */
69
- static from(geometry, material) {
92
+ static from(geometry, material, mode) {
70
93
  const r = new ShadedGeometry();
71
94
 
72
- r.from(geometry, material);
95
+ r.from(geometry, material, mode);
73
96
 
74
97
  return r;
75
98
  }
@@ -77,6 +100,7 @@ export class ShadedGeometry {
77
100
  updateTransform() {
78
101
  // update matrix
79
102
  this.__cached_object.updateMatrix();
103
+ this.__cached_object.updateMatrixWorld();
80
104
 
81
105
  // update bounds
82
106
 
@@ -116,9 +140,7 @@ export class ShadedGeometry {
116
140
  */
117
141
  setRotationByComponents(x, y, z, w) {
118
142
 
119
- _q.set(x, y, z, w);
120
-
121
- this.__cached_object.rotation.setFromQuaternion(_q);
143
+ this.__cached_object.quaternion.set(x, y, z, w);
122
144
 
123
145
  this.updateTransform();
124
146
  }
@@ -140,15 +162,7 @@ export class ShadedGeometry {
140
162
  * @param {Transform} t
141
163
  */
142
164
  applyTransform(t) {
143
- // TODO this can be optimized quite a lot
144
- const position = t.position;
145
- this.setPositionByComponents(position.x, position.y, position.z);
146
-
147
- const rotation = t.rotation;
148
- this.setRotationByComponents(rotation.x, rotation.y, rotation.z, rotation.w);
149
-
150
- const scale = t.scale;
151
- this.setScaleByComponents(scale.x, scale.y, scale.z);
165
+ applyTransformToThreeObject(this.__cached_object, t);
152
166
 
153
167
  this.updateTransform();
154
168
  }
@@ -0,0 +1,6 @@
1
+ import {System} from "../../../ecs/System";
2
+ import Engine from "../../../Engine";
3
+
4
+ export class ShadedGeometrySystem extends System {
5
+ constructor(engine: Engine)
6
+ }
@@ -106,11 +106,11 @@ function makeConfig(engine) {
106
106
  new TopDownCameraControllerSystem(graphics),
107
107
  new TopDownCameraLanderSystem(),
108
108
  new CameraSystem(graphics.scene, graphics),
109
- new MeshSystem(graphics, assetManager),
109
+ new MeshSystem(engine),
110
110
  new ClingToTerrainSystem(),
111
111
  new TerrainSystem(graphics, assetManager),
112
112
  new WaterSystem(graphics),
113
- new Trail2DSystem(graphics, assetManager),
113
+ new Trail2DSystem(engine),
114
114
  new Foliage2System(assetManager, graphics),
115
115
  new ViewportPositionSystem(graphics.viewport.size),
116
116
  new GridPosition2TransformSystem(),
@@ -179,11 +179,11 @@ function catmullRom(points) {
179
179
  cv.link();
180
180
 
181
181
  cv.css({
182
- position: "absolute",
183
- left: 0,
184
- right: 0,
185
- zIndex: 99999
186
- });
182
+ position: "absolute",
183
+ left: 0,
184
+ right: 0,
185
+ zIndex: 99999
186
+ });
187
187
 
188
188
  const sample = [];
189
189
 
@@ -216,92 +216,92 @@ function sample_style_entity() {
216
216
  const style = new EntityPathStyle();
217
217
  style.spacing = 0.6;
218
218
  style.marker_start = EntityPathMarkerDefinition.from({
219
- blueprint: EntityBlueprint.from([
220
- Transform.fromJSON({}),
221
- Mesh.fromJSON({
222
- url: "data/models/arrow-symbols/arrow4/model-green.gltf",
223
- castShadow: true,
224
- receiveShadow: true
225
- })
226
- ]),
227
- transform: Transform.fromJSON({
228
- scale: {
229
- x: 0.3,
230
- y: 0.3,
231
- z: 0.3
232
- },
233
- rotation: {
234
- x: 0.5,
235
- y: -0.5,
236
- z: 0.5,
237
- w: 0.5
238
- },
239
- position: {
240
- x: 0,
241
- y: 1,
242
- z: 0
243
- }
244
- })
245
- });
219
+ blueprint: EntityBlueprint.from([
220
+ Transform.fromJSON({}),
221
+ Mesh.fromJSON({
222
+ url: "data/models/arrow-symbols/arrow4/model-green.gltf",
223
+ castShadow: true,
224
+ receiveShadow: true
225
+ })
226
+ ]),
227
+ transform: Transform.fromJSON({
228
+ scale: {
229
+ x: 0.3,
230
+ y: 0.3,
231
+ z: 0.3
232
+ },
233
+ rotation: {
234
+ x: 0.5,
235
+ y: -0.5,
236
+ z: 0.5,
237
+ w: 0.5
238
+ },
239
+ position: {
240
+ x: 0,
241
+ y: 1,
242
+ z: 0
243
+ }
244
+ })
245
+ });
246
246
  style.marker_end = EntityPathMarkerDefinition.from({
247
- blueprint: EntityBlueprint.from([
248
- Transform.fromJSON({}),
249
- Mesh.fromJSON({
250
- url: "data/models/arrow-symbols/arrow4/model-red.gltf",
251
- castShadow: true,
252
- receiveShadow: true
253
- })
254
- ]),
255
- transform: Transform.fromJSON({
256
- scale: {
257
- x: 0.3,
258
- y: 0.3,
259
- z: 0.3
260
- },
261
- rotation: {
262
- x: 0.5,
263
- y: -0.5,
264
- z: 0.5,
265
- w: 0.5
266
- },
267
- position: {
268
- x: 0,
269
- y: 1,
270
- z: 0
271
- }
272
- })
273
- });
247
+ blueprint: EntityBlueprint.from([
248
+ Transform.fromJSON({}),
249
+ Mesh.fromJSON({
250
+ url: "data/models/arrow-symbols/arrow4/model-red.gltf",
251
+ castShadow: true,
252
+ receiveShadow: true
253
+ })
254
+ ]),
255
+ transform: Transform.fromJSON({
256
+ scale: {
257
+ x: 0.3,
258
+ y: 0.3,
259
+ z: 0.3
260
+ },
261
+ rotation: {
262
+ x: 0.5,
263
+ y: -0.5,
264
+ z: 0.5,
265
+ w: 0.5
266
+ },
267
+ position: {
268
+ x: 0,
269
+ y: 1,
270
+ z: 0
271
+ }
272
+ })
273
+ });
274
274
  style.marker_main = EntityPathMarkerDefinition.from({
275
- blueprint: EntityBlueprint.from([
276
- Transform.fromJSON({}),
277
- Mesh.fromJSON({
278
- url: "data/models/Barel-Roll Droid/handpainted.gltf",
279
- castShadow: true,
280
- receiveShadow: true
281
- }),
282
- Animation.fromJSON({
283
- clips: [
284
- {
285
- name: "fly",
286
- repeatCount: Infinity
287
- }
288
- ]
289
- }),
290
- Highlight.fromOne(1, 0, 0, 1)
291
- ]),
292
- transform: Transform.fromJSON({
293
- scale: {
294
- x: 0.2,
295
- y: 0.2,
296
- z: 0.2
297
- },
298
- position: {
299
- x: 0,
300
- y: 1,
301
- z: 0
302
- }
303
- })
304
- });
275
+ blueprint: EntityBlueprint.from([
276
+ Transform.fromJSON({}),
277
+ Mesh.fromJSON({
278
+ url: "data/models/Barel-Roll Droid/handpainted.gltf",
279
+ castShadow: true,
280
+ receiveShadow: true
281
+ }),
282
+ Animation.fromJSON({
283
+ clips: [
284
+ {
285
+ name: "fly",
286
+ repeatCount: Infinity
287
+ }
288
+ ]
289
+ }),
290
+ Highlight.fromOne(1, 0, 0, 1)
291
+ ]),
292
+ transform: Transform.fromJSON({
293
+ scale: {
294
+ x: 0.2,
295
+ y: 0.2,
296
+ z: 0.2
297
+ },
298
+ position: {
299
+ x: 0,
300
+ y: 1,
301
+ z: 0
302
+ }
303
+ })
304
+ });
305
305
 
306
306
  return style;
307
307
  }
@@ -337,13 +337,13 @@ function main(engine) {
337
337
  // ], 50));
338
338
 
339
339
  _p.setPositionsFromVectorArray([
340
- new Vector3(3, 1, 1),
341
- new Vector3(3, 1, 3),
342
- new Vector3(7, 1, 3),
343
- new Vector3(7, 1, 7),
344
- new Vector3(3, 1, 7),
345
- new Vector3(3, 1, 8),
346
- ]);
340
+ new Vector3(3, 1, 1),
341
+ new Vector3(3, 1, 3),
342
+ new Vector3(7, 1, 3),
343
+ new Vector3(7, 1, 7),
344
+ new Vector3(3, 1, 7),
345
+ new Vector3(3, 1, 8),
346
+ ]);
347
347
 
348
348
 
349
349
  const trailPathStyle = new RibbonPathStyle();
@@ -5,6 +5,7 @@
5
5
 
6
6
  import Vector3 from "../../../../core/geom/Vector3.js";
7
7
  import Vector4 from "../../../../core/geom/Vector4.js";
8
+ import { RibbonXMaterialSpec } from "../../trail/x/RibbonXMaterialSpec.js";
8
9
 
9
10
  /**
10
11
  * @readonly
@@ -24,8 +25,6 @@ class Trail2D {
24
25
  */
25
26
  this.maxAge = 5;
26
27
 
27
- this.textureURL = null;
28
-
29
28
  /**
30
29
  * Trail width
31
30
  * @type {number}
@@ -65,9 +64,9 @@ class Trail2D {
65
64
 
66
65
  /**
67
66
  * transient
68
- * @type {Material|null}
67
+ * @type {RibbonXMaterialSpec}
69
68
  */
70
- this.material = null;
69
+ this.material = new RibbonXMaterialSpec();
71
70
 
72
71
  /**
73
72
  * transient
@@ -82,6 +81,20 @@ class Trail2D {
82
81
  this.flags = Trail2DFlags.Spawning | Trail2DFlags.Aging;
83
82
  }
84
83
 
84
+ dispose() {
85
+ if (this.ribbon !== null) {
86
+ this.ribbon.dispose();
87
+ }
88
+ }
89
+
90
+ get textureURL() {
91
+ return this.material.diffuse;
92
+ }
93
+
94
+ set textureURL(v) {
95
+ this.material.diffuse = v;
96
+ }
97
+
85
98
  /**
86
99
  *
87
100
  * @param {number|Trail2DFlags} flag
@@ -1,7 +1,6 @@
1
1
  import {System} from "../../../ecs/System";
2
- import {GraphicsEngine} from "../../GraphicsEngine";
3
- import {AssetManager} from "../../../asset/AssetManager";
2
+ import Engine from "../../../Engine";
4
3
 
5
4
  export default class Trail2DSystem extends System {
6
- constructor(graphics: GraphicsEngine, assetManager: AssetManager)
5
+ constructor(engine: Engine)
7
6
  }
@@ -8,25 +8,21 @@ import { max2 } from "../../../../core/math/max2.js";
8
8
  import { System } from '../../../ecs/System.js';
9
9
  import { Transform } from '../../../ecs/transform/Transform.js';
10
10
  import Vector3 from '../../../../core/geom/Vector3.js';
11
- import { computeHashFloat, computeHashIntegerArray } from '../../../../core/math/MathUtils.js';
12
11
 
13
12
  import Trail2D, { Trail2DFlags } from './Trail2D.js';
14
- import { ClampToEdgeWrapping, DoubleSide, LinearFilter, TextureLoader } from 'three';
15
13
 
16
14
  import { LeafNode } from '../../../../core/bvh2/LeafNode.js';
17
15
  import ThreeFactory from '../../three/ThreeFactory.js';
18
16
  import { GraphicsEngine } from "../../GraphicsEngine.js";
19
- import { ReferenceManager } from "../../../reference/v1/ReferenceManager.js";
20
- import { AssetManager } from "../../../asset/AssetManager.js";
21
- import { Cache } from "../../../../core/cache/Cache.js";
22
17
  import { RibbonXFixedPhysicsSimulator } from "../../trail/x/simulator/RibbonXFixedPhysicsSimulator.js";
23
18
  import { RibbonX } from "../../trail/x/RibbonX.js";
24
19
  import {
25
20
  RIBBON_ATTRIBUTE_ADDRESS_AGE,
26
21
  RIBBON_ATTRIBUTE_ADDRESS_UV_OFFSET
27
22
  } from "../../trail/x/ribbon_attributes_spec.js";
28
- import { RibbonMaterialX } from "../../trail/x/RibbonMaterialX.js";
29
- import { computeStringHash } from "../../../../core/primitives/strings/computeStringHash.js";
23
+ import { Reference } from "../../../reference/v2/Reference.js";
24
+ import { RibbonXPlugin } from "../../trail/x/RibbonXPlugin.js";
25
+ import { assert } from "../../../../core/assert.js";
30
26
 
31
27
  const v3Temp1 = new Vector3();
32
28
 
@@ -34,69 +30,32 @@ const v3_array = [];
34
30
 
35
31
  class Trail2DSystem extends System {
36
32
  /**
37
- *
38
- * @param {GraphicsEngine} graphics
39
- * @param {AssetManager} assetManager
33
+ * @param {Engine} engine
40
34
  * @constructor
41
35
  */
42
- constructor(graphics, assetManager) {
36
+ constructor(engine) {
43
37
  super();
44
38
 
45
- this.dependencies = [Trail2D, Transform];
46
-
47
- if (!(graphics instanceof GraphicsEngine)) {
48
- throw new Error("'renderer' must be of type GraphicsEngine");
49
- }
50
-
51
- if (!(assetManager instanceof AssetManager)) {
52
- throw new Error("'assetManager' must be of type AssetManager");
53
- }
39
+ assert.defined(engine, 'engine');
40
+ assert.notNull(engine, 'engine');
41
+ assert.equal(engine.isEngine, true, 'engine.isEngine !== true');
54
42
 
55
- /**
56
- *
57
- * @type {GraphicsEngine}
58
- */
59
- this.graphics = graphics;
43
+ this.dependencies = [Trail2D, Transform];
60
44
 
61
45
  /**
62
46
  *
63
- * @type {AssetManager}
47
+ * @type {Engine}
48
+ * @private
64
49
  */
65
- this.assetManager = assetManager;
66
-
67
- function constructTexture(url) {
68
- const assetPromise = assetManager.promise(url, "texture");
69
-
70
- const texturePromise = assetPromise
71
- .then(function (asset) {
72
-
73
- const texture = asset.create();
74
-
75
- texture.wrapS = ClampToEdgeWrapping;
76
- texture.wrapT = ClampToEdgeWrapping;
77
-
78
- texture.magFilter = LinearFilter;
79
- texture.minFilter = LinearFilter;
50
+ this.__engine = engine;
80
51
 
81
- return texture;
82
- });
83
-
84
- return texturePromise;
85
- }
86
-
87
- function destructTexture(url, texturePromise) {
88
- texturePromise.then(function (t) {
89
- //release used resourced
90
- t.dispose();
91
- });
92
- }
52
+ const graphics = engine.graphics;
93
53
 
94
54
  /**
95
55
  *
96
- * @type {ReferenceManager<string,Promise.<THREE.Texture>>}
56
+ * @type {GraphicsEngine}
97
57
  */
98
- this.textures = new ReferenceManager(constructTexture, destructTexture);
99
-
58
+ this.graphics = graphics;
100
59
 
101
60
  /**
102
61
  *
@@ -117,28 +76,11 @@ class Trail2DSystem extends System {
117
76
  this.simulator = new RibbonXFixedPhysicsSimulator();
118
77
 
119
78
  /**
79
+ *
80
+ * @type {Reference<RibbonXPlugin>}
120
81
  * @private
121
- * @readonly
122
- * @type {Cache<Trail2D, Material>}
123
82
  */
124
- this.materialCache = new Cache({
125
- maxWeight: 100,
126
- keyHashFunction(trail) {
127
- return computeHashIntegerArray(
128
- computeStringHash(trail.textureURL),
129
- computeHashFloat(trail.width),
130
- computeHashFloat(trail.maxAge),
131
- trail.color.hash()
132
- );
133
- },
134
- keyEqualityFunction(a, b) {
135
- return a.textureURL === b.textureURL
136
- && a.width === b.width
137
- && a.maxAge === b.maxAge
138
- && a.color.equals(b.color)
139
- ;
140
- }
141
- });
83
+ this.__ribbon_plugin = Reference.NULL;
142
84
 
143
85
 
144
86
  /**
@@ -149,7 +91,7 @@ class Trail2DSystem extends System {
149
91
  this.__timeDelta = 0;
150
92
  }
151
93
 
152
- startup(entityManager, readyCallback, errorCallback) {
94
+ async startup(entityManager, readyCallback, errorCallback) {
153
95
  this.entityManager = entityManager;
154
96
 
155
97
  this.renderLayer = this.graphics.layers.create('trail-2d-system');
@@ -161,19 +103,7 @@ class Trail2DSystem extends System {
161
103
 
162
104
  this.bvh = this.renderLayer.bvh;
163
105
 
164
-
165
- this.graphics.viewport.size.onChanged.add((x, y) => {
166
- const ecd = this.entityManager.dataset;
167
-
168
- if (ecd === null) {
169
- // no dataset attached
170
- return;
171
- }
172
-
173
- ecd.traverseComponents(Trail2D, trail => {
174
- trail.material.uniforms.resolution.value.set(x, y);
175
- });
176
- });
106
+ this.__ribbon_plugin = await this.__engine.plugins.acquire(RibbonXPlugin);
177
107
 
178
108
  readyCallback();
179
109
  }
@@ -181,32 +111,9 @@ class Trail2DSystem extends System {
181
111
  shutdown(entityManager, readyCallback, errorCallback) {
182
112
  this.graphics.layers.remove(this.renderLayer);
183
113
 
184
- readyCallback();
185
- }
186
-
187
- /**
188
- *
189
- * @param {Trail2D} trail
190
- * @returns {Material}
191
- */
192
- obtainMaterial(trail) {
193
-
194
- const material = new RibbonMaterialX({
195
- transparent: true,
196
- depthWrite: false,
197
- wireframe: false,
198
- side: DoubleSide,
199
- defines: {
200
- USE_TEXTURE: false
201
- }
202
- });
203
-
204
- if (trail.textureURL !== null) {
205
- material.uniforms.uDiffuse.value = new TextureLoader().load(trail.textureURL);
206
- material.defines.USE_TEXTURE = true;
207
- }
114
+ this.__ribbon_plugin.release();
208
115
 
209
- return material;
116
+ readyCallback();
210
117
  }
211
118
 
212
119
  /**
@@ -231,9 +138,9 @@ class Trail2DSystem extends System {
231
138
 
232
139
  const geometry = ribbon.getGeometry();
233
140
 
234
- const material = this.obtainMaterial(trail);
141
+ const ribbons = this.__ribbon_plugin.getValue();
235
142
 
236
- material.uniforms.resolution.value.copy(this.graphics.viewport.size);
143
+ const material = ribbons.obtain_material_x(trail.material);
237
144
 
238
145
  const mesh = ThreeFactory.createMesh(geometry, material);
239
146
 
@@ -274,12 +181,21 @@ class Trail2DSystem extends System {
274
181
  );
275
182
 
276
183
  trail.bvhLeaf = leafNode;
277
- trail.material = material;
278
184
 
279
185
  this.bvh.insertNode(leafNode);
280
186
  }
281
187
 
188
+ /**
189
+ *
190
+ * @param {Trail2D} component
191
+ * @param {Transform} transform
192
+ * @param {number} entity
193
+ */
282
194
  unlink(component, transform, entity) {
195
+
196
+ // release resources
197
+ component.dispose();
198
+
283
199
  component.bvhLeaf.disconnect();
284
200
  }
285
201