@woosh/meep-engine 3.43.0 → 3.45.0
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.
- package/build/bundle-worker-terrain.js +1 -1
- package/editor/prototypeEditorShell.d.ts.map +1 -1
- package/editor/prototypeEditorShell.js +4 -2
- package/package.json +1 -1
- package/src/core/collection/array/array_sort_insertion_ascending.d.ts +19 -0
- package/src/core/collection/array/array_sort_insertion_ascending.d.ts.map +1 -0
- package/src/core/collection/array/array_sort_insertion_ascending.js +31 -0
- package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.d.ts +27 -0
- package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.d.ts.map +1 -0
- package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.js +39 -0
- package/src/core/geom/3d/aabb/aabb3_from_v3_array.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_from_v3_array.js +4 -1
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts +2 -2
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.js +1 -1
- package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.d.ts +21 -0
- package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.d.ts.map +1 -0
- package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.js +36 -0
- package/src/core/geom/3d/pose/pose3_apply_point_array.d.ts +25 -0
- package/src/core/geom/3d/pose/pose3_apply_point_array.d.ts.map +1 -0
- package/src/core/geom/3d/pose/pose3_apply_point_array.js +40 -0
- package/src/core/geom/3d/pose/pose3_compose_array.d.ts +28 -0
- package/src/core/geom/3d/pose/pose3_compose_array.d.ts.map +1 -0
- package/src/core/geom/3d/pose/pose3_compose_array.js +41 -0
- package/src/core/geom/3d/pose/pose3_to_local_array.d.ts +29 -0
- package/src/core/geom/3d/pose/pose3_to_local_array.d.ts.map +1 -0
- package/src/core/geom/3d/pose/pose3_to_local_array.js +42 -0
- package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.d.ts +28 -0
- package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.js +66 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.d.ts +22 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.js +30 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.d.ts +23 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.js +31 -0
- package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.d.ts +26 -0
- package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.d.ts.map +1 -0
- package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.js +46 -0
- package/src/core/geom/vec3/v3_distance_array.d.ts +11 -0
- package/src/core/geom/vec3/v3_distance_array.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_distance_array.js +19 -0
- package/src/core/geom/vec3/v3_normalize_array_checked.d.ts +23 -0
- package/src/core/geom/vec3/v3_normalize_array_checked.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_normalize_array_checked.js +49 -0
- package/src/core/geom/vec3/v3_reject_array.d.ts +15 -0
- package/src/core/geom/vec3/v3_reject_array.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_reject_array.js +32 -0
- package/src/core/graph/csr/csr_build_incidence.d.ts +26 -0
- package/src/core/graph/csr/csr_build_incidence.d.ts.map +1 -0
- package/src/core/graph/csr/csr_build_incidence.js +71 -0
- package/src/core/graph/csr/csr_graph_color_greedy.d.ts +25 -0
- package/src/core/graph/csr/csr_graph_color_greedy.d.ts.map +1 -0
- package/src/core/graph/csr/csr_graph_color_greedy.js +83 -0
- package/src/core/graph/csr/csr_graph_validate_coloring.d.ts +15 -0
- package/src/core/graph/csr/csr_graph_validate_coloring.d.ts.map +1 -0
- package/src/core/graph/csr/csr_graph_validate_coloring.js +33 -0
- package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.d.ts +26 -0
- package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.d.ts.map +1 -0
- package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.js +71 -0
- package/src/core/math/max2_exact.d.ts +15 -0
- package/src/core/math/max2_exact.d.ts.map +1 -0
- package/src/core/math/max2_exact.js +30 -0
- package/src/core/math/min2_exact.d.ts +20 -0
- package/src/core/math/min2_exact.d.ts.map +1 -0
- package/src/core/math/min2_exact.js +35 -0
- package/src/engine/Clock.d.ts +15 -0
- package/src/engine/Clock.d.ts.map +1 -1
- package/src/engine/Clock.js +29 -5
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +11 -19
- package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -1
- package/src/engine/ecs/ik/IKGoalSystem.js +3 -19
- package/src/engine/ecs/parent/parent_entity_model_of.d.ts +17 -0
- package/src/engine/ecs/parent/parent_entity_model_of.d.ts.map +1 -0
- package/src/engine/ecs/parent/parent_entity_model_of.js +26 -0
- package/src/engine/ecs/transform/t64_read_pose_array.d.ts +15 -0
- package/src/engine/ecs/transform/t64_read_pose_array.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_read_pose_array.js +24 -0
- package/src/engine/graphics/ecs/mesh-v2/MeshSkin.d.ts +57 -0
- package/src/engine/graphics/ecs/mesh-v2/MeshSkin.d.ts.map +1 -0
- package/src/engine/graphics/ecs/mesh-v2/MeshSkin.js +84 -0
- package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.d.ts +2 -0
- package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.d.ts.map +1 -1
- package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.js +10 -21
- package/src/engine/graphics3/AnimationGraphSystem.d.ts +28 -13
- package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.js +107 -64
- package/src/engine/graphics3/AnimationSystem.d.ts +29 -15
- package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationSystem.js +112 -61
- package/src/engine/graphics3/MeshSkinSystem.d.ts +56 -0
- package/src/engine/graphics3/MeshSkinSystem.d.ts.map +1 -0
- package/src/engine/graphics3/MeshSkinSystem.js +317 -0
- package/src/engine/graphics3/MeshSystem.d.ts +15 -35
- package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
- package/src/engine/graphics3/MeshSystem.js +21 -298
- package/src/engine/graphics3/RowChains.d.ts +76 -0
- package/src/engine/graphics3/RowChains.d.ts.map +1 -0
- package/src/engine/graphics3/RowChains.js +347 -0
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts +6 -0
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
- package/src/engine/graphics3/ShadedGeometrySystem.js +329 -309
- package/src/engine/graphics3/animation/AnimationClips.d.ts +56 -0
- package/src/engine/graphics3/animation/AnimationClips.d.ts.map +1 -0
- package/src/engine/graphics3/animation/AnimationClips.js +79 -0
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts +13 -14
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts.map +1 -1
- package/src/engine/graphics3/animation/ClipListPlayer.js +262 -263
- package/src/engine/graphics3/animation/write_clip_playback.d.ts +3 -3
- package/src/engine/graphics3/animation/write_clip_playback.js +4 -4
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +5 -0
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts.map +1 -1
- package/src/engine/graphics3/pose/query_entity_node_world_pose.js +80 -75
- package/src/engine/graphics3/prefab/PrefabInstance.d.ts +4 -24
- package/src/engine/graphics3/prefab/PrefabInstance.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/PrefabInstance.js +60 -80
- package/src/engine/graphics3/prefab/prefab_instantiate.d.ts +16 -3
- package/src/engine/graphics3/prefab/prefab_instantiate.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/prefab_instantiate.js +49 -12
- package/src/engine/graphics3/prefab/prefab_place.d.ts +31 -17
- package/src/engine/graphics3/prefab/prefab_place.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/prefab_place.js +175 -130
- package/src/engine/graphics3/register_clips.d.ts +93 -0
- package/src/engine/graphics3/register_clips.d.ts.map +1 -0
- package/src/engine/graphics3/register_clips.js +166 -0
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +9 -0
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -1
- package/src/engine/physics/broadphase/compute_fat_world_aabb.js +3 -1
- package/src/engine/physics/cloth/MEASUREMENTS.md +795 -0
- package/src/engine/physics/cloth/PLAN.md +349 -17
- package/src/engine/physics/cloth/build/ClothProxy.d.ts +113 -61
- package/src/engine/physics/cloth/build/ClothProxy.d.ts.map +1 -1
- package/src/engine/physics/cloth/build/ClothProxy.js +142 -77
- package/src/engine/physics/cloth/build/cloth_bind_in_frame.d.ts +44 -0
- package/src/engine/physics/cloth/build/cloth_bind_in_frame.d.ts.map +1 -0
- package/src/engine/physics/cloth/build/cloth_bind_in_frame.js +107 -0
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts +43 -30
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts.map +1 -1
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.js +371 -284
- package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.d.ts +62 -0
- package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.d.ts.map +1 -0
- package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.js +275 -0
- package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts +7 -0
- package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/ClothColliderIndex.js +85 -67
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.js +19 -101
- package/src/engine/physics/cloth/collider/cloth_collider_pack.d.ts +2 -5
- package/src/engine/physics/cloth/collider/cloth_collider_pack.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_pack.js +7 -15
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.js +17 -62
- package/src/engine/physics/cloth/ecs/Cloth.d.ts +17 -9
- package/src/engine/physics/cloth/ecs/Cloth.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/Cloth.js +220 -212
- package/src/engine/physics/cloth/ecs/ClothColliderFlags.d.ts +0 -1
- package/src/engine/physics/cloth/ecs/ClothColliderFlags.js +6 -19
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts +1 -2
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.js +3 -12
- package/src/engine/physics/cloth/ecs/ClothDynamicsFlags.js +6 -0
- package/src/engine/physics/cloth/ecs/ClothHold.d.ts +91 -0
- package/src/engine/physics/cloth/ecs/ClothHold.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothHold.js +103 -0
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +254 -48
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothInstance.js +277 -47
- package/src/engine/physics/cloth/ecs/ClothPin.d.ts +73 -0
- package/src/engine/physics/cloth/ecs/ClothPin.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothPin.js +92 -0
- package/src/engine/physics/cloth/ecs/ClothPinSerializationAdapter.d.ts +36 -0
- package/src/engine/physics/cloth/ecs/ClothPinSerializationAdapter.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothPinSerializationAdapter.js +61 -0
- package/src/engine/physics/cloth/ecs/ClothRig.d.ts +23 -17
- package/src/engine/physics/cloth/ecs/ClothRig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothRig.js +29 -27
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +12 -14
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothSystem.js +20 -15
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts +57 -36
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.js +754 -207
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts +12 -13
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.js +20 -14
- package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts +63 -11
- package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_build_rows.js +297 -101
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts +9 -7
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.js +12 -10
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts +3 -3
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +60 -120
- package/src/engine/physics/cloth/ecs/cloth_geodesic.d.ts +37 -0
- package/src/engine/physics/cloth/ecs/cloth_geodesic.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/cloth_geodesic.js +135 -0
- package/src/engine/physics/cloth/ecs/cloth_holds.d.ts +97 -0
- package/src/engine/physics/cloth/ecs/cloth_holds.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/cloth_holds.js +583 -0
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts +2 -2
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.js +168 -51
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +17 -22
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +55 -117
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts +21 -6
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.js +51 -42
- package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts +5 -0
- package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back.js +62 -50
- package/src/engine/physics/cloth/ecs/cloth_write_back_rig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back_rig.js +65 -58
- package/src/engine/physics/cloth/playground/cloth_playground_build.d.ts.map +1 -1
- package/src/engine/physics/cloth/playground/cloth_playground_build.js +2 -3
- package/src/engine/physics/cloth/playground/collide_main.js +3 -29
- package/src/engine/physics/cloth/playground/garment_build.d.ts.map +1 -1
- package/src/engine/physics/cloth/playground/garment_build.js +17 -5
- package/src/engine/physics/cloth/playground/garment_main.js +5 -20
- package/src/engine/physics/cloth/playground/main.js +6 -48
- package/src/engine/physics/cloth/playground/rig_build.d.ts.map +1 -1
- package/src/engine/physics/cloth/playground/rig_build.js +302 -296
- package/src/engine/physics/cloth/playground/rig_main.js +947 -955
- package/src/engine/physics/cloth/playground/wind_main.js +8 -7
- package/src/engine/physics/cloth/solver/ClothState.d.ts +45 -7
- package/src/engine/physics/cloth/solver/ClothState.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/ClothState.js +79 -83
- package/src/engine/physics/cloth/solver/cloth_color_particles.d.ts +10 -8
- package/src/engine/physics/cloth/solver/cloth_color_particles.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_color_particles.js +30 -102
- package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts +6 -1
- package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_contact_find.js +9 -3
- package/src/engine/physics/cloth/solver/cloth_hold_line.d.ts +114 -0
- package/src/engine/physics/cloth/solver/cloth_hold_line.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_hold_line.js +350 -0
- package/src/engine/physics/cloth/solver/cloth_kinetic_energy.d.ts +21 -0
- package/src/engine/physics/cloth/solver/cloth_kinetic_energy.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_kinetic_energy.js +45 -0
- package/src/engine/physics/cloth/solver/cloth_particle_coupling.d.ts +32 -0
- package/src/engine/physics/cloth/solver/cloth_particle_coupling.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_particle_coupling.js +133 -0
- package/src/engine/physics/cloth/solver/cloth_particle_of_source.d.ts +16 -0
- package/src/engine/physics/cloth/solver/cloth_particle_of_source.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_particle_of_source.js +19 -0
- package/src/engine/physics/cloth/solver/cloth_self_find.d.ts +6 -2
- package/src/engine/physics/cloth/solver/cloth_self_find.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_self_find.js +19 -68
- package/src/engine/physics/cloth/solver/cloth_solve_vertex.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_solve_vertex.js +30 -65
- package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts +24 -12
- package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_solver_constants.js +24 -12
- package/src/engine/physics/cloth/solver/cloth_step.d.ts +16 -0
- package/src/engine/physics/cloth/solver/cloth_step.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_step.js +189 -48
- package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts +1 -0
- package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_step_instance.js +12 -6
- package/src/engine/physics/cloth/solver/cloth_stretch_residual.d.ts +21 -0
- package/src/engine/physics/cloth/solver/cloth_stretch_residual.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_stretch_residual.js +54 -0
- package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.d.ts +15 -0
- package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.js +28 -0
- package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.d.ts +30 -0
- package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.js +56 -0
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +3 -17
- package/src/engine/physics/cloth/solver/constraint/cloth_leash_row.d.ts +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_leash_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_leash_row.js +353 -346
- package/src/engine/physics/cloth/solver/constraint/cloth_self_row.d.ts +7 -5
- package/src/engine/physics/cloth/solver/constraint/cloth_self_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_self_row.js +7 -5
- package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts +2 -1
- package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts.map +1 -1
- package/src/engine/physics/cloth/wind/ClothFluidWind.js +7 -25
- package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts +12 -10
- package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts.map +1 -1
- package/src/engine/physics/cloth/wind/cloth_sample_air.js +60 -82
- package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/ContactProbeSystem.js +2 -18
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +9 -50
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.d.ts +24 -0
- package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.d.ts.map +1 -0
- package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.js +42 -0
- package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.d.ts +25 -0
- package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.d.ts.map +1 -0
- package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.js +40 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts.map +1 -1
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.js +40 -90
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/capsule_contacts.js +3 -5
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +2 -14
- package/src/engine/physics/narrowphase/hull_sphere_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/hull_sphere_contact.js +2 -5
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/narrowphase_step.js +13 -32
- package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/sphere_box_contact.js +2 -5
- package/src/engine/simulation/Ticker.d.ts +13 -0
- package/src/engine/simulation/Ticker.d.ts.map +1 -1
- package/src/engine/simulation/Ticker.js +43 -8
- package/src/format/texture/basis/transcode/etc1s_to_astc.d.ts.map +1 -1
- package/src/format/texture/basis/transcode/etc1s_to_astc.js +2 -1
- package/src/shade/RENDERER_CONTRACT.md +8 -2
- package/src/shade/playground/image_decode_bench/main.js +2 -1
- package/src/shade/playground/mesh_row_ceiling/main.js +2 -1
- package/src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.js +2 -1
- package/src/shade/playground/skinned_blas_refit/main.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/main.js +11 -19
- package/src/shade/playground/skinned_blas_refit/place_character.d.ts +6 -3
- package/src/shade/playground/skinned_blas_refit/place_character.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/place_character.js +90 -90
- package/src/shade/playground/skinned_mesh_soup/main.d.ts.map +1 -1
- package/src/shade/playground/skinned_mesh_soup/main.js +502 -509
- package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts.map +1 -1
- package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.js +2 -1
- package/src/shade/playground/ssr_variance/statistics.d.ts.map +1 -1
- package/src/shade/playground/ssr_variance/statistics.js +2 -1
- package/src/shade/playground/texture_encode/README.md +129 -109
- package/src/shade/playground/texture_encode/main.d.ts.map +1 -1
- package/src/shade/playground/texture_encode/main.js +1431 -1430
- package/src/shade/playground/volumetrics_froxel/measure.d.ts.map +1 -1
- package/src/shade/playground/volumetrics_froxel/measure.js +2 -1
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +45 -14
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +316 -64
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +5 -0
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +11 -1
- package/src/shade/renderer/buffer/table/gpu_database_check_links.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/gpu_database_check_links.js +2 -1
- package/src/shade/renderer/geometry/BoxGeometry.d.ts +1 -11
- package/src/shade/renderer/geometry/BoxGeometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/BoxGeometry.js +6 -13
- package/src/shade/renderer/geometry/CapsuleGeometry.d.ts +19 -0
- package/src/shade/renderer/geometry/CapsuleGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/CapsuleGeometry.js +24 -0
- package/src/shade/renderer/geometry/ConeGeometry.d.ts +20 -0
- package/src/shade/renderer/geometry/ConeGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/ConeGeometry.js +33 -0
- package/src/shade/renderer/geometry/CylinderGeometry.d.ts +21 -0
- package/src/shade/renderer/geometry/CylinderGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/CylinderGeometry.js +35 -0
- package/src/shade/renderer/geometry/PlaneGeometry.d.ts +17 -0
- package/src/shade/renderer/geometry/PlaneGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/PlaneGeometry.js +22 -0
- package/src/shade/renderer/geometry/TorusGeometry.d.ts +18 -0
- package/src/shade/renderer/geometry/TorusGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/TorusGeometry.js +23 -0
- package/src/shade/renderer/geometry/UVSphereGeometry.d.ts +21 -0
- package/src/shade/renderer/geometry/UVSphereGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/UVSphereGeometry.js +34 -0
- package/src/shade/renderer/geometry/primitives/make_capsule_geometry.d.ts +19 -0
- package/src/shade/renderer/geometry/primitives/make_capsule_geometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/primitives/make_capsule_geometry.js +205 -0
- package/src/shade/renderer/geometry/primitives/make_cone_geometry.d.ts +21 -0
- package/src/shade/renderer/geometry/primitives/make_cone_geometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/primitives/make_cone_geometry.js +36 -0
- package/src/shade/renderer/geometry/primitives/make_cylinder_geometry.d.ts +1 -1
- package/src/shade/renderer/geometry/primitives/make_cylinder_geometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/primitives/make_cylinder_geometry.js +44 -9
- package/src/shade/renderer/geometry/primitives/make_uv_sphere_geometry.d.ts +20 -0
- package/src/shade/renderer/geometry/primitives/make_uv_sphere_geometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/primitives/make_uv_sphere_geometry.js +190 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.js +3 -2
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.js +2 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.js +2 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.js +2 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.js +3 -2
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.js +2 -1
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.js +2 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +3 -2
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +7 -2
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.d.ts +26 -8
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.js +56 -39
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.d.ts +7 -0
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.js +46 -4
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/test_prefix_sum.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/test_prefix_sum.js +4 -2
- package/src/shade/renderer/gpu_primitive/sort/defs.d.ts +2 -2
- package/src/shade/renderer/gpu_primitive/sort/defs.js +79 -79
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts +1 -1
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +7 -3
- package/src/shade/renderer/particles/GPUParticleSystem.js +1 -1
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts +4 -3
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts.map +1 -1
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.js +200 -194
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +6 -2
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.js +3 -2
- package/src/shade/renderer/particles/warmup/graph_particle_warmup.d.ts.map +1 -1
- package/src/shade/renderer/particles/warmup/graph_particle_warmup.js +334 -329
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +7 -2
- package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.js +16 -4
- package/src/shade/renderer/texture/COMPRESSED_TEXTURE_PLAN_2026_09_01.md +2444 -2345
- package/src/shade/renderer/texture/encode/chunk_astc_encode_block_4x4_rgb.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_astc_encode_block_4x4_rgb.js +312 -310
- package/src/shade/renderer/texture/encode/chunk_bc1_encode_block.d.ts +3 -3
- package/src/shade/renderer/texture/encode/chunk_bc1_encode_block.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_bc1_encode_block.js +383 -375
- package/src/shade/renderer/texture/encode/chunk_bc6h_encode_block_mode11.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_bc6h_encode_block_mode11.js +349 -346
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block.d.ts +58 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block.d.ts.map +1 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block.js +536 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block_mode6.d.ts +21 -7
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block_mode6.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block_mode6.js +291 -327
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode1.d.ts +25 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode1.d.ts.map +1 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode1.js +99 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode6.d.ts +5 -3
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode6.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode6.js +47 -71
- package/src/shade/renderer/texture/encode/chunk_bc7_partition_2.d.ts +10 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_partition_2.d.ts.map +1 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_partition_2.js +50 -0
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc7.d.ts +4 -5
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc7.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc7.js +7 -8
- package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -1
- package/src/shade/renderer/water/chunk_water_transport.js +7 -5
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -1
- package/src/shade/renderer/water/medium/GPUWaterBodies.js +8 -2
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts +3 -2
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts.map +1 -1
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.js +3 -2
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +3 -1
- package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/GPUWaterSurface.js +3 -1
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/graph_water_tessellation.js +11 -4
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +37 -20
- package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
- package/src/shade/wgsl/validate_wgsl_source.js +74 -3
- package/src/engine/graphics3/register_instance_animation.d.ts +0 -114
- package/src/engine/graphics3/register_instance_animation.d.ts.map +0 -1
- package/src/engine/graphics3/register_instance_animation.js +0 -201
|
@@ -1,75 +1,80 @@
|
|
|
1
|
-
import { assert } from "../../../core/assert.js";
|
|
2
|
-
import { PosePlayback } from "../../../shade/renderer/animation/pose/PosePlayback.js";
|
|
3
|
-
import { t64_evaluate_world } from "../../ecs/transform/t64_evaluate_world.js";
|
|
4
|
-
import { MeshSystem } from "../MeshSystem.js";
|
|
5
|
-
import { collect_entity_playbacks } from "./collect_entity_playbacks.js";
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* The clip set handed to the evaluator, rebuilt per call from the systems' own entries. Nothing in
|
|
9
|
-
* here outlives the call — the query is on a per-frame path and allocates nothing.
|
|
10
|
-
*
|
|
11
|
-
* @type {PosePlayback[]}
|
|
12
|
-
*/
|
|
13
|
-
const PLAYBACKS = [];
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Where a named part of an entity's model is, in world space.
|
|
17
|
-
*
|
|
18
|
-
* This is the question gameplay asks of an animated model and the only sanctioned way to ask it:
|
|
19
|
-
* where does this projectile leave from, where does that effect anchor, where does the floating UI
|
|
20
|
-
* hang. **The answer is computed, never read back** — GPU readback is a frame late and asynchronous,
|
|
21
|
-
* so an outcome that depended on it would depend on frame pacing, and determinism and replay would
|
|
22
|
-
* go with it: no GPU readback on a gameplay-affecting path.
|
|
23
|
-
*
|
|
24
|
-
* The named node is an entity of the model's instance, and the pose is {@link t64_evaluate_world}
|
|
25
|
-
* over its attachment chain and the clips the animation systems are driving: a pure function of
|
|
26
|
-
* (hierarchy, clip set, time, weights), off the same clock the renderer is written from, which is
|
|
27
|
-
* what keeps a socket on the mesh that is drawn — whether or not the GPU owns the joint's row.
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* @
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import { PosePlayback } from "../../../shade/renderer/animation/pose/PosePlayback.js";
|
|
3
|
+
import { t64_evaluate_world } from "../../ecs/transform/t64_evaluate_world.js";
|
|
4
|
+
import { MeshSystem } from "../MeshSystem.js";
|
|
5
|
+
import { collect_entity_playbacks } from "./collect_entity_playbacks.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* The clip set handed to the evaluator, rebuilt per call from the systems' own entries. Nothing in
|
|
9
|
+
* here outlives the call — the query is on a per-frame path and allocates nothing.
|
|
10
|
+
*
|
|
11
|
+
* @type {PosePlayback[]}
|
|
12
|
+
*/
|
|
13
|
+
const PLAYBACKS = [];
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Where a named part of an entity's model is, in world space.
|
|
17
|
+
*
|
|
18
|
+
* This is the question gameplay asks of an animated model and the only sanctioned way to ask it:
|
|
19
|
+
* where does this projectile leave from, where does that effect anchor, where does the floating UI
|
|
20
|
+
* hang. **The answer is computed, never read back** — GPU readback is a frame late and asynchronous,
|
|
21
|
+
* so an outcome that depended on it would depend on frame pacing, and determinism and replay would
|
|
22
|
+
* go with it: no GPU readback on a gameplay-affecting path.
|
|
23
|
+
*
|
|
24
|
+
* The named node is an entity of the model's instance, and the pose is {@link t64_evaluate_world}
|
|
25
|
+
* over its attachment chain and the clips the animation systems are driving: a pure function of
|
|
26
|
+
* (hierarchy, clip set, time, weights), off the same clock the renderer is written from, which is
|
|
27
|
+
* what keeps a socket on the mesh that is drawn — whether or not the GPU owns the joint's row.
|
|
28
|
+
*
|
|
29
|
+
* **A name is only how a loaded model is asked.** For a joint the caller already holds — one of a
|
|
30
|
+
* rig built in code — there is nothing to look up: {@link collect_entity_playbacks} for the entity
|
|
31
|
+
* playing its clips, then {@link t64_evaluate_world} for the joint, which is all this does once the
|
|
32
|
+
* name is resolved.
|
|
33
|
+
*
|
|
34
|
+
* The result carries both its matrix and its components.
|
|
35
|
+
*
|
|
36
|
+
* @param {Transform64} result
|
|
37
|
+
* @param {EntityManager} entity_manager
|
|
38
|
+
* @param {number} entity
|
|
39
|
+
* @param {string} node_name name the asset gave the node — a bone, a socket's bone, an effector
|
|
40
|
+
* @returns {boolean} `false` when there is no such node to answer about: no mesh system is
|
|
41
|
+
* registered, the model has not loaded yet, the entity has none, or the name is not in it. None of
|
|
42
|
+
* the four is an error
|
|
43
|
+
*/
|
|
44
|
+
export function query_entity_node_world_pose(result, entity_manager, entity, node_name) {
|
|
45
|
+
assert.defined(result, 'result');
|
|
46
|
+
assert.defined(entity_manager, 'entity_manager');
|
|
47
|
+
assert.isNonNegativeInteger(entity, 'entity');
|
|
48
|
+
assert.isString(node_name, 'node_name');
|
|
49
|
+
|
|
50
|
+
const meshes = entity_manager.getSystem(MeshSystem);
|
|
51
|
+
|
|
52
|
+
if (meshes === null) {
|
|
53
|
+
// nothing draws models here, so nothing holds one to answer about
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const instance = meshes.instance_of(entity);
|
|
58
|
+
|
|
59
|
+
if (instance === null) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const target = instance.entity_of(node_name);
|
|
64
|
+
|
|
65
|
+
if (target === -1) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const playbacks = PLAYBACKS;
|
|
70
|
+
|
|
71
|
+
playbacks.length = 0;
|
|
72
|
+
|
|
73
|
+
collect_entity_playbacks(playbacks, entity_manager, entity);
|
|
74
|
+
|
|
75
|
+
t64_evaluate_world(result, entity_manager.dataset, target, playbacks);
|
|
76
|
+
|
|
77
|
+
playbacks.length = 0;
|
|
78
|
+
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
@@ -1,20 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @typedef {import("./Prefab.js").Prefab} Prefab
|
|
3
|
-
* @typedef {import("../../../shade/renderer/animation/Skin.js").Skin} Skin
|
|
4
|
-
* @typedef {import("../../../shade/renderer/animation/ShadeAnimationClip.js").ShadeAnimationClip} ShadeAnimationClip
|
|
5
3
|
*/
|
|
6
4
|
/**
|
|
7
|
-
* One placement of a {@link Prefab}: the entities its nodes became
|
|
8
|
-
* clips re-addressed to them.
|
|
5
|
+
* One placement of a {@link Prefab}: the entities its nodes became.
|
|
9
6
|
*
|
|
10
7
|
* `entities[i]` is the entity of node `i`; `entities[0]` is the root, the entity that placed the
|
|
11
8
|
* model and was there before. Everything read-only about the model — geometry, materials,
|
|
12
9
|
* inverse-bind matrices, curves — is the prefab's and shared; what is per-instance is the
|
|
13
|
-
* addressing
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* instance it is bound to: a model swap builds a new one, and the object's identity is the only
|
|
17
|
-
* signal that says so.
|
|
10
|
+
* addressing. Nothing the model needs in order to work is only here: a skin is a `MeshSkin` on each
|
|
11
|
+
* mesh entity it deforms, and the clips, re-addressed to this placement's entities, are an
|
|
12
|
+
* `AnimationClips` on the root — which is where a rig built in code puts both too.
|
|
18
13
|
*/
|
|
19
14
|
export class PrefabInstance {
|
|
20
15
|
/**
|
|
@@ -40,19 +35,6 @@ export class PrefabInstance {
|
|
|
40
35
|
* @type {Int32Array}
|
|
41
36
|
*/
|
|
42
37
|
mesh_entities: Int32Array;
|
|
43
|
-
/**
|
|
44
|
-
* The model's skins, with `joints` and `meshes` as entities of this instance.
|
|
45
|
-
*
|
|
46
|
-
* @type {Skin[]}
|
|
47
|
-
*/
|
|
48
|
-
skins: Skin[];
|
|
49
|
-
/**
|
|
50
|
-
* The model's clips, with every channel targeting an entity of this instance. Their names and
|
|
51
|
-
* durations are the model's; a driver resolves a clip by name to its index here.
|
|
52
|
-
*
|
|
53
|
-
* @type {ShadeAnimationClip[]}
|
|
54
|
-
*/
|
|
55
|
-
clips: ShadeAnimationClip[];
|
|
56
38
|
/**
|
|
57
39
|
* The entity of the node the asset calls `name` — a bone, a socket's bone, an effector.
|
|
58
40
|
*
|
|
@@ -67,6 +49,4 @@ export class PrefabInstance {
|
|
|
67
49
|
readonly isPrefabInstance: boolean;
|
|
68
50
|
}
|
|
69
51
|
export type Prefab = import("./Prefab.js").Prefab;
|
|
70
|
-
export type Skin = import("../../../shade/renderer/animation/Skin.js").Skin;
|
|
71
|
-
export type ShadeAnimationClip = import("../../../shade/renderer/animation/ShadeAnimationClip.js").ShadeAnimationClip;
|
|
72
52
|
//# sourceMappingURL=PrefabInstance.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrefabInstance.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/prefab/PrefabInstance.js"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"PrefabInstance.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/prefab/PrefabInstance.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;GASG;AACH;IACI;;OAEG;IACH,QAFU,MAAM,CAEF;IAEd;;;;OAIG;IACH,MAFU,MAAM,CAEN;IAEV;;;;OAIG;IACH,UAFU,UAAU,CAES;IAE7B;;;;;OAKG;IACH,eAFU,UAAU,CAEc;IAElC;;;;;OAKG;IACH,gBAHW,MAAM,GACJ,MAAM,CAMlB;IAGL;;;OAGG;IACH,2BAFU,OAAO,CAEwB;CANxC;qBApDY,OAAO,aAAa,EAAE,MAAM"}
|
|
@@ -1,80 +1,60 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @typedef {import("./Prefab.js").Prefab} Prefab
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
*
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
*
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
*
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
*
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
clips = [];
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* The entity of the node the asset calls `name` — a bone, a socket's bone, an effector.
|
|
65
|
-
*
|
|
66
|
-
* @param {string} name
|
|
67
|
-
* @returns {number} the entity, or -1 when the model has no such node
|
|
68
|
-
*/
|
|
69
|
-
entity_of(name) {
|
|
70
|
-
const index = this.prefab.index_of(name);
|
|
71
|
-
|
|
72
|
-
return index === -1 ? -1 : this.entities[index];
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* @readonly
|
|
78
|
-
* @type {boolean}
|
|
79
|
-
*/
|
|
80
|
-
PrefabInstance.prototype.isPrefabInstance = true;
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {import("./Prefab.js").Prefab} Prefab
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* One placement of a {@link Prefab}: the entities its nodes became.
|
|
7
|
+
*
|
|
8
|
+
* `entities[i]` is the entity of node `i`; `entities[0]` is the root, the entity that placed the
|
|
9
|
+
* model and was there before. Everything read-only about the model — geometry, materials,
|
|
10
|
+
* inverse-bind matrices, curves — is the prefab's and shared; what is per-instance is the
|
|
11
|
+
* addressing. Nothing the model needs in order to work is only here: a skin is a `MeshSkin` on each
|
|
12
|
+
* mesh entity it deforms, and the clips, re-addressed to this placement's entities, are an
|
|
13
|
+
* `AnimationClips` on the root — which is where a rig built in code puts both too.
|
|
14
|
+
*/
|
|
15
|
+
export class PrefabInstance {
|
|
16
|
+
/**
|
|
17
|
+
* @type {Prefab}
|
|
18
|
+
*/
|
|
19
|
+
prefab = null;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* The entity that placed the model. Node 0 of the prefab.
|
|
23
|
+
*
|
|
24
|
+
* @type {number}
|
|
25
|
+
*/
|
|
26
|
+
root = -1;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The entity of each node of the prefab, by node index.
|
|
30
|
+
*
|
|
31
|
+
* @type {Int32Array}
|
|
32
|
+
*/
|
|
33
|
+
entities = new Int32Array(0);
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The entities that draw — one per primitive of the prefab, in the prefab's primitive order.
|
|
37
|
+
* Each holds the `meshes` row of the same index as its `transforms` row.
|
|
38
|
+
*
|
|
39
|
+
* @type {Int32Array}
|
|
40
|
+
*/
|
|
41
|
+
mesh_entities = new Int32Array(0);
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* The entity of the node the asset calls `name` — a bone, a socket's bone, an effector.
|
|
45
|
+
*
|
|
46
|
+
* @param {string} name
|
|
47
|
+
* @returns {number} the entity, or -1 when the model has no such node
|
|
48
|
+
*/
|
|
49
|
+
entity_of(name) {
|
|
50
|
+
const index = this.prefab.index_of(name);
|
|
51
|
+
|
|
52
|
+
return index === -1 ? -1 : this.entities[index];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* @readonly
|
|
58
|
+
* @type {boolean}
|
|
59
|
+
*/
|
|
60
|
+
PrefabInstance.prototype.isPrefabInstance = true;
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
* **What a model is in an ECS.** Each node of the prefab becomes an entity: named, attached to
|
|
5
5
|
* its parent's entity by a `TransformAttachment` carrying the node's rest pose, holding a world
|
|
6
6
|
* `Transform64` composed from the root's, drawing through a `ShadedGeometry` where the node
|
|
7
|
-
* carries geometry
|
|
8
|
-
*
|
|
7
|
+
* carries geometry — and deforming through a `MeshSkin` naming the joints' entities where the
|
|
8
|
+
* geometry is skinned — and declaring `GPUStateAuthority` — with a zero flags word — where a clip
|
|
9
|
+
* or a skin may later hand the node to the GPU, so that the hand-over is a bit write and never a
|
|
9
10
|
* component add. Node 0 is `root` itself, the caller's entity, whose `Transform64` is the
|
|
10
11
|
* placement.
|
|
11
12
|
*
|
|
@@ -19,6 +20,12 @@
|
|
|
19
20
|
* transient to serialization: a save holds the model's placement, not sixty joints of derived
|
|
20
21
|
* state.
|
|
21
22
|
*
|
|
23
|
+
* **The model's clips go on the root, last.** An {@link AnimationClips} holding them, every
|
|
24
|
+
* channel re-addressed to this placement's entities, is added once every entity it keys exists —
|
|
25
|
+
* empty when the model has none, so that whatever plays on the root is still driven. The root
|
|
26
|
+
* must not carry one already: it is one placement's clips, and a second placement would replace
|
|
27
|
+
* them under whoever is playing them.
|
|
28
|
+
*
|
|
22
29
|
* @param {Prefab} prefab
|
|
23
30
|
* @param {EntityComponentDataset} dataset
|
|
24
31
|
* @param {number} root an entity carrying a `Transform64`
|
|
@@ -31,11 +38,17 @@ export function prefab_instantiate(prefab: Prefab, dataset: EntityComponentDatas
|
|
|
31
38
|
transient?: boolean;
|
|
32
39
|
}): PrefabInstance;
|
|
33
40
|
/**
|
|
34
|
-
* Remove every entity an instance spawned. The root is the caller's
|
|
41
|
+
* Remove every entity an instance spawned, and its clips from the root. The root is the caller's
|
|
42
|
+
* and stays.
|
|
35
43
|
*
|
|
36
44
|
* Children before parents, so that no parent's removal has to reach down and detach a child
|
|
37
45
|
* that is about to go anyway.
|
|
38
46
|
*
|
|
47
|
+
* **The clips go after the entities they key.** Whatever was playing them gives back what it
|
|
48
|
+
* holds for each target when they go, and a target that has already left is one there is nothing
|
|
49
|
+
* left to give back for. They go only if the root still carries them: the root's own removal takes
|
|
50
|
+
* its components one by one, and may have taken them already.
|
|
51
|
+
*
|
|
39
52
|
* @param {EntityComponentDataset} dataset
|
|
40
53
|
* @param {PrefabInstance} instance
|
|
41
54
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefab_instantiate.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/prefab/prefab_instantiate.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prefab_instantiate.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/prefab/prefab_instantiate.js"],"names":[],"mappings":"AAyCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,2CARW,MAAM,WACN,sBAAsB,QACtB,MAAM;IAEY,SAAS,GAA3B,OAAO;IAEL,cAAc,CA+J1B;AAED;;;;;;;;;;;;;;GAcG;AACH,iDAHW,sBAAsB,YACtB,cAAc,QAiBxB;qBAxPY,OAAO,aAAa,EAAE,MAAM;qCAC5B,OAAO,qCAAqC,EAAE,sBAAsB;+BAJlD,qBAAqB"}
|
|
@@ -2,7 +2,6 @@ import { assert } from "../../../core/assert.js";
|
|
|
2
2
|
import { m4_multiply } from "../../../core/geom/3d/mat4/m4_multiply.js";
|
|
3
3
|
import { ShadeAnimationChannel } from "../../../shade/renderer/animation/ShadeAnimationChannel.js";
|
|
4
4
|
import { ShadeAnimationClip } from "../../../shade/renderer/animation/ShadeAnimationClip.js";
|
|
5
|
-
import { Skin } from "../../../shade/renderer/animation/Skin.js";
|
|
6
5
|
import { SerializationMetadata } from "../../ecs/components/SerializationMetadata.js";
|
|
7
6
|
import { GPUStateAuthority } from "../../ecs/gpu/GPUStateAuthority.js";
|
|
8
7
|
import { Name } from "../../ecs/name/Name.js";
|
|
@@ -10,8 +9,10 @@ import { ParentEntity } from "../../ecs/parent/ParentEntity.js";
|
|
|
10
9
|
import { TransformAttachment } from "../../ecs/transform-attachment/TransformAttachment.js";
|
|
11
10
|
import { Transform64 } from "../../ecs/transform/Transform64.js";
|
|
12
11
|
import { DrawMode } from "../../graphics/ecs/mesh-v2/DrawMode.js";
|
|
12
|
+
import { MeshSkin } from "../../graphics/ecs/mesh-v2/MeshSkin.js";
|
|
13
13
|
import { ShadedGeometry } from "../../graphics/ecs/mesh-v2/ShadedGeometry.js";
|
|
14
14
|
import { ShadedGeometryFlags } from "../../graphics/ecs/mesh-v2/ShadedGeometryFlags.js";
|
|
15
|
+
import { AnimationClips } from "../animation/AnimationClips.js";
|
|
15
16
|
import { PrefabInstance } from "./PrefabInstance.js";
|
|
16
17
|
|
|
17
18
|
/**
|
|
@@ -31,9 +32,11 @@ const COMPONENT_TYPES = [
|
|
|
31
32
|
TransformAttachment,
|
|
32
33
|
Name,
|
|
33
34
|
ShadedGeometry,
|
|
35
|
+
MeshSkin,
|
|
34
36
|
GPUStateAuthority,
|
|
35
37
|
ParentEntity,
|
|
36
38
|
SerializationMetadata,
|
|
39
|
+
AnimationClips,
|
|
37
40
|
];
|
|
38
41
|
|
|
39
42
|
/**
|
|
@@ -42,8 +45,9 @@ const COMPONENT_TYPES = [
|
|
|
42
45
|
* **What a model is in an ECS.** Each node of the prefab becomes an entity: named, attached to
|
|
43
46
|
* its parent's entity by a `TransformAttachment` carrying the node's rest pose, holding a world
|
|
44
47
|
* `Transform64` composed from the root's, drawing through a `ShadedGeometry` where the node
|
|
45
|
-
* carries geometry
|
|
46
|
-
*
|
|
48
|
+
* carries geometry — and deforming through a `MeshSkin` naming the joints' entities where the
|
|
49
|
+
* geometry is skinned — and declaring `GPUStateAuthority` — with a zero flags word — where a clip
|
|
50
|
+
* or a skin may later hand the node to the GPU, so that the hand-over is a bit write and never a
|
|
47
51
|
* component add. Node 0 is `root` itself, the caller's entity, whose `Transform64` is the
|
|
48
52
|
* placement.
|
|
49
53
|
*
|
|
@@ -57,6 +61,12 @@ const COMPONENT_TYPES = [
|
|
|
57
61
|
* transient to serialization: a save holds the model's placement, not sixty joints of derived
|
|
58
62
|
* state.
|
|
59
63
|
*
|
|
64
|
+
* **The model's clips go on the root, last.** An {@link AnimationClips} holding them, every
|
|
65
|
+
* channel re-addressed to this placement's entities, is added once every entity it keys exists —
|
|
66
|
+
* empty when the model has none, so that whatever plays on the root is still driven. The root
|
|
67
|
+
* must not carry one already: it is one placement's clips, and a second placement would replace
|
|
68
|
+
* them under whoever is playing them.
|
|
69
|
+
*
|
|
60
70
|
* @param {Prefab} prefab
|
|
61
71
|
* @param {EntityComponentDataset} dataset
|
|
62
72
|
* @param {number} root an entity carrying a `Transform64`
|
|
@@ -81,13 +91,19 @@ export function prefab_instantiate(prefab, dataset, root, { transient = true } =
|
|
|
81
91
|
const ATTACHMENT = dataset.computeComponentTypeIndex(TransformAttachment);
|
|
82
92
|
const NAME = dataset.computeComponentTypeIndex(Name);
|
|
83
93
|
const GEOMETRY = dataset.computeComponentTypeIndex(ShadedGeometry);
|
|
94
|
+
const SKIN = dataset.computeComponentTypeIndex(MeshSkin);
|
|
84
95
|
const AUTHORITY = dataset.computeComponentTypeIndex(GPUStateAuthority);
|
|
85
96
|
const PARENT = dataset.computeComponentTypeIndex(ParentEntity);
|
|
86
97
|
const METADATA = dataset.computeComponentTypeIndex(SerializationMetadata);
|
|
98
|
+
const CLIPS = dataset.computeComponentTypeIndex(AnimationClips);
|
|
87
99
|
|
|
88
100
|
const root_transform = dataset.getComponent(root, Transform64);
|
|
89
101
|
|
|
90
102
|
assert.defined(root_transform, `root entity ${root} carries no Transform64 to place the model by`);
|
|
103
|
+
assert.equal(
|
|
104
|
+
dataset.getComponentByIndex(root, CLIPS), undefined,
|
|
105
|
+
`root entity ${root} already carries AnimationClips; one root holds one placement`
|
|
106
|
+
);
|
|
91
107
|
|
|
92
108
|
const node_count = prefab.node_count;
|
|
93
109
|
|
|
@@ -129,6 +145,10 @@ export function prefab_instantiate(prefab, dataset, root, { transient = true } =
|
|
|
129
145
|
// immutable while attached, and sixty copies of one number are sixty allocations for nothing.
|
|
130
146
|
const owner = ParentEntity.from(root);
|
|
131
147
|
|
|
148
|
+
// Each skin's joints as this instance's entities, once: the meshes a skin deforms share the
|
|
149
|
+
// array, as they share the prefab's inverse binds.
|
|
150
|
+
const skin_joints = prefab.skins.map(skin => Int32Array.from(skin.joints, joint => entities[joint]));
|
|
151
|
+
|
|
132
152
|
for (let i = 1; i < node_count; i++) {
|
|
133
153
|
const entity = entities[i];
|
|
134
154
|
|
|
@@ -158,6 +178,13 @@ export function prefab_instantiate(prefab, dataset, root, { transient = true } =
|
|
|
158
178
|
}
|
|
159
179
|
|
|
160
180
|
dataset.addComponentToEntityByIndex(entity, GEOMETRY, geometry);
|
|
181
|
+
|
|
182
|
+
if (primitive.skin !== -1) {
|
|
183
|
+
dataset.addComponentToEntityByIndex(entity, SKIN, MeshSkin.from(
|
|
184
|
+
skin_joints[primitive.skin],
|
|
185
|
+
prefab.skins[primitive.skin].inverse_bind_matrices
|
|
186
|
+
));
|
|
187
|
+
}
|
|
161
188
|
}
|
|
162
189
|
|
|
163
190
|
const attachment = new TransformAttachment();
|
|
@@ -190,14 +217,8 @@ export function prefab_instantiate(prefab, dataset, root, { transient = true } =
|
|
|
190
217
|
instance.entities = entities;
|
|
191
218
|
instance.mesh_entities = Int32Array.from(prefab.primitives, primitive => entities[primitive.node]);
|
|
192
219
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
joints: Array.from(skin.joints, joint => entities[joint]),
|
|
196
|
-
inverse_bind_matrices: skin.inverse_bind_matrices,
|
|
197
|
-
meshes: Array.from(skin.meshes, mesh => entities[mesh]),
|
|
198
|
-
}));
|
|
199
|
-
|
|
200
|
-
instance.clips = prefab.clips.map(clip => ShadeAnimationClip.from({
|
|
220
|
+
// Per placement: the curves are the prefab's, and only the addressing is this instance's.
|
|
221
|
+
const clips = prefab.clips.map(clip => ShadeAnimationClip.from({
|
|
201
222
|
name: clip.name,
|
|
202
223
|
channels: clip.channels.map(channel => ShadeAnimationChannel.from({
|
|
203
224
|
target: entities[channel.target],
|
|
@@ -206,15 +227,25 @@ export function prefab_instantiate(prefab, dataset, root, { transient = true } =
|
|
|
206
227
|
})),
|
|
207
228
|
}));
|
|
208
229
|
|
|
230
|
+
// Last: whatever plays these links when they arrive, and every entity they key is complete by
|
|
231
|
+
// then.
|
|
232
|
+
dataset.addComponentToEntityByIndex(root, CLIPS, AnimationClips.from(clips));
|
|
233
|
+
|
|
209
234
|
return instance;
|
|
210
235
|
}
|
|
211
236
|
|
|
212
237
|
/**
|
|
213
|
-
* Remove every entity an instance spawned. The root is the caller's
|
|
238
|
+
* Remove every entity an instance spawned, and its clips from the root. The root is the caller's
|
|
239
|
+
* and stays.
|
|
214
240
|
*
|
|
215
241
|
* Children before parents, so that no parent's removal has to reach down and detach a child
|
|
216
242
|
* that is about to go anyway.
|
|
217
243
|
*
|
|
244
|
+
* **The clips go after the entities they key.** Whatever was playing them gives back what it
|
|
245
|
+
* holds for each target when they go, and a target that has already left is one there is nothing
|
|
246
|
+
* left to give back for. They go only if the root still carries them: the root's own removal takes
|
|
247
|
+
* its components one by one, and may have taken them already.
|
|
248
|
+
*
|
|
218
249
|
* @param {EntityComponentDataset} dataset
|
|
219
250
|
* @param {PrefabInstance} instance
|
|
220
251
|
*/
|
|
@@ -227,4 +258,10 @@ export function prefab_instance_destroy(dataset, instance) {
|
|
|
227
258
|
for (let i = entities.length - 1; i >= 1; i--) {
|
|
228
259
|
dataset.removeEntity(entities[i]);
|
|
229
260
|
}
|
|
261
|
+
|
|
262
|
+
const root = instance.root;
|
|
263
|
+
|
|
264
|
+
if (dataset.entityExists(root) && dataset.getComponent(root, AnimationClips) !== undefined) {
|
|
265
|
+
dataset.removeComponentFromEntity(root, AnimationClips);
|
|
266
|
+
}
|
|
230
267
|
}
|