@woosh/meep-engine 2.168.1 → 2.169.1
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/README.md +2 -2
- package/build/bundle-worker-image-decoder.js +1 -1
- package/editor/process/symbolic/make3DSymbolicDisplay.js +1 -1
- package/editor/view/ecs/EntityList.js +1 -1
- package/editor/view/ecs/components/particles/ParticleLayerController.js +1 -1
- package/editor/view/makeEntityDecorators.js +1 -1
- package/package.json +1 -1
- package/src/REVIEW_2026_08_06/adv-core.md +511 -0
- package/src/REVIEW_2026_08_06/adv-gfx.md +480 -0
- package/src/REVIEW_2026_08_06/adv-view.md +446 -0
- package/src/REVIEW_2026_08_06/api-core.md +296 -0
- package/src/REVIEW_2026_08_06/api-engine.md +195 -0
- package/src/REVIEW_2026_08_06/bvh-phys-sound-net.md +507 -0
- package/src/REVIEW_2026_08_06/core-binary.md +348 -0
- package/src/REVIEW_2026_08_06/core-collection.md +376 -0
- package/src/REVIEW_2026_08_06/core-math.md +221 -0
- package/src/REVIEW_2026_08_06/core-process.md +266 -0
- package/src/REVIEW_2026_08_06/core-science.md +223 -0
- package/src/REVIEW_2026_08_06/engine-ai-nav.md +279 -0
- package/src/REVIEW_2026_08_06/engine-animation.md +167 -0
- package/src/REVIEW_2026_08_06/engine-asset.md +166 -0
- package/src/REVIEW_2026_08_06/engine-ecs.md +920 -0
- package/src/REVIEW_2026_08_06/engine-input.md +197 -0
- package/src/REVIEW_2026_08_06/engine-misc.md +248 -0
- package/src/REVIEW_2026_08_06/engine-terrain.md +52 -0
- package/src/REVIEW_2026_08_06/generation.md +176 -0
- package/src/REVIEW_2026_08_06/geom-2d.md +434 -0
- package/src/REVIEW_2026_08_06/geom-3d.md +117 -0
- package/src/REVIEW_2026_08_06/gfx-gi.md +143 -0
- package/src/REVIEW_2026_08_06/gfx-render.md +740 -0
- package/src/REVIEW_2026_08_06/gfx-texture.md +690 -0
- package/src/REVIEW_2026_08_06/prior-criticals.md +49 -0
- package/src/REVIEW_2026_08_06/prior-highs.md +138 -0
- package/src/REVIEW_2026_08_06/test-gaps.md +364 -0
- package/src/REVIEW_2026_08_06/view.md +667 -0
- package/src/REVIEW_2026_08_06.md +610 -0
- package/src/core/IdPool.d.ts +2 -2
- package/src/core/IdPool.d.ts.map +1 -1
- package/src/core/IdPool.js +1 -1
- package/src/core/binary/32BitEncoder.d.ts +2 -3
- package/src/core/binary/32BitEncoder.d.ts.map +1 -1
- package/src/core/binary/32BitEncoder.js +1 -1
- package/src/core/binary/BinaryBuffer.d.ts.map +1 -1
- package/src/core/binary/BinaryBuffer.js +12 -1
- package/src/core/binary/BitImage2.d.ts +5 -1
- package/src/core/binary/BitImage2.d.ts.map +1 -1
- package/src/core/binary/BitImage2.js +5 -1
- package/src/core/bvh2/bvh3/BVH.d.ts +2 -2
- package/src/core/bvh2/bvh3/BVH.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/BVH.js +1 -1
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_nearest_to_point_filtered.d.ts +2 -2
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_nearest_to_point_filtered.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_nearest_to_point_filtered.js +86 -86
- package/src/core/bvh2/traversal/aabb3_detailed_volume_intersection_callback_based.d.ts +2 -2
- package/src/core/bvh2/traversal/aabb3_detailed_volume_intersection_callback_based.d.ts.map +1 -1
- package/src/core/bvh2/traversal/aabb3_detailed_volume_intersection_callback_based.js +1 -1
- package/src/core/bvh8/build/NodeProxy.d.ts.map +1 -1
- package/src/core/bvh8/build/NodeProxy.js +314 -308
- package/src/core/cache/Cache.d.ts +4 -4
- package/src/core/cache/Cache.d.ts.map +1 -1
- package/src/core/cache/Cache.js +3 -3
- package/src/core/cache/LoadingCache.d.ts +1 -1
- package/src/core/cache/LoadingCache.js +2 -2
- package/src/core/cache/wtinylfu/CacheWTinylfu.d.ts +2 -2
- package/src/core/cache/wtinylfu/CacheWTinylfu.js +2 -2
- package/src/core/collection/array/array_index_by_equality.d.ts +2 -2
- package/src/core/collection/array/array_index_by_equality.d.ts.map +1 -1
- package/src/core/collection/array/array_index_by_equality.js +1 -1
- package/src/core/collection/array/array_pick_best_element.d.ts +2 -2
- package/src/core/collection/array/array_pick_best_element.d.ts.map +1 -1
- package/src/core/collection/array/array_pick_best_element.js +1 -1
- package/src/core/collection/array/array_pick_best_elements.d.ts +2 -2
- package/src/core/collection/array/array_pick_best_elements.d.ts.map +1 -1
- package/src/core/collection/array/array_pick_best_elements.js +1 -1
- package/src/core/collection/array/array_set_diff.d.ts +2 -3
- package/src/core/collection/array/array_set_diff.d.ts.map +1 -1
- package/src/core/collection/array/array_set_diff.js +1 -1
- package/src/core/collection/array/array_set_diff_sorting.d.ts +2 -2
- package/src/core/collection/array/array_set_diff_sorting.d.ts.map +1 -1
- package/src/core/collection/array/array_set_diff_sorting.js +1 -1
- package/src/core/collection/array/iterator/ArrayIteratorRandom.d.ts +2 -1
- package/src/core/collection/array/iterator/ArrayIteratorRandom.d.ts.map +1 -1
- package/src/core/collection/heap/BinaryHeap.d.ts +2 -2
- package/src/core/collection/heap/BinaryHeap.d.ts.map +1 -1
- package/src/core/collection/heap/BinaryHeap.js +1 -1
- package/src/core/collection/list/List.d.ts +32 -17
- package/src/core/collection/list/List.d.ts.map +1 -1
- package/src/core/collection/list/List.js +43 -9
- package/src/core/collection/list/SortedListProjection.d.ts.map +1 -1
- package/src/core/collection/list/SortedListProjection.js +4 -1
- package/src/core/collection/map/BiMap.d.ts +25 -2
- package/src/core/collection/map/BiMap.d.ts.map +1 -1
- package/src/core/collection/map/BiMap.js +57 -3
- package/src/core/collection/map/HashMap.d.ts +2 -2
- package/src/core/collection/map/HashMap.d.ts.map +1 -1
- package/src/core/collection/map/HashMap.js +1 -1
- package/src/core/collection/set/ArraySet.d.ts +2 -2
- package/src/core/collection/set/ArraySet.d.ts.map +1 -1
- package/src/core/collection/set/ArraySet.js +1 -1
- package/src/core/collection/table/RowFirstTable.d.ts +2 -2
- package/src/core/collection/table/RowFirstTable.d.ts.map +1 -1
- package/src/core/collection/table/RowFirstTable.js +1 -1
- package/src/core/collection/table/RowFirstTableSpec.js +4 -4
- package/src/core/debug/matchers/IsAnything.d.ts.map +1 -1
- package/src/core/debug/matchers/IsAnything.js +5 -1
- package/src/core/events/signal/Signal.d.ts.map +1 -1
- package/src/core/events/signal/Signal.js +3 -1
- package/src/core/fsm/simple/SimpleStateMachineDescription.d.ts +2 -2
- package/src/core/fsm/simple/SimpleStateMachineDescription.d.ts.map +1 -1
- package/src/core/fsm/simple/SimpleStateMachineDescription.js +1 -1
- package/src/core/geom/2d/bvh/BVH2D.d.ts +2 -2
- package/src/core/geom/2d/bvh/BVH2D.d.ts.map +1 -1
- package/src/core/geom/2d/bvh/BVH2D.js +1 -1
- package/src/core/geom/2d/polygon/TRIANGULATION_DESIGN.md +433 -0
- package/src/core/geom/2d/polygon/polygon2_is_counter_clockwise.d.ts +31 -0
- package/src/core/geom/2d/polygon/polygon2_is_counter_clockwise.d.ts.map +1 -0
- package/src/core/geom/2d/polygon/polygon2_is_counter_clockwise.js +84 -0
- package/src/core/geom/2d/polygon/polygon2_signed_area.d.ts +24 -2
- package/src/core/geom/2d/polygon/polygon2_signed_area.d.ts.map +1 -1
- package/src/core/geom/2d/polygon/polygon2_signed_area.js +52 -34
- package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.d.ts +28 -0
- package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.d.ts.map +1 -0
- package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.js +86 -0
- package/src/core/geom/2d/polygon/polygon2_triangulate.d.ts +40 -0
- package/src/core/geom/2d/polygon/polygon2_triangulate.d.ts.map +1 -0
- package/src/core/geom/2d/polygon/polygon2_triangulate.js +1280 -0
- package/src/core/geom/2d/polygon/polygon2_triangulation_deviation.d.ts +28 -0
- package/src/core/geom/2d/polygon/polygon2_triangulation_deviation.d.ts.map +1 -0
- package/src/core/geom/2d/polygon/polygon2_triangulation_deviation.js +77 -0
- package/src/core/geom/2d/quad-tree/qt_match_data_by_circle.d.ts +2 -2
- package/src/core/geom/2d/quad-tree/qt_match_data_by_circle.d.ts.map +1 -1
- package/src/core/geom/2d/quad-tree/qt_match_data_by_circle.js +1 -1
- package/src/core/geom/2d/quad-tree/qt_query_data_raycast.d.ts +2 -2
- package/src/core/geom/2d/quad-tree/qt_query_data_raycast.d.ts.map +1 -1
- package/src/core/geom/2d/quad-tree/qt_query_data_raycast.js +1 -1
- package/src/core/geom/2d/triangle/tri2_rasterize_conservative.d.ts +6 -3
- package/src/core/geom/2d/triangle/tri2_rasterize_conservative.d.ts.map +1 -1
- package/src/core/geom/2d/triangle/tri2_rasterize_conservative.js +26 -13
- package/src/core/geom/2d/triangle/tri2_signed_area.d.ts +17 -1
- package/src/core/geom/2d/triangle/tri2_signed_area.d.ts.map +1 -1
- package/src/core/geom/2d/triangle/tri2_signed_area.js +35 -23
- package/src/core/geom/2d/v2_morton_encode.d.ts +20 -0
- package/src/core/geom/2d/v2_morton_encode.d.ts.map +1 -0
- package/src/core/geom/2d/v2_morton_encode.js +23 -0
- package/src/core/geom/3d/aabb/AABB3.d.ts +2 -2
- package/src/core/geom/3d/aabb/AABB3.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/AABB3.js +1 -1
- package/src/core/geom/3d/atlas/segment/atlas_merge_charts.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/segment/atlas_merge_charts.js +4 -1
- package/src/core/geom/3d/polygon/polygon3_compute_normal.d.ts +27 -0
- package/src/core/geom/3d/polygon/polygon3_compute_normal.d.ts.map +1 -0
- package/src/core/geom/3d/polygon/polygon3_compute_normal.js +60 -0
- package/src/core/geom/3d/polygon/polygon3_triangulate.d.ts +34 -0
- package/src/core/geom/3d/polygon/polygon3_triangulate.d.ts.map +1 -0
- package/src/core/geom/3d/polygon/polygon3_triangulate.js +94 -0
- package/src/core/geom/3d/quaternion/quat3_multiply.d.ts +8 -2
- package/src/core/geom/3d/quaternion/quat3_multiply.d.ts.map +1 -1
- package/src/core/geom/3d/quaternion/quat3_multiply.js +8 -2
- package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/ConvexHullShape3D.js +32 -2
- package/src/core/geom/3d/tetrahedra/TetrahedralMesh.d.ts +2 -2
- package/src/core/geom/3d/tetrahedra/TetrahedralMesh.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/TetrahedralMesh.js +1 -1
- package/src/core/geom/3d/tetrahedra/delaunay/debug/push_boundary_with_validation.d.ts +2 -5
- package/src/core/geom/3d/tetrahedra/delaunay/debug/push_boundary_with_validation.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/delaunay/debug/push_boundary_with_validation.js +1 -1
- package/src/core/geom/3d/tetrahedra/delaunay/debug/validate_cavity_boundary.d.ts +2 -2
- package/src/core/geom/3d/tetrahedra/delaunay/debug/validate_cavity_boundary.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/delaunay/debug/validate_cavity_boundary.js +1 -1
- package/src/core/geom/3d/tetrahedra/validate_tetrahedral_mesh.d.ts +2 -3
- package/src/core/geom/3d/tetrahedra/validate_tetrahedral_mesh.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/validate_tetrahedral_mesh.js +69 -69
- package/src/core/geom/3d/tetrahedra/validate_tetrahedron_neighbourhood.d.ts +2 -3
- package/src/core/geom/3d/tetrahedra/validate_tetrahedron_neighbourhood.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/validate_tetrahedron_neighbourhood.js +50 -50
- package/src/core/geom/3d/topology/struct/TopoEdge.d.ts +2 -2
- package/src/core/geom/3d/topology/struct/TopoEdge.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/TopoEdge.js +1 -1
- package/src/core/geom/3d/topology/struct/TopoMesh.d.ts +2 -3
- package/src/core/geom/3d/topology/struct/TopoMesh.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/TopoMesh.js +1 -1
- package/src/core/geom/3d/topology/struct/TopoTriangle.d.ts +2 -2
- package/src/core/geom/3d/topology/struct/TopoTriangle.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/TopoTriangle.js +1 -1
- package/src/core/geom/3d/topology/struct/TopoVertex.d.ts +2 -2
- package/src/core/geom/3d/topology/struct/TopoVertex.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/TopoVertex.js +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_triangulate.d.ts +23 -6
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_triangulate.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_triangulate.js +268 -124
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_assert_valid.d.ts +17 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_assert_valid.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_assert_valid.js +44 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_count_edge_faces.d.ts +20 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_count_edge_faces.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_count_edge_faces.js +40 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_is_closed.d.ts +19 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_is_closed.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_is_closed.js +34 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_is_manifold.d.ts +22 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_is_manifold.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_is_manifold.js +37 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_validate.d.ts +87 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_validate.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_validate.js +599 -0
- package/src/core/geom/3d/topology/util/mesh_flood_fill.d.ts +1 -1
- package/src/core/geom/3d/topology/util/mesh_flood_fill.js +1 -1
- package/src/core/geom/3d/triangle/tri3_compute_signed_volume.d.ts +32 -0
- package/src/core/geom/3d/triangle/tri3_compute_signed_volume.d.ts.map +1 -1
- package/src/core/geom/3d/triangle/tri3_compute_signed_volume.js +66 -7
- package/src/core/geom/3d/triangle/tri3_mesh_compute_signed_volume.d.ts +22 -1
- package/src/core/geom/3d/triangle/tri3_mesh_compute_signed_volume.d.ts.map +1 -1
- package/src/core/geom/3d/triangle/tri3_mesh_compute_signed_volume.js +83 -38
- package/src/core/geom/3d/util/aabb3_emit_point_grid.d.ts +2 -2
- package/src/core/geom/3d/util/aabb3_emit_point_grid.d.ts.map +1 -1
- package/src/core/geom/3d/util/aabb3_emit_point_grid.js +1 -1
- package/src/core/geom/MANIFOLD_COMPARISON_2026_08_01.md +554 -0
- package/src/core/geom/Quaternion.d.ts +2 -2
- package/src/core/geom/Quaternion.d.ts.map +1 -1
- package/src/core/geom/Quaternion.js +1 -1
- package/src/core/geom/Vector1.d.ts +2 -2
- package/src/core/geom/Vector1.d.ts.map +1 -1
- package/src/core/geom/Vector1.js +1 -1
- package/src/core/geom/packing/max-rect/find_best_container.d.ts +2 -2
- package/src/core/geom/packing/max-rect/find_best_container.d.ts.map +1 -1
- package/src/core/geom/packing/max-rect/find_best_container.js +1 -1
- package/src/core/geom/vec3/v3_cotangent.d.ts +6 -2
- package/src/core/geom/vec3/v3_cotangent.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_cotangent.js +6 -2
- package/src/core/geom/vec3/v3_cross.d.ts +6 -2
- package/src/core/geom/vec3/v3_cross.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_cross.js +6 -2
- package/src/core/geom/vec3/v3_lerp.d.ts +1 -1
- package/src/core/geom/vec3/v3_lerp.js +1 -1
- package/src/core/geom/vec3/v3_multiply.d.ts +6 -2
- package/src/core/geom/vec3/v3_multiply.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_multiply.js +6 -2
- package/src/core/geom/vec3/v3_subtract.d.ts +6 -2
- package/src/core/geom/vec3/v3_subtract.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_subtract.js +6 -2
- package/src/core/json/abstractJSONSerializer.d.ts +2 -2
- package/src/core/json/abstractJSONSerializer.d.ts.map +1 -1
- package/src/core/json/abstractJSONSerializer.js +1 -1
- package/src/core/lang/reactive/AbstractCachingParser.d.ts +2 -3
- package/src/core/lang/reactive/AbstractCachingParser.d.ts.map +1 -1
- package/src/core/lang/reactive/AbstractCachingParser.js +1 -1
- package/src/core/localization/Localization.d.ts +2 -2
- package/src/core/localization/Localization.d.ts.map +1 -1
- package/src/core/localization/Localization.js +2 -2
- package/src/core/math/noise/create_simplex_noise_2d.d.ts +2 -2
- package/src/core/math/noise/create_simplex_noise_2d.d.ts.map +1 -1
- package/src/core/math/noise/create_simplex_noise_2d.js +1 -1
- package/src/core/math/physics/mie/MIE_PARTICLES_STANDARD.js +1 -1
- package/src/core/math/physics/mie/compute_mie_particle_properties_rgb.d.ts +3 -3
- package/src/core/math/physics/mie/compute_mie_particle_properties_rgb.d.ts.map +1 -1
- package/src/core/math/physics/mie/compute_mie_particle_properties_rgb.js +2 -2
- package/src/core/math/random/randomSeed.d.ts +13 -0
- package/src/core/math/random/randomSeed.d.ts.map +1 -0
- package/src/core/math/random/randomSeed.js +16 -0
- package/src/core/math/random/seededRandom_Mulberry32.d.ts +3 -2
- package/src/core/math/random/seededRandom_Mulberry32.d.ts.map +1 -1
- package/src/core/math/random/seededRandom_Mulberry32.js +1 -1
- package/src/core/math/spline/spline3_hermite_apply_transform.d.ts +50 -0
- package/src/core/math/spline/spline3_hermite_apply_transform.d.ts.map +1 -0
- package/src/core/math/spline/spline3_hermite_apply_transform.js +107 -0
- package/src/core/math/spline/spline3_hermite_reverse.d.ts +34 -0
- package/src/core/math/spline/spline3_hermite_reverse.d.ts.map +1 -0
- package/src/core/math/spline/spline3_hermite_reverse.js +49 -0
- package/src/core/math/statistics/hammersley_sequence.d.ts +17 -4
- package/src/core/math/statistics/hammersley_sequence.d.ts.map +1 -1
- package/src/core/math/statistics/hammersley_sequence.js +25 -16
- package/src/core/model/ModuleRegistry.d.ts +2 -2
- package/src/core/model/ModuleRegistry.d.ts.map +1 -1
- package/src/core/model/ModuleRegistry.js +1 -1
- package/src/core/model/node-graph/json/serializeNodeGraphToJSON.d.ts +1 -1
- package/src/core/model/node-graph/json/serializeNodeGraphToJSON.js +2 -2
- package/src/core/model/object/objectDeepEquals.d.ts +2 -2
- package/src/core/model/object/objectDeepEquals.d.ts.map +1 -1
- package/src/core/model/object/objectDeepEquals.js +1 -1
- package/src/core/model/reactive/model/ReactiveExpression.d.ts +2 -2
- package/src/core/model/reactive/model/ReactiveExpression.d.ts.map +1 -1
- package/src/core/model/reactive/model/ReactiveExpression.js +1 -1
- package/src/core/model/validate_enum_schema.d.ts +2 -3
- package/src/core/model/validate_enum_schema.d.ts.map +1 -1
- package/src/core/model/validate_enum_schema.js +1 -1
- package/src/core/process/Future.d.ts +3 -3
- package/src/core/process/Future.d.ts.map +1 -1
- package/src/core/process/Future.js +13 -1
- package/src/core/process/PromiseWatcher.d.ts.map +1 -1
- package/src/core/process/PromiseWatcher.js +9 -2
- package/src/core/process/executor/ConcurrentExecutor.d.ts.map +1 -1
- package/src/core/process/executor/ConcurrentExecutor.js +12 -2
- package/src/core/process/task/Task.d.ts +3 -3
- package/src/core/process/task/Task.d.ts.map +1 -1
- package/src/core/process/task/Task.js +2 -2
- package/src/core/process/task/util/countTask.d.ts +2 -2
- package/src/core/process/task/util/countTask.d.ts.map +1 -1
- package/src/core/process/task/util/countTask.js +1 -1
- package/src/core/process/task/util/randomCountTask.d.ts +2 -2
- package/src/core/process/task/util/randomCountTask.d.ts.map +1 -1
- package/src/core/process/task/util/randomCountTask.js +1 -1
- package/src/core/process/worker/WorkerProxy.d.ts.map +1 -1
- package/src/core/process/worker/WorkerProxy.js +5 -2
- package/src/core/process/worker/extractTransferables.d.ts.map +1 -1
- package/src/core/process/worker/extractTransferables.js +4 -1
- package/src/engine/Engine.d.ts +12 -12
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +149 -10
- package/src/engine/animation/Animations.d.ts +4 -4
- package/src/engine/animation/Animations.d.ts.map +1 -1
- package/src/engine/animation/Animations.js +2 -2
- package/src/engine/animation/EntityAnimation.d.ts +5 -5
- package/src/engine/animation/EntityAnimation.d.ts.map +1 -1
- package/src/engine/animation/EntityAnimation.js +2 -2
- package/src/engine/animation/TransitionFunctions.d.ts +1 -4
- package/src/engine/animation/TransitionFunctions.d.ts.map +1 -1
- package/src/engine/animation/TransitionFunctions.js +1 -1
- package/src/engine/animation/Tween.d.ts +4 -4
- package/src/engine/animation/Tween.d.ts.map +1 -1
- package/src/engine/animation/Tween.js +2 -2
- package/src/engine/asset/AssetManager.d.ts +6 -6
- package/src/engine/asset/AssetManager.d.ts.map +1 -1
- package/src/engine/asset/AssetManager.js +1411 -1411
- package/src/engine/asset/AssetRequest.d.ts +4 -4
- package/src/engine/asset/AssetRequest.d.ts.map +1 -1
- package/src/engine/asset/AssetRequest.js +3 -3
- package/src/engine/asset/loaders/ArrayBufferLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/ArrayBufferLoader.js +7 -0
- package/src/engine/asset/loaders/AssetLoader.d.ts +3 -3
- package/src/engine/asset/loaders/AssetLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/AssetLoader.js +2 -2
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +0 -10
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
- package/src/engine/ecs/EntityComponentDataset.d.ts +6 -6
- package/src/engine/ecs/EntityComponentDataset.d.ts.map +1 -1
- package/src/engine/ecs/EntityComponentDataset.js +3 -3
- package/src/engine/ecs/EntityManager.d.ts +4 -4
- package/src/engine/ecs/EntityManager.js +4 -4
- package/src/engine/ecs/EntityObserver.d.ts +3 -3
- package/src/engine/ecs/EntityObserver.d.ts.map +1 -1
- package/src/engine/ecs/EntityObserver.js +2 -2
- package/src/engine/ecs/System.d.ts +4 -4
- package/src/engine/ecs/System.d.ts.map +1 -1
- package/src/engine/ecs/System.js +2 -2
- package/src/engine/ecs/dynamic_actions/DynamicActorSystem.d.ts +2 -3
- package/src/engine/ecs/dynamic_actions/DynamicActorSystem.d.ts.map +1 -1
- package/src/engine/ecs/dynamic_actions/DynamicActorSystem.js +1 -1
- package/src/engine/ecs/grid/pick.d.ts +4 -2
- package/src/engine/ecs/grid/pick.d.ts.map +1 -1
- package/src/engine/ecs/grid/pick.js +1 -1
- package/src/engine/ecs/parent/EntityNode.d.ts +4 -4
- package/src/engine/ecs/parent/EntityNode.d.ts.map +1 -1
- package/src/engine/ecs/parent/EntityNode.js +2 -2
- package/src/engine/ecs/speaker/lines/sets/LineSetDescription.d.ts.map +1 -1
- package/src/engine/ecs/speaker/lines/sets/LineSetDescription.js +3 -1
- package/src/engine/ecs/storage/binary/collection/BinaryCollectionDeSerializer.d.ts +2 -2
- package/src/engine/ecs/storage/binary/collection/BinaryCollectionDeSerializer.d.ts.map +1 -1
- package/src/engine/ecs/storage/binary/collection/BinaryCollectionDeSerializer.js +1 -1
- package/src/engine/ecs/storage/binary/collection/BinaryCollectionHeaderCodec.d.ts +1 -2
- package/src/engine/ecs/storage/binary/collection/BinaryCollectionHeaderCodec.d.ts.map +1 -1
- package/src/engine/ecs/systems/AnimationSystem.d.ts +0 -5
- package/src/engine/ecs/systems/AnimationSystem.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/TerrainSystem.d.ts +2 -2
- package/src/engine/ecs/terrain/ecs/TerrainSystem.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/TerrainSystem.js +5 -2
- package/src/engine/ecs/terrain/tiles/TerrainTileManager.d.ts +34 -5
- package/src/engine/ecs/terrain/tiles/TerrainTileManager.d.ts.map +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTileManager.js +87 -26
- package/src/engine/ecs/terrain/util/obtainTerrain.d.ts +2 -3
- package/src/engine/ecs/terrain/util/obtainTerrain.d.ts.map +1 -1
- package/src/engine/ecs/terrain/util/obtainTerrain.js +1 -1
- package/src/engine/ecs/util/hideEntityGracefully.js +2 -2
- package/src/engine/graphics/CONTEXT_LOSS_RECOVERY_PLAN.md +446 -0
- package/src/engine/graphics/FrameRunner.d.ts +2 -2
- package/src/engine/graphics/FrameRunner.d.ts.map +1 -1
- package/src/engine/graphics/FrameRunner.js +1 -1
- package/src/engine/graphics/GraphicsEngine.d.ts +60 -9
- package/src/engine/graphics/GraphicsEngine.d.ts.map +1 -1
- package/src/engine/graphics/GraphicsEngine.js +197 -25
- package/src/engine/graphics/camera/CameraShake.d.ts +6 -6
- package/src/engine/graphics/camera/CameraShake.d.ts.map +1 -1
- package/src/engine/graphics/context/WebGLContextFailureReason.d.ts +9 -0
- package/src/engine/graphics/context/WebGLContextFailureReason.d.ts.map +1 -0
- package/src/engine/graphics/context/WebGLContextFailureReason.js +17 -0
- package/src/engine/graphics/context/WebGLContextMonitor.d.ts +106 -0
- package/src/engine/graphics/context/WebGLContextMonitor.d.ts.map +1 -0
- package/src/engine/graphics/context/WebGLContextMonitor.js +341 -0
- package/src/engine/graphics/context/WebGLContextState.d.ts +14 -0
- package/src/engine/graphics/context/WebGLContextState.d.ts.map +1 -0
- package/src/engine/graphics/context/WebGLContextState.js +24 -0
- package/src/engine/graphics/context/testWebGLContextLoss.d.ts +2 -0
- package/src/engine/graphics/context/testWebGLContextLoss.d.ts.map +1 -0
- package/src/engine/graphics/context/testWebGLContextLoss.js +696 -0
- package/src/engine/graphics/ecs/camera/CameraSystem.d.ts +2 -2
- package/src/engine/graphics/ecs/camera/CameraSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/CameraSystem.js +1 -1
- package/src/engine/graphics/ecs/camera/serialization/CameraSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/serialization/CameraSerializationAdapter.js +68 -32
- package/src/engine/graphics/ecs/camera/serialization/CameraSerializationUpgrader_0_1.d.ts +14 -0
- package/src/engine/graphics/ecs/camera/serialization/CameraSerializationUpgrader_0_1.d.ts.map +1 -0
- package/src/engine/graphics/ecs/camera/serialization/CameraSerializationUpgrader_0_1.js +41 -0
- package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.d.ts +2 -3
- package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.js +2 -2
- package/src/engine/graphics/ecs/light/three/ThreeLightCache.d.ts +1 -1
- package/src/engine/graphics/ecs/light/three/ThreeLightCache.js +1 -1
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts +4 -5
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.js +7 -2
- package/src/engine/graphics/ecs/trail2d/Trail2DSystem.d.ts +1 -1
- package/src/engine/graphics/ecs/trail2d/Trail2DSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail2d/Trail2DSystem.js +2 -1
- package/src/engine/graphics/ecs/trail3d/Trail3DSystem.d.ts +1 -1
- package/src/engine/graphics/ecs/trail3d/Trail3DSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail3d/Trail3DSystem.js +3 -5
- package/src/engine/graphics/geometry/MikkT/BuildNeighborsFast.d.ts.map +1 -1
- package/src/engine/graphics/geometry/MikkT/BuildNeighborsFast.js +3 -2
- package/src/engine/graphics/geometry/MikkT/GenerateSharedVerticesIndexList.d.ts.map +1 -1
- package/src/engine/graphics/geometry/MikkT/GenerateSharedVerticesIndexList.js +3 -1
- package/src/engine/graphics/geometry/computeBoundingSphereFromVertexData.d.ts +2 -2
- package/src/engine/graphics/geometry/computeBoundingSphereFromVertexData.js +1 -1
- package/src/engine/graphics/geometry/computeMeshSurfaceArea.js +1 -1
- package/src/engine/graphics/geometry/instancing/InstancedMeshGroup.d.ts +2 -2
- package/src/engine/graphics/geometry/instancing/InstancedMeshGroup.d.ts.map +1 -1
- package/src/engine/graphics/geometry/instancing/InstancedMeshGroup.js +1 -1
- package/src/engine/graphics/geometry/ribbon/Ribbon.d.ts +2 -2
- package/src/engine/graphics/geometry/ribbon/Ribbon.d.ts.map +1 -1
- package/src/engine/graphics/geometry/ribbon/Ribbon.js +1 -1
- package/src/engine/graphics/load_and_set_cubemap_v0.d.ts +5 -0
- package/src/engine/graphics/load_and_set_cubemap_v0.d.ts.map +1 -1
- package/src/engine/graphics/load_and_set_cubemap_v0.js +26 -21
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +2 -2
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.d.ts +2 -2
- package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +1 -1
- package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.d.ts +2 -2
- package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +1 -1
- package/src/engine/graphics/particles/particular/group/ParticleGroup.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/group/ParticleGroup.js +19 -8
- package/src/engine/graphics/particles/particular/group/optimizeCommandQueue.js +1 -1
- package/src/engine/graphics/render/RendererPool.d.ts +4 -4
- package/src/engine/graphics/render/RendererPool.d.ts.map +1 -1
- package/src/engine/graphics/render/RendererPool.js +2 -2
- package/src/engine/graphics/render/frame_graph/FrameGraph.d.ts +5 -4
- package/src/engine/graphics/render/frame_graph/FrameGraph.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/FrameGraph.js +2 -2
- package/src/engine/graphics/render/layers/RenderLayer.d.ts +2 -2
- package/src/engine/graphics/render/layers/RenderLayer.d.ts.map +1 -1
- package/src/engine/graphics/render/layers/RenderLayer.js +1 -1
- package/src/engine/graphics/render/layers/RenderLayerUtils.js +1 -1
- package/src/engine/graphics/sh3/lightmap/bake_lightmap_for_scene.d.ts +3 -1
- package/src/engine/graphics/sh3/lightmap/bake_lightmap_for_scene.d.ts.map +1 -1
- package/src/engine/graphics/sh3/lightmap/bake_lightmap_for_scene.js +681 -681
- package/src/engine/graphics/sh3/lightmap/lightmap_rasterize_triangle.d.ts +2 -2
- package/src/engine/graphics/sh3/lightmap/lightmap_rasterize_triangle.d.ts.map +1 -1
- package/src/engine/graphics/sh3/lightmap/lightmap_rasterize_triangle.js +145 -145
- package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.d.ts +2 -1
- package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.d.ts.map +1 -1
- package/src/engine/graphics/texture/atlas/AtlasLookupTexture.d.ts.map +1 -1
- package/src/engine/graphics/texture/atlas/AtlasLookupTexture.js +10 -3
- package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts.map +1 -1
- package/src/engine/graphics/texture/atlas/TextureAtlas.js +4 -1
- package/src/engine/graphics/texture/atlas/gpu/WebGLTextureAtlas.d.ts.map +1 -1
- package/src/engine/graphics/texture/atlas/gpu/WebGLTextureAtlas.js +11 -0
- package/src/engine/graphics/texture/cubemap/load_environment_map.d.ts.map +1 -1
- package/src/engine/graphics/texture/cubemap/load_environment_map.js +5 -2
- package/src/engine/graphics/texture/sampler/Sampler2D.d.ts +2 -2
- package/src/engine/graphics/texture/sampler/Sampler2D.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/Sampler2D.js +1 -1
- package/src/engine/graphics/texture/sampler/distance/computeSignedDistanceField_Chamfer.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/distance/computeSignedDistanceField_Chamfer.js +26 -18
- package/src/engine/graphics/texture/sampler/filter/sampler2d_blur_gaussian.d.ts +15 -2
- package/src/engine/graphics/texture/sampler/filter/sampler2d_blur_gaussian.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/filter/sampler2d_blur_gaussian.js +29 -3
- package/src/engine/graphics/texture/sampler/resize/sampler2d_scale_down_lanczos.d.ts +14 -1
- package/src/engine/graphics/texture/sampler/resize/sampler2d_scale_down_lanczos.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/resize/sampler2d_scale_down_lanczos.js +148 -171
- package/src/engine/graphics/texture/sampler/sampler2d_combine.d.ts +2 -2
- package/src/engine/graphics/texture/sampler/sampler2d_combine.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/sampler2d_combine.js +1 -1
- package/src/engine/graphics/texture/sampler/sampler2d_paint.js +1 -1
- package/src/engine/graphics/texture/sampler/util/bitSet2Sampler2D.js +2 -2
- package/src/engine/graphics/texture/virtual/VirtualTextureTileLoader.d.ts +1 -1
- package/src/engine/graphics/texture/virtual/VirtualTextureTileLoader.js +2 -2
- package/src/engine/grid/obstacle/GridObstacle.d.ts +2 -2
- package/src/engine/grid/obstacle/GridObstacle.d.ts.map +1 -1
- package/src/engine/grid/obstacle/GridObstacle.js +1 -1
- package/src/engine/input/ecs/util/TopDownCameraControllerHelper.d.ts.map +1 -1
- package/src/engine/input/ecs/util/TopDownCameraControllerHelper.js +10 -3
- package/src/engine/intelligence/behavior/ecs/BehaviorComponent.d.ts +2 -2
- package/src/engine/intelligence/behavior/ecs/BehaviorComponent.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/ecs/BehaviorComponent.js +1 -1
- package/src/engine/intelligence/behavior/primitive/ActionBehavior.d.ts +3 -3
- package/src/engine/intelligence/behavior/primitive/ActionBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/primitive/ActionBehavior.js +1 -1
- package/src/engine/intelligence/behavior/util/RandomDelayBehavior.d.ts +2 -1
- package/src/engine/intelligence/behavior/util/RandomDelayBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/blackboard/Blackboard.d.ts +4 -4
- package/src/engine/intelligence/blackboard/Blackboard.d.ts.map +1 -1
- package/src/engine/intelligence/blackboard/Blackboard.js +2 -2
- package/src/engine/intelligence/mcts/MonteCarlo.d.ts +17 -15
- package/src/engine/intelligence/mcts/MonteCarlo.d.ts.map +1 -1
- package/src/engine/intelligence/mcts/MonteCarlo.js +345 -345
- package/src/engine/intelligence/mcts/StateNode.d.ts +2 -2
- package/src/engine/intelligence/mcts/StateNode.d.ts.map +1 -1
- package/src/engine/intelligence/mcts/StateNode.js +364 -364
- package/src/engine/intelligence/optimization/RandomOptimizer.d.ts +3 -3
- package/src/engine/intelligence/optimization/RandomOptimizer.d.ts.map +1 -1
- package/src/engine/intelligence/optimization/RandomOptimizer.js +2 -2
- package/src/engine/intelligence/optimization/optimize_cyclic_sequence_pairwise.d.ts +2 -2
- package/src/engine/intelligence/optimization/optimize_cyclic_sequence_pairwise.d.ts.map +1 -1
- package/src/engine/intelligence/optimization/optimize_cyclic_sequence_pairwise.js +1 -1
- package/src/engine/knowledge/database/StaticKnowledgeDataTable.d.ts +4 -5
- package/src/engine/knowledge/database/StaticKnowledgeDataTable.d.ts.map +1 -1
- package/src/engine/knowledge/database/StaticKnowledgeDataTable.js +2 -2
- package/src/engine/navigation/ecs/components/PathSerializationUpgrader_2_3.d.ts +14 -0
- package/src/engine/navigation/ecs/components/PathSerializationUpgrader_2_3.d.ts.map +1 -0
- package/src/engine/navigation/ecs/components/PathSerializationUpgrader_2_3.js +38 -0
- package/src/engine/navigation/ecs/path_following/PathFollowingSystem.d.ts +0 -5
- package/src/engine/navigation/ecs/path_following/PathFollowingSystem.d.ts.map +1 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts.map +1 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeClient.js +433 -425
- package/src/engine/physics/constraint/solve_constraints.d.ts +4 -1
- package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
- package/src/engine/physics/constraint/solve_constraints.js +38 -13
- package/src/engine/physics/contact/ManifoldStore.d.ts +15 -3
- package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -1
- package/src/engine/physics/contact/ManifoldStore.js +15 -3
- package/src/engine/physics/ecs/Joint.d.ts +7 -4
- package/src/engine/physics/ecs/Joint.d.ts.map +1 -1
- package/src/engine/physics/ecs/Joint.js +7 -4
- package/src/engine/physics/ecs/PhysicsSystem.d.ts +14 -0
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +16 -0
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -8
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +3 -7
- package/src/engine/physics/fluid/ecs/FluidSystem.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts +15 -7
- package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/convex_convex_manifold.js +33 -10
- package/src/engine/physics/narrowphase/refine_ray_concave.d.ts +6 -2
- package/src/engine/physics/narrowphase/refine_ray_concave.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/refine_ray_concave.js +6 -2
- package/src/engine/physics/narrowphase/refine_ray_hit.d.ts +6 -2
- package/src/engine/physics/narrowphase/refine_ray_hit.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/refine_ray_hit.js +6 -2
- package/src/engine/physics/queries/raycast.d.ts.map +1 -1
- package/src/engine/physics/queries/raycast.js +11 -4
- package/src/engine/save/GameStateLoader.d.ts +2 -2
- package/src/engine/save/GameStateLoader.d.ts.map +1 -1
- package/src/engine/save/GameStateLoader.js +1 -1
- package/src/engine/save/Storage.d.ts +4 -4
- package/src/engine/save/Storage.d.ts.map +1 -1
- package/src/engine/save/Storage.js +2 -2
- package/src/engine/save/storage/IndexedDBStorage.d.ts.map +1 -1
- package/src/engine/save/storage/IndexedDBStorage.js +24 -5
- package/src/engine/simulation/Ticker.d.ts +12 -0
- package/src/engine/simulation/Ticker.d.ts.map +1 -1
- package/src/engine/simulation/Ticker.js +18 -0
- package/src/engine/sound/simulation/AcousticSimulator.d.ts.map +1 -1
- package/src/engine/sound/simulation/AcousticSimulator.js +9 -1
- package/src/engine/sound/simulation/core/VolumeField.d.ts +6 -2
- package/src/engine/sound/simulation/core/VolumeField.d.ts.map +1 -1
- package/src/engine/sound/simulation/core/VolumeField.js +6 -2
- package/src/engine/sound/simulation/probe/AcousticProbeField.d.ts +6 -2
- package/src/engine/sound/simulation/probe/AcousticProbeField.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/AcousticProbeField.js +6 -2
- package/src/engine/sound/simulation/probe/acoustic_probe_transfer.d.ts +6 -2
- package/src/engine/sound/simulation/probe/acoustic_probe_transfer.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/acoustic_probe_transfer.js +6 -2
- package/src/engine/sound/simulation/probe/bakeProbeReflectors.d.ts +3 -1
- package/src/engine/sound/simulation/probe/bakeProbeReflectors.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/bakeProbeReflectors.js +3 -1
- package/src/engine/sound/simulation/prototypeAcousticSolver.js +1652 -1652
- package/src/engine/sound/sopra/util/buildAttenuationCurve.d.ts +2 -2
- package/src/engine/sound/sopra/util/buildAttenuationCurve.d.ts.map +1 -1
- package/src/engine/sound/sopra/util/buildAttenuationCurve.js +40 -40
- package/src/engine/ui/GUIEngine.d.ts.map +1 -1
- package/src/engine/ui/GUIEngine.js +8 -1
- package/src/engine/ui/notification/NotificationManager.d.ts +5 -5
- package/src/engine/ui/notification/NotificationManager.d.ts.map +1 -1
- package/src/engine/ui/notification/NotificationManager.js +4 -4
- package/src/engine/ui/tiles2d/TileGrid.d.ts +2 -2
- package/src/engine/ui/tiles2d/TileGrid.d.ts.map +1 -1
- package/src/engine/ui/tiles2d/TileGrid.js +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterSimplexNoise.d.ts +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterSimplexNoise.js +1 -1
- package/src/generation/grid/generation/road/GridTaskGenerateRoads.js +2 -2
- package/src/generation/grid/generation/util/buildPathFromDistanceMap.d.ts +1 -1
- package/src/generation/grid/generation/util/buildPathFromDistanceMap.js +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.d.ts +2 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.d.ts.map +1 -1
- package/src/generation/markers/actions/probability/MarkerNodeActionSelectWeighted.d.ts +2 -1
- package/src/generation/markers/actions/probability/MarkerNodeActionSelectWeighted.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformRotateRandom.d.ts +2 -1
- package/src/generation/markers/transform/MarkerNodeTransformRotateRandom.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerRecordPropertyClosure.d.ts +4 -3
- package/src/generation/markers/transform/MarkerNodeTransformerRecordPropertyClosure.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerRecordPropertyClosure.js +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerRecordUniqueRandomEnum.d.ts +2 -1
- package/src/generation/markers/transform/MarkerNodeTransformerRecordUniqueRandomEnum.d.ts.map +1 -1
- package/src/generation/theme/TerrainTheme.d.ts.map +1 -1
- package/src/generation/theme/TerrainTheme.js +2 -1
- package/src/generation/theme/ThemeEngine.d.ts.map +1 -1
- package/src/generation/theme/ThemeEngine.js +6 -5
- package/src/view/ViewGroup.d.ts.map +1 -1
- package/src/view/ViewGroup.js +9 -7
- package/src/view/common/VirtualListView.d.ts +1 -1
- package/src/view/common/VirtualListView.js +1 -1
- package/src/view/graphics/WebGLContextFailureView.d.ts +19 -0
- package/src/view/graphics/WebGLContextFailureView.d.ts.map +1 -0
- package/src/view/graphics/WebGLContextFailureView.js +76 -0
- package/src/view/minimap/Minimap.d.ts +8 -0
- package/src/view/minimap/Minimap.d.ts.map +1 -1
- package/src/view/minimap/Minimap.js +16 -3
- package/src/view/minimap/dom/MinimapMarkerView.d.ts.map +1 -1
- package/src/view/minimap/dom/MinimapMarkerView.js +3 -1
- package/src/view/tooltip/gml/compiler/GMLReferenceCompiler.d.ts +2 -2
- package/src/view/tooltip/gml/compiler/GMLReferenceCompiler.d.ts.map +1 -1
- package/src/view/tooltip/gml/compiler/GMLReferenceCompiler.js +1 -1
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
# Adversarial verification — `view.md` (6 CRITICAL + 26 MAJOR) and `engine-misc.md` (13 MAJOR)
|
|
2
|
+
|
|
3
|
+
Method: jest 29.7 with `--config jest.conf.json` from `H:/git/moh`, throwaway `__advcheck_*.spec.js` files
|
|
4
|
+
(all deleted afterwards, `find app/src -name "__advcheck*"` shows only other agents' files remaining).
|
|
5
|
+
jsdom is available (`jest-environment-jsdom` installed); view specs used `@jest-environment jsdom`.
|
|
6
|
+
|
|
7
|
+
Two environment facts established up front, both of which matter for several verdicts:
|
|
8
|
+
|
|
9
|
+
- **`assert.*` is LIVE under jest.** Stripping is done only by webpack's `UNASSERT_RULE`, which is pushed
|
|
10
|
+
only when `argv.mode === "production"` (`H:/git/moh/webpack.config.js:100-106`). `ENV_PRODUCTION` in
|
|
11
|
+
`jest.conf.json` is inert — `core/assert.js` never reads it. So where a finding's failure mode is masked
|
|
12
|
+
by an assert under test but exposed in prod, I transcribed the post-unassert code instead of running the
|
|
13
|
+
original (VIEW-27).
|
|
14
|
+
- **`View` base-class facts** (`H:/git/moh/app/src/mir-engine/meep/src/view/View.js`): `View` **does** define
|
|
15
|
+
`addChild` (:365), `removeChild` (:433), `removeAllChildren` (:461), `bindSignal` (:610), `isLinked`
|
|
16
|
+
getter (:138) and `children` as a plain array class-field (:107). It does **not** define `update`.
|
|
17
|
+
`unlink()` calls `clearFlag(ViewFlags.Linked)` at :325 and only then `this.on.unlinked.send0()` at :347 —
|
|
18
|
+
confirmed by execution (`isLinked` observed as `false` inside an `on.unlinked` handler). Every finding that
|
|
19
|
+
depends on that ordering is therefore correctly grounded, not an assumption.
|
|
20
|
+
`Signal.send0` iterates `handlers.values()` of a `Map` (`core/events/signal/Signal.js:389`), so an entry
|
|
21
|
+
deleted mid-dispatch by an earlier handler is skipped, and each handler body is wrapped in `try/catch` +
|
|
22
|
+
`console.error` (:405-408) — the "swallowed by Signal" claims are accurate.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## `view.md` — CRITICAL
|
|
27
|
+
|
|
28
|
+
### VIEW-1
|
|
29
|
+
- **Verdict**: CONFIRMED
|
|
30
|
+
- **Evidence**: Executed. Built a real `DomTooltipManager` over a stub tip manager, called
|
|
31
|
+
`mgr.manage(button, factory)` on a real `EmptyView`, instrumented `button.el.addEventListener` /
|
|
32
|
+
`removeEventListener`. Link → `added=2`. Unlink via `root.removeChild(button)` → `removed=0`.
|
|
33
|
+
Re-link → `added=4`. The `mouseenter`/`mouseleave` pair is never detached and a second observer with a
|
|
34
|
+
second pair is created on the next link, exactly as described.
|
|
35
|
+
Mechanism verified in source: `DomTooltipManager.manage` (`tooltip/DomTooltipManager.js:109-117`)
|
|
36
|
+
subscribes its `on.unlinked` handler *before* `observer.link()` subscribes `__handleViewUnlinked`
|
|
37
|
+
(`tooltip/DomTooltipObserver.js:152`), so manage's handler runs first, calls `remove()` → `observer.unlink()`
|
|
38
|
+
→ guard `if (view.isLinked)` at :159 is false (flag already cleared) → teardown skipped, and
|
|
39
|
+
`view.on.unlinked.remove(this.__handleViewUnlinked, this)` at :164 deletes the not-yet-visited Map entry.
|
|
40
|
+
|
|
41
|
+
### VIEW-2
|
|
42
|
+
- **Verdict**: CONFIRMED
|
|
43
|
+
- **Evidence**: Executed `require('./elements/image/SvgImageView.js')` →
|
|
44
|
+
`Cannot find module '../../../core/geom/AABB2.js'`. `ls core/geom/AABB2.js` → no such file;
|
|
45
|
+
the real path is `core/geom/2d/aabb/AABB2.js`. Part (b) also holds by reading:
|
|
46
|
+
`update()` (`SvgImageView.js:64-68`) references the free identifiers `resize` and `self`, both of which are
|
|
47
|
+
declared inside the constructor (`:25`, `:39`); `link()` (:70-73) calls `this.update()` unconditionally.
|
|
48
|
+
|
|
49
|
+
### VIEW-3
|
|
50
|
+
- **Verdict**: CONFIRMED (accepted from lead reviewer, not re-checked)
|
|
51
|
+
|
|
52
|
+
### VIEW-4
|
|
53
|
+
- **Verdict**: CONFIRMED
|
|
54
|
+
- **Evidence**: Executed `MinimapTerrainView.prototype.__setTerrain.call(undefined, terrain, null)` →
|
|
55
|
+
`ReferenceError: updatePreview is not defined`. And `.call(undefined, null, terrain)` →
|
|
56
|
+
`TypeError: Cannot read properties of null (reading 'preview')`. Source confirms
|
|
57
|
+
`updatePreview` is a constructor-local function declaration (`minimap/dom/MinimapTerrainView.js:109`) and the
|
|
58
|
+
subscription at :126 is `this.terrain.onChanged.add(this.__setTerrain)` with no context argument.
|
|
59
|
+
|
|
60
|
+
### VIEW-5
|
|
61
|
+
- **Verdict**: CONFIRMED (accepted from lead reviewer; independently re-executed anyway)
|
|
62
|
+
- **Evidence**: `g.remove(view)` threw `TypeError`; `g.connect(c1); g.connect(c2)` left
|
|
63
|
+
`c1.children.length === 2` (duplicate) and `c2.children.length === 1`.
|
|
64
|
+
|
|
65
|
+
### VIEW-6
|
|
66
|
+
- **Verdict**: CONFIRMED
|
|
67
|
+
- **Evidence**: Executed `MinimapView.prototype.clear.call({__cameraViews:[camA,camB], __worldView})` against a
|
|
68
|
+
real `EmptyView` world view already holding both cameras: children went 2 → **4** → **6** across two
|
|
69
|
+
`clear()` calls. `minimap/Minimap.js:183-188` is `this.__worldView.addChild(v)` under a
|
|
70
|
+
"remove all existing markers" comment, called from `unlink()` at :236 *after* `super.unlink()` (so the
|
|
71
|
+
`child is already linked` assert does not fire and even the dev build is affected).
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## `view.md` — MAJOR
|
|
76
|
+
|
|
77
|
+
### VIEW-7
|
|
78
|
+
- **Verdict**: CONFIRMED
|
|
79
|
+
- **Evidence**: `task/TaskProgressView.js:129` reads
|
|
80
|
+
`const estimate = Number.isNaN(computedEstimate) ? 0 : computedProgressValue;`. Executed the expression with
|
|
81
|
+
`computedProgressValue = 0.2`, `computedEstimate = 48` → `estimate === 0.2`, and `(0.2).toFixed(0) === "0"`,
|
|
82
|
+
matching the "0 seconds remaining for the whole load" symptom. The label formatter at :100 is `v.toFixed(0)`.
|
|
83
|
+
|
|
84
|
+
### VIEW-8
|
|
85
|
+
- **Verdict**: CONFIRMED
|
|
86
|
+
- **Evidence**: `elements/ColorPickerView.js:291-293` is `if (_v !== null) { v.onChanged.remove(...) }`.
|
|
87
|
+
Executed a literal transcription over two stub colours: after `handler(b, a)` the **old** value `a` still has
|
|
88
|
+
1 listener and the **new** value `b` has 0. `handler(null, b)` threw `TypeError`.
|
|
89
|
+
|
|
90
|
+
### VIEW-9
|
|
91
|
+
- **Verdict**: CONFIRMED
|
|
92
|
+
- **Evidence**: `writeLocks` is declared `{h,s,l,a}` at `:156-161`; the `colorV` handler tests and sets
|
|
93
|
+
`writeLocks.v` (`:215`, `:224`, `:229`); `modelValueChanged` guards on `h||s||l||a` (`:257`). Executed:
|
|
94
|
+
with `writeLocks.v = true`, the `modelValueChanged` guard evaluates to "run" — so the model→gauge writeback
|
|
95
|
+
is not suppressed while a V write is in flight, and `rgb2hsv(0,0,0)` snaps H and S to 0.
|
|
96
|
+
|
|
97
|
+
### VIEW-10
|
|
98
|
+
- **Verdict**: CONFIRMED
|
|
99
|
+
- **Evidence**: Executed a real `Vector1Control` linked under a real parent. `c.model.set(new Vector1(5))` →
|
|
100
|
+
number field shows 5. External `v1.set(42)` → model is 42, number field is still **5**.
|
|
101
|
+
`controller/controls/Vector1Control.js:67` is `v1.onChanged.add(writeBack)` where `writeBack` is the
|
|
102
|
+
controller→model direction; `syncForward` is only called once inside `subscribe`.
|
|
103
|
+
|
|
104
|
+
### VIEW-11
|
|
105
|
+
- **Verdict**: CONFIRMED
|
|
106
|
+
- **Evidence**: Executed a real `ListController` with a stub `GuiControl` factory. After `list.add(item)` the
|
|
107
|
+
container had 1 row; after `list.removeOneOf(item)` it still had **1** row in `children` and 1 node in the
|
|
108
|
+
DOM. `controller/controls/ListController.js:69` removes `guiControl`, which is a child of the
|
|
109
|
+
`vElementContainer` wrapper created at :48, not of `vContainer`.
|
|
110
|
+
|
|
111
|
+
### VIEW-12
|
|
112
|
+
- **Verdict**: CONFIRMED
|
|
113
|
+
- **Evidence**: Executed `initializeFromElement` on an `<img class="icon" style="filter:grayscale(1)">`:
|
|
114
|
+
`el.style.length === 1` but `key.style.length === 0`. `common/HTMLElementCacheKey.js:201` declares an inner
|
|
115
|
+
`let i` shadowing the outer `let i = 0` at :189, so the `splice(i, this.style.length - i)` at :217 truncates
|
|
116
|
+
from index 0. The attribute loop at :224 uses `for (i = ...)` without `let`, confirming the intent.
|
|
117
|
+
|
|
118
|
+
### VIEW-13
|
|
119
|
+
- **Verdict**: CONFIRMED
|
|
120
|
+
- **Evidence**: Executed. `new TabbedView({tabs})` → `children.length === 0`, `el.children.length === 0`,
|
|
121
|
+
`hasChild(__panelContainer) === false`, `hasChild(__toggleContainer) === false`. With one tab definition and
|
|
122
|
+
the view linked under a document-attached parent, `t.el.outerHTML === "<div></div>"`. Renders nothing,
|
|
123
|
+
as claimed. Neither the constructor (`common/TabbedView.js:49-57`) nor `link()` (:60-67) attaches the
|
|
124
|
+
containers.
|
|
125
|
+
|
|
126
|
+
### VIEW-14
|
|
127
|
+
- **Verdict**: CONFIRMED
|
|
128
|
+
- **Evidence**: Executed the `enforceAspectRatio` arithmetic. Viewport 200×100 (vAR 0.5), region 100×100:
|
|
129
|
+
result 150×100, ratio **0.667** vs target 0.5. Control on the other branch (region 100×25) → exactly 0.5.
|
|
130
|
+
The width branch is not the mirror of the height branch, as claimed
|
|
131
|
+
(`minimap/gl/MinimapFogOfWar.js:31-35`).
|
|
132
|
+
|
|
133
|
+
### VIEW-15
|
|
134
|
+
- **Verdict**: CONFIRMED
|
|
135
|
+
- **Evidence**: Executed a real `ListView` with `filter: e => e.visible` over `[A(visible), C(hidden)]`;
|
|
136
|
+
`model.insert(1, B)` produced exactly
|
|
137
|
+
`TypeError: Cannot read properties of undefined (reading 'el')` inside `insertOne`, logged and swallowed by
|
|
138
|
+
`Signal`, leaving DOM order `[A, B]` with B appended rather than inserted. `common/ListView.js:192-194`
|
|
139
|
+
dereferences `getChildByElement(nextElement).el` and `getChildByElement` is `this.viewMapping.get(el)`
|
|
140
|
+
(:277-279) on a plain `Map` (:124), so it returns `undefined` for a filtered-out element.
|
|
141
|
+
|
|
142
|
+
### VIEW-16
|
|
143
|
+
- **Verdict**: CONFIRMED
|
|
144
|
+
- **Evidence**: Executed with a stub `ResizeObserver` that records `observe`/`unobserve`. `attach(a); start();`
|
|
145
|
+
→ observed `[A]`. `attach(b)` → observed still `[A]`, while `o.element === b`.
|
|
146
|
+
`util/DomSizeObserver.js:147-153` assigns before unobserving and never calls `observe`.
|
|
147
|
+
Note: the impact requires re-attaching while running — the in-repo `DomTooltipObserver` path always attaches
|
|
148
|
+
before `start()` — but `attach()` is public and the described defect is literal.
|
|
149
|
+
|
|
150
|
+
### VIEW-17
|
|
151
|
+
- **Verdict**: CONFIRMED
|
|
152
|
+
- **Evidence**: `elements/SimpleWindow.js:54-57` captures `anchor` on pointer-down (:66) and never advances it,
|
|
153
|
+
while the move handler does `view.size.add(position.clone().sub(anchor))`. Executed the arithmetic for a
|
|
154
|
+
10 px drag delivered as 5 moves → width grew by **30 px**, not 10. The sibling
|
|
155
|
+
`elements/BottomLeftResizeHandleView.js` does `lastPosition.copy(position)` each move, confirming intent.
|
|
156
|
+
|
|
157
|
+
### VIEW-18
|
|
158
|
+
- **Verdict**: CONFIRMED
|
|
159
|
+
- **Evidence**: Executed a real `ToastLogView` with two real `NotificationView`-compatible models.
|
|
160
|
+
After 1 notification `children.length === 2`; after 2, `children.length === 4` with positions
|
|
161
|
+
`[-48, -48, -0, -0]` — i.e. A at −48 instead of −24, exactly the 24 px gap described.
|
|
162
|
+
`elements/notify/ToastLogView.js:47` reassigns `this.children = []` and :72/:74 do both `addChild` and a
|
|
163
|
+
manual `push`.
|
|
164
|
+
|
|
165
|
+
### VIEW-19
|
|
166
|
+
- **Verdict**: CONFIRMED
|
|
167
|
+
- **Evidence**: `grep` over `elements/radial/RadialProgressView.js` returns **no** occurrence of `bindSignal`,
|
|
168
|
+
`unlink` or `destroy`. The subscriptions at :59, :64-65, :73, :76 are raw `add` calls on caller-supplied
|
|
169
|
+
models with no counterpart anywhere in the class.
|
|
170
|
+
|
|
171
|
+
### VIEW-20
|
|
172
|
+
- **Verdict**: CONFIRMED
|
|
173
|
+
- **Evidence**: `interaction/createInterfaceCommandButton.js:91-95` adds raw `on.added`/`on.removed`
|
|
174
|
+
subscriptions, and :98-99 add the same two handlers again via `button.bindSignal`. Verified the `if` is
|
|
175
|
+
always taken: `InteractionCommand`'s constructor unconditionally does `this.features = new List(features)`,
|
|
176
|
+
so `interaction.features` is never `undefined`. Nothing removes the raw pair.
|
|
177
|
+
|
|
178
|
+
### VIEW-21
|
|
179
|
+
- **Verdict**: CONFIRMED
|
|
180
|
+
- **Evidence**: (a) `elements/MeshPreview.js:229-233` attaches a fresh `self.pContents.then(...)` inside
|
|
181
|
+
`link()`; `pContents` is created once in the constructor (:107) and settles once, so every subsequent link
|
|
182
|
+
runs `__addInteraction` again, which constructs a new `PointerDevice` and calls `start()` (:78-79).
|
|
183
|
+
`unlink()` (:257-272) releases only the renderer — no `pointer.stop()`, no handler removal.
|
|
184
|
+
(b) `this.camera = null` at :45 and is assigned only inside the async asset callback at :142, while
|
|
185
|
+
`__update_renderer_size` (:204-210) guards on `this.renderer !== null` and then writes `this.camera.aspect`.
|
|
186
|
+
`this.bindSignal(this.size.onChanged, this.__update_renderer_size, this)` (:206) makes that reachable
|
|
187
|
+
post-link, pre-load.
|
|
188
|
+
|
|
189
|
+
### VIEW-22
|
|
190
|
+
- **Verdict**: CONFIRMED
|
|
191
|
+
- **Evidence**: `renderModel.js:85-92` stores `focus: focus, size: size` by reference and `findInCache`
|
|
192
|
+
compares `piece.size.equals(size)` (:24). `common/MeshView.js:61` passes `this.size` / `this.focus` directly.
|
|
193
|
+
Executed the aliasing: a cache entry holding the caller's live `Vector2` still matches after the caller
|
|
194
|
+
mutates it to a different size. No eviction — `cache.push` is the only mutation of `cache`.
|
|
195
|
+
|
|
196
|
+
### VIEW-23
|
|
197
|
+
- **Verdict**: CONFIRMED
|
|
198
|
+
- **Evidence**: `common/MeshView.js` contains **zero** occurrences of `model.onChanged` (checked over the file
|
|
199
|
+
text). `update()` (:72-78) compares only `size` and `focus` against `renderedParams`, and `link()` binds only
|
|
200
|
+
`this.size.onChanged`.
|
|
201
|
+
|
|
202
|
+
### VIEW-24
|
|
203
|
+
- **Verdict**: CONFIRMED
|
|
204
|
+
- **Evidence**: Executed the exact arithmetic from
|
|
205
|
+
`elements/progress/RectangularPieProgressView.js:55-107` for `size 100×50, fraction 0.13` (branch 2, right
|
|
206
|
+
edge): `segment2_segment_compute_intersection_array_2d` returned **false**, `p` stayed empty, and the path
|
|
207
|
+
string was
|
|
208
|
+
`M 50 0 L 50 25 L undefined undefined L 100 50 L 0 50 L 0 0 Z`. Control at 64×64 with the same fraction
|
|
209
|
+
returned `true` with a valid point. Confirms the thresholds encode a 45° corner that only exists on squares.
|
|
210
|
+
(The report itself notes the single in-repo caller sizes it 64×64.)
|
|
211
|
+
|
|
212
|
+
### VIEW-25
|
|
213
|
+
- **Verdict**: CONFIRMED
|
|
214
|
+
- **Evidence**: Executed `EmptyView.absolute({css:{width:'100px',backgroundColor:'red'}})` →
|
|
215
|
+
`el.style.cssText === "position: absolute; top: 0px; left: 0px;"`; `width` and `backgroundColor` are empty.
|
|
216
|
+
`elements/EmptyView.js:62-65` is the shorthand `css: { css, ...CSS_ABSOLUTE_POSITIONING }`.
|
|
217
|
+
|
|
218
|
+
### VIEW-26
|
|
219
|
+
- **Verdict**: CONFIRMED
|
|
220
|
+
- **Evidence**: `elements/tiles2d/TileGrid.js:134-135` are raw `model.tiles.on.added.add(this.addTile, this)` /
|
|
221
|
+
`.on.removed.add(...)`. The file contains **no** `unlink()` override, and `grep` finds **no** occurrence of
|
|
222
|
+
`removeTarget` or `removeElement` anywhere in it, while `addTarget` (:307) and `addElement` (:381) are called
|
|
223
|
+
per slot / per tile. Confirmed the context does not self-clean: `common/dnd/DragAndDropContext.js` exposes
|
|
224
|
+
`removeTarget` (:57) and `removeElement` (:91) as explicit calls with no view-lifecycle hook.
|
|
225
|
+
`removeTile` (:411-419) passes the result of `findTileView` straight into `removeChild` and
|
|
226
|
+
`__hookTileRemoved`, so `undefined` propagates when the tile is unknown.
|
|
227
|
+
|
|
228
|
+
### VIEW-27
|
|
229
|
+
- **Verdict**: CONFIRMED
|
|
230
|
+
- **Evidence**: `common/LocalizedLabelView.js:122-154`. The `try` covers only :136; :143
|
|
231
|
+
(`localization.locale.getValue()`) and the `$el.text(value)` fallback at :146 are outside it.
|
|
232
|
+
Because asserts at :130-131 are stripped in production, I executed a post-unassert transcription:
|
|
233
|
+
result `TypeError: Cannot read properties of null (reading 'locale')`, **no** text written to the element,
|
|
234
|
+
`needsUpdate` left `true`. Reachability verified: `localization=null` is the constructor default of
|
|
235
|
+
`TaskProgressView` (`task/TaskProgressView.js:20`) and is forwarded to the `LocalizedLabelView` at :29-33;
|
|
236
|
+
`needsUpdate` is initialised `true` at LocalizedLabelView:57 so the `on.linked` handler at :59-68 calls
|
|
237
|
+
`update()` on the first link.
|
|
238
|
+
|
|
239
|
+
### VIEW-28
|
|
240
|
+
- **Verdict**: CONFIRMED
|
|
241
|
+
- **Evidence**: `minimap/gl/MarkerGL.js:57-87`. `updateIcon` releases `this.patch` **before** awaiting
|
|
242
|
+
`atlasManager.acquire`, the continuation does `this.patch = patch;` and only then
|
|
243
|
+
`if (!this.active) return;` — the freshly acquired reference is never released on that path.
|
|
244
|
+
`this.patch = Reference.NULL` initially (:32) and `shutdown()` (:109-118) sets `active = false` and releases
|
|
245
|
+
whatever `this.patch` currently is, which on the racing path is still `Reference.NULL`. The overlapping-call
|
|
246
|
+
double-release / overwrite variant follows from the same ordering.
|
|
247
|
+
|
|
248
|
+
### VIEW-29
|
|
249
|
+
- **Verdict**: CONFIRMED
|
|
250
|
+
- **Evidence**: `common/dnd/DropTarget.js:43` subscribes `attachDropValidityIndicators`' `handleDragEnter` to
|
|
251
|
+
`dropTarget.on.enter`; that handler (:72-92) creates a fresh `SignalBinding` and pushes into `current`
|
|
252
|
+
unconditionally, while `removeDraggable` (:49-66) removes exactly one record per call. The DOM
|
|
253
|
+
`handleDragEnter` (:212-221) pushes into `isInState_ENTER` unconditionally and `handleDragLeave` (:227-236)
|
|
254
|
+
does `isInState_ENTER.splice(indexOf(e), 1)` with no `-1` check (`splice(-1,1)` removes the last element).
|
|
255
|
+
The double-fire premise is real: `common/dnd/Draggable.js:103-106` explicitly routes `dragEnter` to
|
|
256
|
+
`self.parent.__eventHandlers.handleDragEnter(event)` in addition to bubbling.
|
|
257
|
+
|
|
258
|
+
### VIEW-30
|
|
259
|
+
- **Verdict**: CONFIRMED
|
|
260
|
+
- **Evidence**: Executed `TooltipManager.prototype.buildTipView` against a stub GML with a throwing factory:
|
|
261
|
+
the call log was `push,set:false` — `popState()` never ran, leaving `depth === 1` and
|
|
262
|
+
`getTooltipsEnabled() === false` permanently. `tooltip/TooltipManager.js:132-138` has no `try/finally`,
|
|
263
|
+
whereas `tooltip/gml/GMLEngine.js` uses `try { … } finally { this.popState(); }` in both compile paths.
|
|
264
|
+
|
|
265
|
+
### VIEW-31
|
|
266
|
+
- **Verdict**: CONFIRMED
|
|
267
|
+
- **Evidence**: `elements/radial/RadialMenu.js:194-223`: `init()` body contains `this.elements = []` and
|
|
268
|
+
`this.vElementContainer.addChild(element)` and **no** `removeAllChildren`/`removeChild` (verified by slicing
|
|
269
|
+
the method body out of the source and matching). `elements/RadialMenuElement.js:70` is
|
|
270
|
+
`this.addChild(description.iconView)`, and `View.addChild` re-parents (`View.js:373-380`:
|
|
271
|
+
`child.parent = this; this.el.appendChild(child.el)`), so a shared definition's icon is moved between menus.
|
|
272
|
+
|
|
273
|
+
### VIEW-32
|
|
274
|
+
- **Verdict**: CONFIRMED-BUT-DOWNGRADED
|
|
275
|
+
- **Corrected severity**: MINOR
|
|
276
|
+
- **Evidence**: The mechanism is real and executed:
|
|
277
|
+
`"button-" + "cancel all now".replace(' ', '-')` → `"button-cancel-all now"`, and
|
|
278
|
+
`classList.add("button-cancel-all now")` throws `InvalidCharacterError` in jsdom.
|
|
279
|
+
- **Reason** (ground 5, severity inflation): the trigger needs an option `name` containing **two or more**
|
|
280
|
+
spaces. Every in-repo construction site passes single-token names — `engine/ui/GUIEngine.js:264-274`
|
|
281
|
+
(`"yes"`, `"no"`) and `:352-357` (`"ok"`). Names with one space work fine. This is a latent public-API
|
|
282
|
+
hazard, not a MAJOR-blast-radius defect.
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## `engine-misc.md` — MAJOR
|
|
287
|
+
|
|
288
|
+
### EMISC-1
|
|
289
|
+
- **Verdict**: CONFIRMED
|
|
290
|
+
- **Evidence**: `save/storage/IndexedDBStorage.js:98-128`. `store()` attaches `success`/`error` to the
|
|
291
|
+
**request** (`idbRequest.addEventListener('success', …)` at :110) and never holds or listens on the
|
|
292
|
+
transaction, so a post-request `abort`/`error` at commit time notifies nobody. `remove` (:45-76) has the same
|
|
293
|
+
shape. The file header's `TODO add QuotaExceededError handling` corroborates rather than excuses it.
|
|
294
|
+
|
|
295
|
+
### EMISC-2
|
|
296
|
+
- **Verdict**: CONFIRMED
|
|
297
|
+
- **Evidence**: Executed.
|
|
298
|
+
`new Engine(new InMemoryEnginePlatform(), {enableAudio:false, enableGraphics:false})` → `e.sound === undefined`;
|
|
299
|
+
`e.start()` threw synchronously with `TypeError: Cannot read properties of undefined (reading 'start')`.
|
|
300
|
+
`Engine.js:584` evaluates `this.sound.start()` while building the `Promise.all` array, whereas the
|
|
301
|
+
constructor (:290-302) and `#initialize_audio()` (:421-424) both guard.
|
|
302
|
+
|
|
303
|
+
### EMISC-3
|
|
304
|
+
- **Verdict**: CONFIRMED
|
|
305
|
+
- **Evidence**: Executed. Same engine with `enableGraphics:false` → `e.graphics === undefined`; `e.render()`
|
|
306
|
+
threw `TypeError: Cannot read properties of undefined (reading 'autoDraw')`.
|
|
307
|
+
`Engine.js:544` reads `graphics.autoDraw` before the `if (graphics && …)` guard at :549.
|
|
308
|
+
|
|
309
|
+
### EMISC-4
|
|
310
|
+
- **Verdict**: CONFIRMED (accepted from lead reviewer; independently re-executed)
|
|
311
|
+
- **Evidence**: `await engine.stop()` on a freshly constructed engine threw `Error: Not currently running`
|
|
312
|
+
from `Ticker.pause()` (`simulation/Ticker.js:261-263`), before any of the four shutdown steps.
|
|
313
|
+
Also verified the supporting claims: `Ticker.#isUpdateLoopActive()` requires both handles
|
|
314
|
+
(`Ticker.js:114-116`), `Ticker.start()` discards its first `requestAnimationFrame` handle (:250), and
|
|
315
|
+
`Engine.js:616-630` stores no handle for `#animation_frame` so it is never cancellable.
|
|
316
|
+
|
|
317
|
+
### EMISC-5
|
|
318
|
+
- **Verdict**: CONFIRMED
|
|
319
|
+
- **Evidence**: `Engine.js:607-609` — the second argument to `.then` is
|
|
320
|
+
`function (e) { logger.error(...) }`, which returns `undefined`. Executed the same shape:
|
|
321
|
+
the resulting promise settles **fulfilled with `undefined`**, and the success branch (ticker start at :599,
|
|
322
|
+
options load at :603) is skipped.
|
|
323
|
+
|
|
324
|
+
### EMISC-6
|
|
325
|
+
- **Verdict**: CONFIRMED
|
|
326
|
+
- **Evidence**: Executed against the real `Clock`. `start(); spin 20ms; pause()` → elapsed 0.0194.
|
|
327
|
+
`spin 50ms; pause()` again (already paused) → elapsed 0.0693 — 50 ms injected while stopped.
|
|
328
|
+
`Clock.js:87-91` calls the module-level `updateElapsedTime(this)` (:8-13), bypassing the `__isRunning` guard
|
|
329
|
+
in `Clock.updateElapsedTime()` (:108-113).
|
|
330
|
+
Second instance also executed: a fresh `Clock` (elapsed 0, `__lastMeasurement` 0) after a single `pause()`
|
|
331
|
+
reports elapsed **0.9917 s** against `current_time_in_seconds() === 0.9917` — i.e. seconds since page load.
|
|
332
|
+
`Ticker`'s constructor does exactly this (`simulation/Ticker.js:71-73`), and `Ticker.start()`'s
|
|
333
|
+
`getDelta()`/`clock.start()` do not clear it (both leave `elapsedTime` untouched while `__isRunning` is false).
|
|
334
|
+
|
|
335
|
+
### EMISC-7
|
|
336
|
+
- **Verdict**: CONFIRMED
|
|
337
|
+
- **Evidence**: `achievements/AchievementManager.js:232-238` — `async initialize(engine)` assigns four fields
|
|
338
|
+
and never calls `super.initialize(engine)`; `EnginePlugin.initialize` is what calls
|
|
339
|
+
`BaseProcess.initialize()` → `__state.set(Initialized)`. `:421-430` — `async startup()` never calls
|
|
340
|
+
`super.startup()`. `save/GameStateLoader.js:15-17` — same omission for `startup()`.
|
|
341
|
+
Consequences verified in `plugin/PluginReferenceContext.js`: `navigate_to_running` (:72-89) short-circuits
|
|
342
|
+
only on `Running`, so a plugin stuck at `New` re-runs `initialize()` **and** `startup()` on every request;
|
|
343
|
+
`navigate_to_finalized` (:44-67) returns immediately for `New`, so `shutdown()` never runs.
|
|
344
|
+
`plugin/EnginePluginManager.js:75-101` re-requests the transition whenever
|
|
345
|
+
`dependency_state !== ProcessState.Running`, which for these plugins is always.
|
|
346
|
+
`loadDefinitions` (:239-255) pushes into `this.entries` with no reset, so a second `startup()` duplicates
|
|
347
|
+
every achievement.
|
|
348
|
+
|
|
349
|
+
### EMISC-8
|
|
350
|
+
- **Verdict**: CONFIRMED
|
|
351
|
+
- **Evidence**: `achievements/AchievementManager.js:427` is `this.initializeGateway();` with no `await`,
|
|
352
|
+
followed immediately by `this.isStarted.set(true)` at :429. `initializeGateway` sets
|
|
353
|
+
`isGatewayInitialized` only after awaiting the gateway read. `unlock()` (:149-160) gates **both**
|
|
354
|
+
`deactivateEntry` and `present` on `this.isGatewayInitialized.getValue()`, so an unlock that lands in the gap
|
|
355
|
+
is written to storage and blackboard but never presented and never deactivated. `isActive` is
|
|
356
|
+
`ReactiveAnd(isStarted, isBlackboardAttached)` (:106-119), which fires `activate()` synchronously on the
|
|
357
|
+
`isStarted` write.
|
|
358
|
+
|
|
359
|
+
### EMISC-9
|
|
360
|
+
- **Verdict**: CONFIRMED
|
|
361
|
+
- **Evidence**: `EngineHarness.js:126` is `new Promise(async function (resolve, reject) { … })` with no
|
|
362
|
+
`try/catch` and no use of `reject` anywhere in the body. Executed the same shape: after a throw past the
|
|
363
|
+
first `await`, the outer promise state remained **pending** and jest reported the escape as an unhandled
|
|
364
|
+
rejection — precisely the "hangs with no error surfaced" symptom. `this.p` memoises the pending promise
|
|
365
|
+
(:167-169), so retries hang too.
|
|
366
|
+
|
|
367
|
+
### EMISC-10
|
|
368
|
+
- **Verdict**: CONFIRMED
|
|
369
|
+
- **Evidence**: Executed a real `GameStateLoader` with a `gameSaves.update()` that rejects. Neither `resolve`
|
|
370
|
+
nor `reject` was called (`outcome: pending` after a full microtask+timer flush), and the rejection surfaced
|
|
371
|
+
as an unhandled rejection. `save/GameStateLoader.js:128-135` has no second `then` argument and no `.catch`,
|
|
372
|
+
unlike `load()` (:110) and `exists()` (:164).
|
|
373
|
+
|
|
374
|
+
### EMISC-11
|
|
375
|
+
- **Verdict**: CONFIRMED
|
|
376
|
+
- **Evidence**: Executed a real `GameStateLoader` over a real `InMemoryStorage` with empty
|
|
377
|
+
`gameSaves.data`: `load('auto-save', …)` **resolved with `undefined`**.
|
|
378
|
+
`save/GameStateLoader.js:101-103` falls through to `legacyLoad` → `Storage.loadBinary` (`save/Storage.js:25-28`)
|
|
379
|
+
→ `InMemoryStorage.load` (`save/storage/InMemoryStorage.js:15`) which resolves `this.#data.get(key)`.
|
|
380
|
+
`IndexedDBStorage.load` (:88-90) resolves `event.target.result` with the same sentinel.
|
|
381
|
+
|
|
382
|
+
### EMISC-12
|
|
383
|
+
- **Verdict**: CONFIRMED
|
|
384
|
+
- **Evidence**: Executed `WebEnginePlatform.prototype.pickDefaultLocale.call({}, ['ru','de'])` with
|
|
385
|
+
`navigator.languages === ['ja-JP']` → returned **`'en-gb'`**, which is not among the options.
|
|
386
|
+
`platform/WebEnginePlatform.js:81-85` hard-codes it. Secondary claim also executed: with `[]`,
|
|
387
|
+
`array_pick_best_element` returns `undefined` (verified in
|
|
388
|
+
`core/collection/array/array_pick_best_element.js:21-23`) and `best.score` threw
|
|
389
|
+
`TypeError: Cannot read properties of undefined (reading 'score')`.
|
|
390
|
+
`platform/EnginePlatform.js:18-22` documents `@param {string[]} options @returns {string}`, i.e. one of the
|
|
391
|
+
options.
|
|
392
|
+
|
|
393
|
+
### EMISC-13
|
|
394
|
+
- **Verdict**: CONFIRMED
|
|
395
|
+
- **Evidence**: `save/GameStateLoader.js:1` imports
|
|
396
|
+
`"../../../../view/game/save/GameSaveStateMetadata.js"`, which resolves to
|
|
397
|
+
`app/src/mir-engine/view/game/save/GameSaveStateMetadata.js` — verified to exist and to be **outside** the
|
|
398
|
+
`meep/` package root. The symbol is referenced only in a JSDoc `@type` at :82, so the runtime import is
|
|
399
|
+
gratuitous. `scene/SerializedScene.js:1` imports
|
|
400
|
+
`"../../../../model/game/scenes/MirScene.js"` → `app/src/mir-engine/model/game/scenes/MirScene.js`
|
|
401
|
+
(verified to exist), and :57 is `export class SerializedScene extends MirScene`, i.e. a hard inheritance
|
|
402
|
+
dependency from the engine onto game code. Both escape the published package boundary.
|
|
403
|
+
|
|
404
|
+
---
|
|
405
|
+
|
|
406
|
+
## Tally
|
|
407
|
+
|
|
408
|
+
45 findings checked (6 CRITICAL + 26 MAJOR from `view.md`, 13 MAJOR from `engine-misc.md`).
|
|
409
|
+
|
|
410
|
+
- **CONFIRMED: 44**
|
|
411
|
+
- **CONFIRMED-BUT-DOWNGRADED: 1** (VIEW-32, MAJOR → MINOR)
|
|
412
|
+
- **REFUTED: 0**
|
|
413
|
+
|
|
414
|
+
## Notes on what I looked for and did not find
|
|
415
|
+
|
|
416
|
+
I specifically attempted the following refutations and none succeeded:
|
|
417
|
+
|
|
418
|
+
- **Misread base-class members.** Checked `View.js` and `DOM.js` in full. `addChild`/`removeChild`/`isLinked`/
|
|
419
|
+
`bindSignal` all exist as the reviewer assumed; `View` genuinely has no `update` (VIEW-39's premise, MINOR);
|
|
420
|
+
`View.children` is a plain array so the `this.children = []` reassignments in `ToastLogView`/`Group` really do
|
|
421
|
+
produce the described double-registration. No mixin, getter or inherited member rescues any of the
|
|
422
|
+
"non-functional" claims.
|
|
423
|
+
- **The `unlink()` ordering assumption.** Executed rather than assumed: `isLinked` is `false` inside
|
|
424
|
+
`on.unlinked`. VIEW-1's teardown-skip is therefore correctly grounded, not inverted.
|
|
425
|
+
- **`assert.*` masking.** The one finding where this mattered (VIEW-27) is *worse* in production, not better,
|
|
426
|
+
because the guard that would surface the null localisation is unasserted away. No finding depends on an
|
|
427
|
+
assert being live.
|
|
428
|
+
- **Unconstructable-class overreach.** `TabbedView`, `ToastLogView`, `ListController`, `Vector1Control`,
|
|
429
|
+
`MinimapTerrainView`, `RadialMenu` and `EmptyView` all construct fine in jsdom; the claimed defects are
|
|
430
|
+
behavioural, and each was reproduced against a real instance rather than inferred.
|
|
431
|
+
- **Deliberate-convention defences.** No comment or JSDoc anywhere in the implicated code documents any of the
|
|
432
|
+
reported behaviours as intended. In two cases the codebase's own sibling code proves the opposite intent:
|
|
433
|
+
`GMLEngine.compile`'s `try/finally` vs `TooltipManager.buildTipView` (VIEW-30), and
|
|
434
|
+
`BottomLeftResizeHandleView`'s `lastPosition.copy(position)` vs `SimpleWindow` (VIEW-17).
|
|
435
|
+
|
|
436
|
+
## Reliability of each report
|
|
437
|
+
|
|
438
|
+
**`view.md`**: broadly reliable. All 6 CRITICALs and all 26 MAJORs reproduce; 22 of the 32 were reproduced by
|
|
439
|
+
executing real code rather than reading. The only overstatement is VIEW-32's severity. The reviewer's own
|
|
440
|
+
"Notes on evidence used" preamble (unlink ordering, Signal Map semantics, segment-intersection miss behaviour)
|
|
441
|
+
checked out on every point.
|
|
442
|
+
|
|
443
|
+
**`engine-misc.md`**: broadly reliable. All 13 MAJORs reproduce; 8 of them by direct execution against real
|
|
444
|
+
`Engine`, `Clock`, `GameStateLoader` and `WebEnginePlatform` instances. No severity inflation identified —
|
|
445
|
+
EMISC-13 is a packaging rather than runtime defect but genuinely breaks external consumers of a published
|
|
446
|
+
package, so MAJOR is defensible.
|