@oasys/oecs 0.5.3 → 0.6.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/CHANGELOG.md +1399 -276
- package/README.md +327 -169
- package/dist/core/ecs/access_check.d.cts +31 -31
- package/dist/core/ecs/access_check.d.ts +31 -31
- package/dist/core/ecs/access_check.d.ts.map +1 -1
- package/dist/core/ecs/archetype.d.cts +273 -205
- package/dist/core/ecs/archetype.d.ts +273 -205
- package/dist/core/ecs/archetype.d.ts.map +1 -1
- package/dist/core/ecs/archetype_closure.d.cts +23 -0
- package/dist/core/ecs/archetype_closure.d.ts +23 -0
- package/dist/core/ecs/archetype_closure.d.ts.map +1 -0
- package/dist/core/ecs/archetype_graph.d.cts +34 -34
- package/dist/core/ecs/archetype_graph.d.ts +34 -34
- package/dist/core/ecs/archetype_graph.d.ts.map +1 -1
- package/dist/core/ecs/archetype_types.d.cts +55 -0
- package/dist/core/ecs/archetype_types.d.ts +55 -0
- package/dist/core/ecs/archetype_types.d.ts.map +1 -0
- package/dist/core/ecs/change_feed.d.cts +53 -0
- package/dist/core/ecs/change_feed.d.ts +53 -0
- package/dist/core/ecs/change_feed.d.ts.map +1 -0
- package/dist/core/ecs/changed_query.d.cts +36 -0
- package/dist/core/ecs/changed_query.d.ts +36 -0
- package/dist/core/ecs/changed_query.d.ts.map +1 -0
- package/dist/core/ecs/chunk_columns.d.cts +49 -0
- package/dist/core/ecs/chunk_columns.d.ts +49 -0
- package/dist/core/ecs/chunk_columns.d.ts.map +1 -0
- package/dist/core/ecs/command_log.d.cts +30 -30
- package/dist/core/ecs/command_log.d.ts +30 -30
- package/dist/core/ecs/command_log.d.ts.map +1 -1
- package/dist/core/ecs/component.d.cts +45 -44
- package/dist/core/ecs/component.d.ts +45 -44
- package/dist/core/ecs/component.d.ts.map +1 -1
- package/dist/core/ecs/component_registry.d.cts +53 -0
- package/dist/core/ecs/component_registry.d.ts +53 -0
- package/dist/core/ecs/component_registry.d.ts.map +1 -0
- package/dist/core/ecs/compute_backend.d.cts +18 -7
- package/dist/core/ecs/compute_backend.d.ts +18 -7
- package/dist/core/ecs/compute_backend.d.ts.map +1 -1
- package/dist/core/ecs/deferred_commands.d.cts +15 -14
- package/dist/core/ecs/deferred_commands.d.ts +15 -14
- package/dist/core/ecs/deferred_commands.d.ts.map +1 -1
- package/dist/core/ecs/dispatch_trace.d.cts +32 -31
- package/dist/core/ecs/dispatch_trace.d.ts +32 -31
- package/dist/core/ecs/dispatch_trace.d.ts.map +1 -1
- package/dist/core/ecs/ecs.d.cts +337 -276
- package/dist/core/ecs/ecs.d.ts +337 -276
- package/dist/core/ecs/ecs.d.ts.map +1 -1
- package/dist/core/ecs/ecs_memory.d.cts +134 -136
- package/dist/core/ecs/ecs_memory.d.ts +134 -136
- package/dist/core/ecs/ecs_memory.d.ts.map +1 -1
- package/dist/core/ecs/ecs_options.d.cts +89 -0
- package/dist/core/ecs/ecs_options.d.ts +89 -0
- package/dist/core/ecs/ecs_options.d.ts.map +1 -0
- package/dist/core/ecs/entity.d.cts +4 -4
- package/dist/core/ecs/entity.d.ts +4 -4
- package/dist/core/ecs/entity_allocator.d.cts +24 -22
- package/dist/core/ecs/entity_allocator.d.ts +24 -22
- package/dist/core/ecs/entity_allocator.d.ts.map +1 -1
- package/dist/core/ecs/event.d.cts +37 -23
- package/dist/core/ecs/event.d.ts +37 -23
- package/dist/core/ecs/event.d.ts.map +1 -1
- package/dist/core/ecs/facades.d.cts +12 -126
- package/dist/core/ecs/facades.d.ts +12 -126
- package/dist/core/ecs/facades.d.ts.map +1 -1
- package/dist/core/ecs/frame_stepper.d.cts +12 -12
- package/dist/core/ecs/frame_stepper.d.ts +12 -12
- package/dist/core/ecs/frame_stepper.d.ts.map +1 -1
- package/dist/core/ecs/frame_trace.d.cts +34 -34
- package/dist/core/ecs/frame_trace.d.ts +34 -34
- package/dist/core/ecs/frame_trace.d.ts.map +1 -1
- package/dist/core/ecs/host_commands.d.cts +107 -89
- package/dist/core/ecs/host_commands.d.ts +107 -89
- package/dist/core/ecs/host_commands.d.ts.map +1 -1
- package/dist/core/ecs/index.d.cts +22 -12
- package/dist/core/ecs/index.d.ts +22 -12
- package/dist/core/ecs/index.d.ts.map +1 -1
- package/dist/core/ecs/observer.d.cts +41 -122
- package/dist/core/ecs/observer.d.ts +41 -122
- package/dist/core/ecs/observer.d.ts.map +1 -1
- package/dist/core/ecs/phase.d.cts +79 -0
- package/dist/core/ecs/phase.d.ts +79 -0
- package/dist/core/ecs/phase.d.ts.map +1 -0
- package/dist/core/ecs/plugin.d.cts +125 -0
- package/dist/core/ecs/plugin.d.ts +125 -0
- package/dist/core/ecs/plugin.d.ts.map +1 -0
- package/dist/core/ecs/plugin_slots.d.cts +26 -0
- package/dist/core/ecs/plugin_slots.d.ts +26 -0
- package/dist/core/ecs/plugin_slots.d.ts.map +1 -0
- package/dist/core/ecs/query.d.cts +219 -568
- package/dist/core/ecs/query.d.ts +219 -568
- package/dist/core/ecs/query.d.ts.map +1 -1
- package/dist/core/ecs/query_cache.d.cts +130 -0
- package/dist/core/ecs/query_cache.d.ts +130 -0
- package/dist/core/ecs/query_cache.d.ts.map +1 -0
- package/dist/core/ecs/query_registry.d.cts +47 -0
- package/dist/core/ecs/query_registry.d.ts +47 -0
- package/dist/core/ecs/query_registry.d.ts.map +1 -0
- package/dist/core/ecs/query_terms.d.cts +126 -0
- package/dist/core/ecs/query_terms.d.ts +126 -0
- package/dist/core/ecs/query_terms.d.ts.map +1 -0
- package/dist/core/ecs/ref.d.cts +129 -16
- package/dist/core/ecs/ref.d.ts +129 -16
- package/dist/core/ecs/ref.d.ts.map +1 -1
- package/dist/core/ecs/relation.d.cts +105 -186
- package/dist/core/ecs/relation.d.ts +105 -186
- package/dist/core/ecs/relation.d.ts.map +1 -1
- package/dist/core/ecs/resource.d.cts +14 -14
- package/dist/core/ecs/resource.d.ts +14 -14
- package/dist/core/ecs/resource_registry.d.cts +6 -6
- package/dist/core/ecs/resource_registry.d.ts +6 -6
- package/dist/core/ecs/resource_registry.d.ts.map +1 -1
- package/dist/core/ecs/row_kinds.d.cts +24 -0
- package/dist/core/ecs/row_kinds.d.ts +24 -0
- package/dist/core/ecs/row_kinds.d.ts.map +1 -0
- package/dist/core/ecs/run_condition.d.cts +23 -23
- package/dist/core/ecs/run_condition.d.ts +23 -23
- package/dist/core/ecs/run_condition.d.ts.map +1 -1
- package/dist/core/ecs/schedule.d.cts +98 -114
- package/dist/core/ecs/schedule.d.ts +98 -114
- package/dist/core/ecs/schedule.d.ts.map +1 -1
- package/dist/core/ecs/schedule_plan.d.cts +33 -0
- package/dist/core/ecs/schedule_plan.d.ts +33 -0
- package/dist/core/ecs/schedule_plan.d.ts.map +1 -0
- package/dist/core/ecs/snapshot.d.cts +77 -0
- package/dist/core/ecs/snapshot.d.ts +77 -0
- package/dist/core/ecs/snapshot.d.ts.map +1 -0
- package/dist/core/ecs/snapshot_mount.d.cts +42 -0
- package/dist/core/ecs/snapshot_mount.d.ts +42 -0
- package/dist/core/ecs/snapshot_mount.d.ts.map +1 -0
- package/dist/core/ecs/sparse_store.d.cts +110 -53
- package/dist/core/ecs/sparse_store.d.ts +110 -53
- package/dist/core/ecs/sparse_store.d.ts.map +1 -1
- package/dist/core/ecs/store.d.cts +644 -511
- package/dist/core/ecs/store.d.ts +644 -511
- package/dist/core/ecs/store.d.ts.map +1 -1
- package/dist/core/ecs/store_layout_listener.d.cts +8 -8
- package/dist/core/ecs/store_layout_listener.d.ts +8 -8
- package/dist/core/ecs/store_types.d.cts +122 -0
- package/dist/core/ecs/store_types.d.ts +122 -0
- package/dist/core/ecs/store_types.d.ts.map +1 -0
- package/dist/core/ecs/system.d.cts +151 -66
- package/dist/core/ecs/system.d.ts +151 -66
- package/dist/core/ecs/system.d.ts.map +1 -1
- package/dist/core/ecs/system_context.d.cts +296 -0
- package/dist/core/ecs/system_context.d.ts +296 -0
- package/dist/core/ecs/system_context.d.ts.map +1 -0
- package/dist/core/ecs/system_set.d.cts +48 -0
- package/dist/core/ecs/system_set.d.ts +48 -0
- package/dist/core/ecs/system_set.d.ts.map +1 -0
- package/dist/core/ecs/utils/arrays.d.cts +15 -1
- package/dist/core/ecs/utils/arrays.d.ts +15 -1
- package/dist/core/ecs/utils/arrays.d.ts.map +1 -1
- package/dist/core/ecs/utils/error.d.cts +87 -4
- package/dist/core/ecs/utils/error.d.ts +87 -4
- package/dist/core/ecs/utils/error.d.ts.map +1 -1
- package/dist/core/ecs/utils/plugin_error.d.cts +10 -0
- package/dist/core/ecs/utils/plugin_error.d.ts +10 -0
- package/dist/core/ecs/utils/plugin_error.d.ts.map +1 -0
- package/dist/core/restore_errors.d.cts +30 -0
- package/dist/core/restore_errors.d.ts +30 -0
- package/dist/core/restore_errors.d.ts.map +1 -0
- package/dist/core/store/action_ring.d.cts +48 -49
- package/dist/core/store/action_ring.d.ts +48 -49
- package/dist/core/store/action_ring.d.ts.map +1 -1
- package/dist/core/store/allocator.d.cts +166 -114
- package/dist/core/store/allocator.d.ts +166 -114
- package/dist/core/store/allocator.d.ts.map +1 -1
- package/dist/core/store/buffer_backed_column.d.cts +21 -22
- package/dist/core/store/buffer_backed_column.d.ts +21 -22
- package/dist/core/store/buffer_backed_column.d.ts.map +1 -1
- package/dist/core/store/column_store.d.cts +138 -100
- package/dist/core/store/column_store.d.ts +138 -100
- package/dist/core/store/column_store.d.ts.map +1 -1
- package/dist/core/store/command_dispatch.d.cts +14 -15
- package/dist/core/store/command_dispatch.d.ts +14 -15
- package/dist/core/store/command_dispatch.d.ts.map +1 -1
- package/dist/core/store/command_ring.d.cts +41 -45
- package/dist/core/store/command_ring.d.ts +41 -45
- package/dist/core/store/command_ring.d.ts.map +1 -1
- package/dist/core/store/descriptor.d.cts +35 -18
- package/dist/core/store/descriptor.d.ts +35 -18
- package/dist/core/store/descriptor.d.ts.map +1 -1
- package/dist/core/store/entity_index.d.cts +34 -35
- package/dist/core/store/entity_index.d.ts +34 -35
- package/dist/core/store/entity_index.d.ts.map +1 -1
- package/dist/core/store/event_ring.d.cts +40 -42
- package/dist/core/store/event_ring.d.ts +40 -42
- package/dist/core/store/event_ring.d.ts.map +1 -1
- package/dist/core/store/extend.d.cts +15 -9
- package/dist/core/store/extend.d.ts +15 -9
- package/dist/core/store/extend.d.ts.map +1 -1
- package/dist/core/store/grow.d.cts +3 -3
- package/dist/core/store/grow.d.ts +3 -3
- package/dist/core/store/grow.d.ts.map +1 -1
- package/dist/core/store/header.d.cts +37 -33
- package/dist/core/store/header.d.ts +37 -33
- package/dist/core/store/header.d.ts.map +1 -1
- package/dist/core/store/index.d.cts +10 -10
- package/dist/core/store/index.d.ts +10 -10
- package/dist/core/store/index.d.ts.map +1 -1
- package/dist/core/store/layout_ops.d.cts +72 -63
- package/dist/core/store/layout_ops.d.ts +72 -63
- package/dist/core/store/layout_ops.d.ts.map +1 -1
- package/dist/core/store/region_table.d.cts +28 -21
- package/dist/core/store/region_table.d.ts +28 -21
- package/dist/core/store/region_table.d.ts.map +1 -1
- package/dist/core/store/snapshot.d.cts +31 -16
- package/dist/core/store/snapshot.d.ts +31 -16
- package/dist/core/store/snapshot.d.ts.map +1 -1
- package/dist/core/store/state_hash.d.cts +14 -14
- package/dist/core/store/state_hash.d.ts +14 -14
- package/dist/core/store/state_hash.d.ts.map +1 -1
- package/dist/core/store/store_regions.d.cts +10 -10
- package/dist/core/store/store_regions.d.ts +10 -10
- package/dist/core/store/store_regions.d.ts.map +1 -1
- package/dist/core/store/vendored_abi/abi.d.cts +27 -2
- package/dist/core/store/vendored_abi/abi.d.ts +27 -2
- package/dist/core/store/vendored_abi/abi.d.ts.map +1 -1
- package/dist/host_commands-B2KMx8O2.cjs +1 -0
- package/dist/host_commands-ClVPvhSa.cjs +2 -0
- package/dist/host_commands-CwxVQS1z.js +1524 -0
- package/dist/host_commands-nJvTy88E.js +1667 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +16 -11
- package/dist/index.d.ts +16 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.development.cjs +1 -1
- package/dist/index.development.js +6709 -5729
- package/dist/index.js +5664 -4743
- package/dist/internal.cjs +2 -2
- package/dist/internal.d.cts +5 -2
- package/dist/internal.d.ts +5 -2
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.development.cjs +1 -1
- package/dist/internal.development.js +70 -20
- package/dist/internal.js +138 -83
- package/dist/plugins/abi-D3V-QUSf.cjs +1 -0
- package/dist/plugins/abi-NP8pNxpd.js +42 -0
- package/dist/plugins/arrays-Dr_1hCjL.js +28 -0
- package/dist/plugins/arrays-Dt-Joc4i.cjs +1 -0
- package/dist/plugins/assertions-gtDVfbnQ.js +6 -0
- package/dist/plugins/assertions-z5GQd_bB.cjs +1 -0
- package/dist/{extensions → plugins}/editor/editor.d.cts +56 -56
- package/dist/{extensions → plugins}/editor/editor.d.ts +56 -56
- package/dist/plugins/editor/editor.d.ts.map +1 -0
- package/dist/{extensions → plugins}/editor/field_handle.d.cts +13 -13
- package/dist/{extensions → plugins}/editor/field_handle.d.ts +13 -13
- package/dist/plugins/editor/field_handle.d.ts.map +1 -0
- package/dist/plugins/editor/index.d.cts +22 -0
- package/dist/plugins/editor/index.d.ts +22 -0
- package/dist/plugins/editor/index.d.ts.map +1 -0
- package/dist/plugins/editor.cjs +1 -0
- package/dist/plugins/editor.d.cts +1 -0
- package/dist/plugins/editor.d.ts +1 -0
- package/dist/plugins/editor.development.cjs +1 -0
- package/dist/{extensions/editor/index.development.js → plugins/editor.development.js} +83 -66
- package/dist/{extensions/editor/index.js → plugins/editor.js} +83 -66
- package/dist/plugins/events/event_channel.d.cts +13 -0
- package/dist/plugins/events/event_channel.d.ts +13 -0
- package/dist/plugins/events/event_channel.d.ts.map +1 -0
- package/dist/plugins/events/event_registry.d.cts +22 -0
- package/dist/plugins/events/event_registry.d.ts +22 -0
- package/dist/plugins/events/event_registry.d.ts.map +1 -0
- package/dist/plugins/events/facade.d.cts +26 -0
- package/dist/plugins/events/facade.d.ts +26 -0
- package/dist/plugins/events/facade.d.ts.map +1 -0
- package/dist/plugins/events/index.d.cts +10 -0
- package/dist/plugins/events/index.d.ts +10 -0
- package/dist/plugins/events/index.d.ts.map +1 -0
- package/dist/plugins/events.cjs +1 -0
- package/dist/plugins/events.d.cts +1 -0
- package/dist/plugins/events.d.ts +1 -0
- package/dist/plugins/events.development.cjs +1 -0
- package/dist/plugins/events.development.js +174 -0
- package/dist/plugins/events.js +159 -0
- package/dist/plugins/observers/index.d.cts +23 -0
- package/dist/plugins/observers/index.d.ts +23 -0
- package/dist/plugins/observers/index.d.ts.map +1 -0
- package/dist/plugins/observers/observer_registry.d.cts +101 -0
- package/dist/plugins/observers/observer_registry.d.ts +101 -0
- package/dist/plugins/observers/observer_registry.d.ts.map +1 -0
- package/dist/plugins/observers.cjs +1 -0
- package/dist/plugins/observers.d.cts +1 -0
- package/dist/plugins/observers.d.ts +1 -0
- package/dist/plugins/observers.development.cjs +1 -0
- package/dist/plugins/observers.development.js +431 -0
- package/dist/plugins/observers.js +403 -0
- package/dist/plugins/relation_store-BsoegrZh.js +313 -0
- package/dist/plugins/relation_store-DQKSnxsm.cjs +1 -0
- package/dist/plugins/relation_store-RBhpcE28.cjs +1 -0
- package/dist/plugins/relation_store-RqW5Snx6.js +328 -0
- package/dist/plugins/relations/builtin_relations.d.cts +48 -0
- package/dist/plugins/relations/builtin_relations.d.ts +48 -0
- package/dist/plugins/relations/builtin_relations.d.ts.map +1 -0
- package/dist/plugins/relations/facade.d.cts +73 -0
- package/dist/plugins/relations/facade.d.ts +73 -0
- package/dist/plugins/relations/facade.d.ts.map +1 -0
- package/dist/plugins/relations/index.d.cts +11 -0
- package/dist/plugins/relations/index.d.ts +11 -0
- package/dist/plugins/relations/index.d.ts.map +1 -0
- package/dist/{core/ecs → plugins/relations}/relation_service.d.cts +93 -105
- package/dist/{core/ecs → plugins/relations}/relation_service.d.ts +93 -105
- package/dist/plugins/relations/relation_service.d.ts.map +1 -0
- package/dist/plugins/relations/relation_store.d.cts +177 -0
- package/dist/plugins/relations/relation_store.d.ts +177 -0
- package/dist/plugins/relations/relation_store.d.ts.map +1 -0
- package/dist/plugins/relations.cjs +1 -0
- package/dist/plugins/relations.d.cts +1 -0
- package/dist/plugins/relations.d.ts +1 -0
- package/dist/plugins/relations.development.cjs +1 -0
- package/dist/plugins/relations.development.js +603 -0
- package/dist/plugins/relations.js +553 -0
- package/dist/plugins/snapshots/index.d.cts +33 -0
- package/dist/plugins/snapshots/index.d.ts +33 -0
- package/dist/plugins/snapshots/index.d.ts.map +1 -0
- package/dist/plugins/snapshots/resume.d.cts +57 -0
- package/dist/plugins/snapshots/resume.d.ts +57 -0
- package/dist/plugins/snapshots/resume.d.ts.map +1 -0
- package/dist/plugins/snapshots/snapshot_service.d.cts +59 -0
- package/dist/plugins/snapshots/snapshot_service.d.ts +59 -0
- package/dist/plugins/snapshots/snapshot_service.d.ts.map +1 -0
- package/dist/plugins/snapshots.cjs +1 -0
- package/dist/plugins/snapshots.d.cts +1 -0
- package/dist/plugins/snapshots.d.ts +1 -0
- package/dist/plugins/snapshots.development.cjs +1 -0
- package/dist/plugins/snapshots.development.js +737 -0
- package/dist/plugins/snapshots.js +737 -0
- package/dist/plugins/solid/index.d.cts +8 -0
- package/dist/plugins/solid/index.d.ts +8 -0
- package/dist/plugins/solid/index.d.ts.map +1 -0
- package/dist/plugins/solid/solid.d.cts +97 -0
- package/dist/plugins/solid/solid.d.ts +97 -0
- package/dist/plugins/solid/solid.d.ts.map +1 -0
- package/dist/plugins/solid.cjs +1 -0
- package/dist/plugins/solid.d.cts +1 -0
- package/dist/plugins/solid.d.ts +1 -0
- package/dist/plugins/solid.development.cjs +1 -0
- package/dist/plugins/solid.development.js +319 -0
- package/dist/plugins/solid.js +319 -0
- package/dist/plugins/workers/index.d.cts +75 -0
- package/dist/plugins/workers/index.d.ts +75 -0
- package/dist/plugins/workers/index.d.ts.map +1 -0
- package/dist/plugins/workers/node_threads.d.cts +25 -0
- package/dist/plugins/workers/node_threads.d.ts +25 -0
- package/dist/plugins/workers/node_threads.d.ts.map +1 -0
- package/dist/plugins/workers/plan.d.cts +61 -0
- package/dist/plugins/workers/plan.d.ts +61 -0
- package/dist/plugins/workers/plan.d.ts.map +1 -0
- package/dist/plugins/workers/pool.d.cts +144 -0
- package/dist/plugins/workers/pool.d.ts +144 -0
- package/dist/plugins/workers/pool.d.ts.map +1 -0
- package/dist/plugins/workers/protocol.d.cts +112 -0
- package/dist/plugins/workers/protocol.d.ts +112 -0
- package/dist/plugins/workers/protocol.d.ts.map +1 -0
- package/dist/plugins/workers/worker_bind.d.cts +64 -0
- package/dist/plugins/workers/worker_bind.d.ts +64 -0
- package/dist/plugins/workers/worker_bind.d.ts.map +1 -0
- package/dist/plugins/workers/worker_loop.d.cts +14 -0
- package/dist/plugins/workers/worker_loop.d.ts +14 -0
- package/dist/plugins/workers/worker_loop.d.ts.map +1 -0
- package/dist/plugins/workers.cjs +1 -0
- package/dist/plugins/workers.d.cts +1 -0
- package/dist/plugins/workers.d.ts +1 -0
- package/dist/plugins/workers.development.cjs +1 -0
- package/dist/plugins/workers.development.js +596 -0
- package/dist/plugins/workers.js +474 -0
- package/dist/primitives.cjs +1 -1
- package/dist/primitives.d.cts +4 -4
- package/dist/primitives.d.ts +4 -4
- package/dist/primitives.development.cjs +1 -1
- package/dist/primitives.development.js +66 -22
- package/dist/primitives.js +66 -22
- package/dist/shared-BKl12xF1.js +132 -0
- package/dist/shared-Dk-pACZT.cjs +1 -0
- package/dist/shared.cjs +1 -1
- package/dist/shared.d.cts +7 -7
- package/dist/shared.d.ts +7 -7
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.development.cjs +1 -1
- package/dist/shared.development.js +4 -3
- package/dist/shared.js +4 -3
- package/dist/topological_sort-Cc_yXqPT.js +346 -0
- package/dist/topological_sort-vp1imU6D.cjs +1 -0
- package/dist/type_primitives/assertions.d.cts +12 -16
- package/dist/type_primitives/assertions.d.ts +12 -16
- package/dist/type_primitives/assertions.d.ts.map +1 -1
- package/dist/type_primitives/binary_heap/binary_heap.d.cts +2 -6
- package/dist/type_primitives/binary_heap/binary_heap.d.ts +2 -6
- package/dist/type_primitives/binary_heap/binary_heap.d.ts.map +1 -1
- package/dist/type_primitives/bitset/bitset.d.cts +7 -11
- package/dist/type_primitives/bitset/bitset.d.ts +7 -11
- package/dist/type_primitives/bitset/bitset.d.ts.map +1 -1
- package/dist/type_primitives/brand.d.cts +2 -7
- package/dist/type_primitives/brand.d.ts +2 -7
- package/dist/type_primitives/brand.d.ts.map +1 -1
- package/dist/type_primitives/error.d.cts +1 -2
- package/dist/type_primitives/error.d.ts +1 -2
- package/dist/type_primitives/error.d.ts.map +1 -1
- package/dist/type_primitives/index.d.cts +1 -1
- package/dist/type_primitives/index.d.ts +1 -1
- package/dist/type_primitives/sparse_map/sparse_map.d.cts +3 -7
- package/dist/type_primitives/sparse_map/sparse_map.d.ts +3 -7
- package/dist/type_primitives/sparse_map/sparse_map.d.ts.map +1 -1
- package/dist/type_primitives/sparse_set/sparse_set.d.cts +2 -6
- package/dist/type_primitives/sparse_set/sparse_set.d.ts +2 -6
- package/dist/type_primitives/sparse_set/sparse_set.d.ts.map +1 -1
- package/dist/type_primitives/topological_sort/topological_sort.d.cts +1 -5
- package/dist/type_primitives/topological_sort/topological_sort.d.ts +1 -5
- package/dist/type_primitives/topological_sort/topological_sort.d.ts.map +1 -1
- package/dist/type_primitives/typed_arrays/typed_arrays.d.cts +18 -17
- package/dist/type_primitives/typed_arrays/typed_arrays.d.ts +18 -17
- package/dist/type_primitives/typed_arrays/typed_arrays.d.ts.map +1 -1
- package/dist/utils/error.d.ts.map +1 -1
- package/dist/version.d.cts +4 -4
- package/dist/version.d.ts +4 -4
- package/dist/worker.cjs +1 -0
- package/dist/worker.d.cts +17 -0
- package/dist/worker.d.ts +17 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.development.cjs +1 -0
- package/dist/worker.development.js +253 -0
- package/dist/worker.js +253 -0
- package/package.json +363 -191
- package/dist/core/ecs/builtin_relations.d.cts +0 -43
- package/dist/core/ecs/builtin_relations.d.ts +0 -43
- package/dist/core/ecs/builtin_relations.d.ts.map +0 -1
- package/dist/core/ecs/event_registry.d.cts +0 -22
- package/dist/core/ecs/event_registry.d.ts +0 -22
- package/dist/core/ecs/event_registry.d.ts.map +0 -1
- package/dist/core/ecs/relation_service.d.ts.map +0 -1
- package/dist/core/ecs/resume.d.cts +0 -85
- package/dist/core/ecs/resume.d.ts +0 -85
- package/dist/core/ecs/resume.d.ts.map +0 -1
- package/dist/core/ecs/snapshot_service.d.cts +0 -94
- package/dist/core/ecs/snapshot_service.d.ts +0 -94
- package/dist/core/ecs/snapshot_service.d.ts.map +0 -1
- package/dist/extensions/editor/editor.d.ts.map +0 -1
- package/dist/extensions/editor/field_handle.d.ts.map +0 -1
- package/dist/extensions/editor/index.cjs +0 -1
- package/dist/extensions/editor/index.d.cts +0 -21
- package/dist/extensions/editor/index.d.ts +0 -21
- package/dist/extensions/editor/index.d.ts.map +0 -1
- package/dist/extensions/editor/index.development.cjs +0 -1
- package/dist/extensions/reactive/ecs_sync.d.cts +0 -214
- package/dist/extensions/reactive/ecs_sync.d.ts +0 -214
- package/dist/extensions/reactive/ecs_sync.d.ts.map +0 -1
- package/dist/extensions/reactive/index.cjs +0 -1
- package/dist/extensions/reactive/index.d.cts +0 -23
- package/dist/extensions/reactive/index.d.ts +0 -23
- package/dist/extensions/reactive/index.d.ts.map +0 -1
- package/dist/extensions/reactive/index.development.cjs +0 -1
- package/dist/extensions/reactive/index.development.js +0 -215
- package/dist/extensions/reactive/index.js +0 -215
- package/dist/extensions/solid/index.cjs +0 -1
- package/dist/extensions/solid/index.d.cts +0 -6
- package/dist/extensions/solid/index.d.ts +0 -6
- package/dist/extensions/solid/index.d.ts.map +0 -1
- package/dist/extensions/solid/index.development.cjs +0 -1
- package/dist/extensions/solid/index.development.js +0 -40
- package/dist/extensions/solid/index.js +0 -36
- package/dist/extensions/solid/kernel_solid.d.cts +0 -45
- package/dist/extensions/solid/kernel_solid.d.ts +0 -45
- package/dist/extensions/solid/kernel_solid.d.ts.map +0 -1
- package/dist/host_commands-3jyFfWNg.js +0 -2326
- package/dist/host_commands-DNf0f6ko.cjs +0 -1
- package/dist/internal-C9jjL90H.js +0 -2485
- package/dist/internal-RZN14uMw.cjs +0 -2
- package/dist/interop-CT-REx0W.cjs +0 -1
- package/dist/interop-CcY6ASQc.js +0 -18
- package/dist/interop-DqxleBo7.js +0 -18
- package/dist/interop-T1HZ-Dpa.cjs +0 -1
- package/dist/kernel-Cz2Kxlwl.js +0 -240
- package/dist/kernel-DgyrLFjW.js +0 -227
- package/dist/kernel-sw7ScKWu.cjs +0 -1
- package/dist/kernel-yWV3XnAb.cjs +0 -1
- package/dist/reactive/array.d.cts +0 -24
- package/dist/reactive/array.d.ts +0 -24
- package/dist/reactive/array.d.ts.map +0 -1
- package/dist/reactive/index.cjs +0 -1
- package/dist/reactive/index.d.cts +0 -11
- package/dist/reactive/index.d.ts +0 -11
- package/dist/reactive/index.d.ts.map +0 -1
- package/dist/reactive/index.development.cjs +0 -1
- package/dist/reactive/index.development.js +0 -18
- package/dist/reactive/index.js +0 -18
- package/dist/reactive/interop.d.cts +0 -19
- package/dist/reactive/interop.d.ts +0 -19
- package/dist/reactive/interop.d.ts.map +0 -1
- package/dist/reactive/kernel.d.cts +0 -73
- package/dist/reactive/kernel.d.ts +0 -73
- package/dist/reactive/kernel.d.ts.map +0 -1
- package/dist/reactive/map.d.cts +0 -16
- package/dist/reactive/map.d.ts +0 -16
- package/dist/reactive/map.d.ts.map +0 -1
- package/dist/reactive/shallow.d.cts +0 -11
- package/dist/reactive/shallow.d.ts +0 -11
- package/dist/reactive/shallow.d.ts.map +0 -1
- package/dist/reactive/struct.d.cts +0 -10
- package/dist/reactive/struct.d.ts +0 -10
- package/dist/reactive/struct.d.ts.map +0 -1
- package/dist/shallow-9S1pY_Iw.js +0 -159
- package/dist/shallow-C5YmTbtb.cjs +0 -1
- package/dist/shallow-DQ8aG51_.cjs +0 -1
- package/dist/shallow-DfnAm9vG.js +0 -150
- package/dist/shared-BMXh9hxm.cjs +0 -1
- package/dist/shared-DQKK0i-E.js +0 -109
- package/dist/topological_sort-BDvEyb9W.cjs +0 -1
- package/dist/topological_sort-DK6EjpWa.js +0 -135
- package/dist/typed_arrays-BcXcnzB4.js +0 -258
- package/dist/typed_arrays-D3NmwtCG.cjs +0 -1
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import { Store } from './store.cjs';
|
|
2
|
+
import { FrameTraceSink } from './frame_trace.cjs';
|
|
3
|
+
import { EntityID } from './entity.cjs';
|
|
4
|
+
import { ComponentDef, AttachValuesArg, SchemaOf, FieldValues } from './component.cjs';
|
|
5
|
+
import { SparseComponentDef, SparseSchemaOf } from './sparse_store.cjs';
|
|
6
|
+
import { RelationDef } from './relation.cjs';
|
|
7
|
+
import { SystemAccess, DeclaredRead, DeclaredWrite, DeclaredAdd, DeclaredRemove, DeclaredSparseRead, DeclaredSparseWrite, DeclaredRelationRead, DeclaredRelationWrite, DeclaredResourceRead, DeclaredResourceWrite, DespawnArg } from './system.cjs';
|
|
8
|
+
import { ComponentCursor, ComponentRef, ReadonlyComponentCursor, ReadonlyComponentRef } from './ref.cjs';
|
|
9
|
+
import { EventKey, EventReader, EventShape, SignalKey } from './event.cjs';
|
|
10
|
+
import { ResourceKey, ResourceValueOf } from './resource.cjs';
|
|
11
|
+
/**
|
|
12
|
+
* A `BundleOrDef` whose def is constrained to the enclosing system's declared
|
|
13
|
+
* add surface (system.ts). The bundle branch restates `Bundle`'s shape with
|
|
14
|
+
* the def slot narrowed, intersecting `Bundle<any> & { def: … }` instead
|
|
15
|
+
* would put two `ComponentDef` instantiations in one intersection, which TS
|
|
16
|
+
* relates leniently (see the access-typing notes in system.ts).
|
|
17
|
+
*
|
|
18
|
+
* The outer conditional is a deliberate no-op (`[D] extends [unknown]` is
|
|
19
|
+
* always true): it makes the variance of `D`, and therefore of the access
|
|
20
|
+
* param `A` threaded through `Commands` and `SystemContext`. Unmeasurable to
|
|
21
|
+
* the compiler. A measurable (plain-union) definition here gets `A` marked
|
|
22
|
+
* reliably contravariant, variance-based comparison then rejects
|
|
23
|
+
* `SystemContext<Narrow> → SystemContext` without the structural fallback,
|
|
24
|
+
* and every helper taking a bare `SystemContext` stops accepting typed
|
|
25
|
+
* contexts. Unmeasurable variance forces the structural path, where class
|
|
26
|
+
* methods compare bivariantly and the conversion holds.
|
|
27
|
+
*
|
|
28
|
+
* The inner `D extends ComponentDef ? … : never` Distributes over the declared
|
|
29
|
+
* add-set union, so each raw-literal branch carries its own def's schema
|
|
30
|
+
* (`Partial<FieldValues<SchemaOf<D>>>`) rather than the erased
|
|
31
|
+
* `Partial<Record<string, number>>`. A hand-written `{ def: Vel, values: { x }}`
|
|
32
|
+
* whose fields don't match its def is then rejected in a declared-access system,
|
|
33
|
+
* matching the `StrictBundles` guarantee on the `ecs.*` surface. A permissive
|
|
34
|
+
* context (`add: ComponentDef<any>`, an unnarrowed or `exclusive` system)
|
|
35
|
+
* keeps the loose shape, which is the point of opting out of narrowing. The
|
|
36
|
+
* outer no-op is preserved, so the variance invariant above still holds
|
|
37
|
+
* (verified: the `permissiveHelper(ctx)` assertion still compiles).
|
|
38
|
+
*/
|
|
39
|
+
export type DeclaredBundleOrDef<D> = [D] extends [unknown] ? D extends ComponentDef ? D | {
|
|
40
|
+
readonly def: D;
|
|
41
|
+
readonly values: Readonly<Partial<FieldValues<SchemaOf<D>>>>;
|
|
42
|
+
} : never : never;
|
|
43
|
+
/**
|
|
44
|
+
* Deferred structural-command facade (Bevy `Commands`).
|
|
45
|
+
* Namespaces the deferred structural ops so the call site is self-documenting:
|
|
46
|
+
* `ctx.commands.add(e, …)` is *always* deferred (applied at the phase flush),
|
|
47
|
+
* ending the collision where `ecs.addComponent` (immediate) and a bare
|
|
48
|
+
* `ctx.addComponent` (deferred) would share a name with opposite timing. Takes
|
|
49
|
+
* varargs callable bundles, so one shape, `commands.spawn(bundle(Pos,{x,y}), bundle(Vel,{vx:1}))`,
|
|
50
|
+
* serves spawn and add. This is the only deferred surface: the bare
|
|
51
|
+
* `ctx.addComponent`, `ctx.removeComponent`, `ctx.disable` and `ctx.enable`
|
|
52
|
+
* duplicates were removed in 0.5.0, completing the receiver-implies-timing
|
|
53
|
+
* rule (`ecs.*` immediate, `ctx.commands.*` deferred) that 0.5.0 started for
|
|
54
|
+
* spawn and despawn.
|
|
55
|
+
*
|
|
56
|
+
* `A` narrows the def-taking methods to the enclosing system's declared access
|
|
57
|
+
* (system.ts). The default is fully permissive.
|
|
58
|
+
*
|
|
59
|
+
* `out A` (declared covariance) is deliberate: every use of `A` sits inside a
|
|
60
|
+
* declared-access conditional, whose variance the compiler cannot measure,
|
|
61
|
+
* left unannotated, the measured verdict rejects `Commands<Narrow> →
|
|
62
|
+
* Commands` (the direction every permissive consumer needs). Covariance is
|
|
63
|
+
* the honest direction: a context with more declared access is usable where
|
|
64
|
+
* one with less is expected. The checks themselves are per-instantiation, so
|
|
65
|
+
* the annotation does not weaken them.
|
|
66
|
+
*/
|
|
67
|
+
export declare class Commands<out A extends SystemAccess = SystemAccess> {
|
|
68
|
+
private readonly _store;
|
|
69
|
+
constructor(_store: Store);
|
|
70
|
+
/** Spawn from bundles. The create is immediate, so the id returns now. The
|
|
71
|
+
* component attaches are deferred to the phase flush, so until that flush the
|
|
72
|
+
* entity exists in its empty and partial archetype and a query running later in
|
|
73
|
+
* the same phase can observe it half-built. (Same semantics as
|
|
74
|
+
* `ctx.commands.spawn()` followed by `ctx.commands.add`. A fully deferred
|
|
75
|
+
* id-reservation spawn, à la Bevy, is a separate follow-up.) */
|
|
76
|
+
spawn(...items: DeclaredBundleOrDef<A["add"]>[]): EntityID;
|
|
77
|
+
/** Attach bundles to an existing entity (deferred). Bundles zero-fill
|
|
78
|
+
* omitted fields. */
|
|
79
|
+
add(entityId: EntityID, ...items: DeclaredBundleOrDef<A["add"]>[]): this;
|
|
80
|
+
/** Explicit complete-values attach (deferred), the compile-checked shape
|
|
81
|
+
* where a typo'd or missing field is a compile error, mirroring the
|
|
82
|
+
* immediate `ecs.addComponent(e, def, values)`. Tags take no values
|
|
83
|
+
* argument (`AttachValuesArg`). */
|
|
84
|
+
add<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredAdd<A, D>, ...values: AttachValuesArg<SchemaOf<D>>): this;
|
|
85
|
+
/** Remove a component (deferred). */
|
|
86
|
+
remove<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredRemove<A, D>): this;
|
|
87
|
+
/** Destroy an entity (deferred). */
|
|
88
|
+
despawn(entityId: DespawnArg<A>): this;
|
|
89
|
+
/** Buffer `entityId` to be disabled at the phase flush (idempotent).
|
|
90
|
+
* Deferred because a toggle is an in-archetype row swap, which would corrupt
|
|
91
|
+
* a `forEach` SoA loop iterating that archetype if applied mid-system (it
|
|
92
|
+
* reorders the dense columns being read). A disabled entity is excluded from
|
|
93
|
+
* default queries. Opt back in per query with `.includeDisabled()`. The
|
|
94
|
+
* immediate read is `ctx.isDisabled`. */
|
|
95
|
+
disable(entityId: EntityID): this;
|
|
96
|
+
/** Buffer `entityId` to be re-enabled at the phase flush (idempotent).
|
|
97
|
+
* Deferred for the same row-swap reason as `disable`. */
|
|
98
|
+
enable(entityId: EntityID): this;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* The per-system world facade. `A` is the system's declared access surface
|
|
102
|
+
* (system.ts): the config-form `registerSystem` computes it from
|
|
103
|
+
* the literal `reads` and `writes`/… declarations and every guarded method below
|
|
104
|
+
* checks its handle argument against the matching union at compile time,
|
|
105
|
+
* the same rules `accessCheck` enforces at runtime in `DEV`. The default
|
|
106
|
+
* `A = SystemAccess` is fully permissive, so a bare `SystemContext` (helper
|
|
107
|
+
* functions, host-side code, explicitly-annotated escape hatches) behaves
|
|
108
|
+
* exactly as before, and every narrowed `SystemContext<…>` is assignable to
|
|
109
|
+
* it.
|
|
110
|
+
*
|
|
111
|
+
* `out A` (declared covariance) is deliberate, see `Commands` above: the
|
|
112
|
+
* declared-access conditionals are unmeasurable to the compiler, and the
|
|
113
|
+
* unannotated verdict rejects exactly the `SystemContext<Narrow> →
|
|
114
|
+
* SystemContext` conversion the whole design depends on.
|
|
115
|
+
*/
|
|
116
|
+
export declare class SystemContext<out A extends SystemAccess = SystemAccess> {
|
|
117
|
+
private readonly _store;
|
|
118
|
+
lastRunTick: number;
|
|
119
|
+
/** Deferred structural-command facade. */
|
|
120
|
+
readonly commands: Commands<A>;
|
|
121
|
+
/** The frame tick: the count of `update()` calls so far. Run conditions
|
|
122
|
+
* read it. The change tick that a write stamps is a separate counter that
|
|
123
|
+
* advances before every system run, so it does not equal this value. */
|
|
124
|
+
get ecsTick(): number;
|
|
125
|
+
/** @internal Advance the change tick for the run that follows and return
|
|
126
|
+
* the new value. The schedule calls it before each system run and before
|
|
127
|
+
* each phase flush. Not for a system body. */
|
|
128
|
+
advanceChangeTick(): number;
|
|
129
|
+
/** @internal Copy every archetype's live row count into its descriptor.
|
|
130
|
+
* The schedule calls it before it dispatches a system to a compute backend,
|
|
131
|
+
* because a module reads the copy and a mutation earlier in the phase leaves
|
|
132
|
+
* it stale. The store returns on a flag when nothing is dirty, so a phase
|
|
133
|
+
* with no mutation pays that flag read for each dispatch. Not for a system
|
|
134
|
+
* body, a host outside the schedule calls `ecs.publishRowCounts()`. */
|
|
135
|
+
publishRowCounts(): void;
|
|
136
|
+
/** The world's frame-trace sink, or `null`. Lets the schedule
|
|
137
|
+
* fire `systemBegin` and `flush*` without reaching into the private store.
|
|
138
|
+
* Read only under `if (DEV)`. The seam is dead-code-eliminated in prod. */
|
|
139
|
+
get trace(): FrameTraceSink | null;
|
|
140
|
+
constructor(_store: Store);
|
|
141
|
+
isAlive(entityId: EntityID): boolean;
|
|
142
|
+
hasComponent(entityId: EntityID, def: ComponentDef): boolean;
|
|
143
|
+
getField<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredRead<A, D>, field: string & keyof SchemaOf<D>): number;
|
|
144
|
+
/** Total sibling of {@link getField}, mirroring `ecs.tryGetField`. It reads
|
|
145
|
+
* `undefined` when the entity is dead or doesn't hold
|
|
146
|
+
* the component, instead of a dev throw or a prod garbage read. The safe way
|
|
147
|
+
* to probe-and-read in one call: `ctx.tryGetField(e, Health, "current") ?? 0`. */
|
|
148
|
+
tryGetField<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredRead<A, D>, field: string & keyof SchemaOf<D>): number | undefined;
|
|
149
|
+
setField<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredWrite<A, D>, field: string & keyof SchemaOf<D>, value: number): void;
|
|
150
|
+
/** Read-modify-write one field: `updateField(e, Gold, "value", v => v - cost)`
|
|
151
|
+
* is the one-line form of the `getField` → compute → `setField` round trip.
|
|
152
|
+
* Returns the written value. Same access-check and observer semantics as the
|
|
153
|
+
* two calls it composes (inlined here: the declared-access conditionals on
|
|
154
|
+
* those methods only resolve per `A` instantiation, so a body where `A` is
|
|
155
|
+
* still generic cannot call them without casts). */
|
|
156
|
+
updateField<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredWrite<A, D>, field: string & keyof SchemaOf<D>, fn: (current: number) => number): number;
|
|
157
|
+
/**
|
|
158
|
+
* Record an entity as changed for a component's per-entity `onSet` observer.
|
|
159
|
+
* The SoA write idiom, `const { x } = cols.mut(D); x[i] = v` in a tight
|
|
160
|
+
* loop, bypasses the engine, which never sees the per-element writes, so a
|
|
161
|
+
* per-entity `onSet` consumer records the row by hand. This is the by-id
|
|
162
|
+
* form: a call, a resolve and a list push per row. The row form,
|
|
163
|
+
* `cols.ticks(D)[i] = cols.tick`, is one store per row, and the one to
|
|
164
|
+
* reach for inside a chunk loop. No-op for components without a
|
|
165
|
+
* per-entity onSet observer. `setField`, `ref` and a cursor record on
|
|
166
|
+
* their own.
|
|
167
|
+
*/
|
|
168
|
+
markChanged(entityId: EntityID, def: ComponentDef): void;
|
|
169
|
+
/**
|
|
170
|
+
* Create a cached component reference for a single entity. Marks the
|
|
171
|
+
* component as changed (the mutable default, see `refRead` for the
|
|
172
|
+
* read-only variant to reach for when you are not mutating), and records
|
|
173
|
+
* the entity for a per-entity onSet observer. Both happen here, at
|
|
174
|
+
* creation: the accessor's setters write raw columns and cannot record,
|
|
175
|
+
* so the record is conservative, as the archetype stamp is. See ref.ts.
|
|
176
|
+
*/
|
|
177
|
+
ref<D extends ComponentDef<any>>(def: D & DeclaredWrite<A, D>, entityId: EntityID): ComponentRef<SchemaOf<D>>;
|
|
178
|
+
/**
|
|
179
|
+
* Create a cached read-only component reference for a single entity. Use
|
|
180
|
+
* this when you are not mutating. The returned `ReadonlyComponentRef<S>`
|
|
181
|
+
* is an *advisory* compile-time barrier (no `_changedTick` bump): the
|
|
182
|
+
* `readonly` typing blocks field writes at the type layer, but the
|
|
183
|
+
* underlying accessor shares its prototype with `ref()` and can still be
|
|
184
|
+
* written through a deliberate cast. See ref.ts.
|
|
185
|
+
*/
|
|
186
|
+
refRead<D extends ComponentDef<any>>(def: D & DeclaredRead<A, D>, entityId: EntityID): ReadonlyComponentRef<SchemaOf<D>>;
|
|
187
|
+
/**
|
|
188
|
+
* A re-pointable single-entity cursor over `def`, the in-system twin of
|
|
189
|
+
* {@link ECS.cursor}, and the accessor to reach for when a system touches many
|
|
190
|
+
* entities **by id** rather than by query span.
|
|
191
|
+
*
|
|
192
|
+
* `ctx.ref` allocates one accessor for each entity. That allocation is the
|
|
193
|
+
* largest part of the cost of a read of one field by id, because to make an
|
|
194
|
+
* accessor costs much more than to move one. Make the cursor one time,
|
|
195
|
+
* outside the loop:
|
|
196
|
+
*
|
|
197
|
+
* const p = ctx.cursor(Pos);
|
|
198
|
+
* for (const e of hits) { p.at(e); p.x += p.y * dt; }
|
|
199
|
+
*
|
|
200
|
+
* Mutable: every `at()` stamps the change tick. Still prefer `forEachChunk` when
|
|
201
|
+
* a query can express the entity set, a cursor removes the per-entity
|
|
202
|
+
* allocation, not the per-entity archetype resolution.
|
|
203
|
+
*/
|
|
204
|
+
cursor<D extends ComponentDef<any>>(def: D & DeclaredWrite<A, D>): ComponentCursor<SchemaOf<D>>;
|
|
205
|
+
/** Read-only {@link cursor}: no change-tick stamp on `at()`. Advisory only,
|
|
206
|
+
* same caveat as `ctx.refRead`. */
|
|
207
|
+
cursorRead<D extends ComponentDef<any>>(def: D & DeclaredRead<A, D>): ReadonlyComponentCursor<SchemaOf<D>>;
|
|
208
|
+
/** Whether `entityId` is currently disabled (immediate read). Toggling is
|
|
209
|
+
* deferred, `ctx.commands.disable` and `ctx.commands.enable`. */
|
|
210
|
+
isDisabled(entityId: EntityID): boolean;
|
|
211
|
+
/** Tags take no values argument. Valued schemas require a complete one. */
|
|
212
|
+
addSparse<D extends SparseComponentDef<any>>(entityId: EntityID, def: D & DeclaredSparseWrite<A, D>, ...values: AttachValuesArg<SparseSchemaOf<D>>): this;
|
|
213
|
+
removeSparse<D extends SparseComponentDef<any>>(entityId: EntityID, def: D & DeclaredSparseWrite<A, D>): this;
|
|
214
|
+
hasSparse(entityId: EntityID, def: SparseComponentDef): boolean;
|
|
215
|
+
getSparseField<D extends SparseComponentDef<any>>(entityId: EntityID, def: D & DeclaredSparseRead<A, D>, field: string & keyof SparseSchemaOf<D>): number;
|
|
216
|
+
setSparseField<D extends SparseComponentDef<any>>(entityId: EntityID, def: D & DeclaredSparseWrite<A, D>, field: string & keyof SparseSchemaOf<D>, value: number): void;
|
|
217
|
+
/** A cursor over a sparse component, the sparse sibling of {@link cursor}
|
|
218
|
+
* and the fastest read by id in a system: `at()` writes the entity index and
|
|
219
|
+
* a field access is one load. Mutable. Declare the component in
|
|
220
|
+
* `sparseWrites`. See `ECS.sparseCursor`. */
|
|
221
|
+
sparseCursor<D extends SparseComponentDef<any>>(def: D & DeclaredSparseWrite<A, D>): ComponentCursor<SparseSchemaOf<D>>;
|
|
222
|
+
/** Whether the sparse component of `entityId` changed since the previous
|
|
223
|
+
* run of this system: its row tick is above `lastRunTick`. The row grain
|
|
224
|
+
* of change detection for a sparse component, as a pull. Needs row ticks
|
|
225
|
+
* (`ecs.trackRows(def)`, or an entity-level `onSet`), and throws
|
|
226
|
+
* `ROW_TICKS_NOT_TRACKED` without them. A non-member reads `false`. */
|
|
227
|
+
sparseChanged<D extends SparseComponentDef<any>>(def: D & DeclaredSparseRead<A, D>, entityId: EntityID): boolean;
|
|
228
|
+
/** Read-only {@link sparseCursor}. Declare the component in `sparseReads`.
|
|
229
|
+
* Advisory only, same caveat as `ctx.cursorRead`. */
|
|
230
|
+
sparseCursorRead<D extends SparseComponentDef<any>>(def: D & DeclaredSparseRead<A, D>): ReadonlyComponentCursor<SparseSchemaOf<D>>;
|
|
231
|
+
/** Add a `(R, tgt)` pair to `src` (exclusive replaces, multi adds). */
|
|
232
|
+
addRelation<D extends RelationDef>(src: EntityID, def: D & DeclaredRelationWrite<A, D>, tgt: EntityID): this;
|
|
233
|
+
/** Remove a `(R, tgt)` pair from `src`. For multi, omitting `tgt` removes all. */
|
|
234
|
+
removeRelation<D extends RelationDef>(src: EntityID, def: D & DeclaredRelationWrite<A, D>, tgt?: EntityID): this;
|
|
235
|
+
/** The single target of `src` under an exclusive relation, or `undefined`. */
|
|
236
|
+
targetOf<D extends RelationDef<"exclusive">>(src: EntityID, def: D & DeclaredRelationRead<A, D>): EntityID | undefined;
|
|
237
|
+
/** All targets of `src` under `R`, ascending by id. */
|
|
238
|
+
targetsOf<D extends RelationDef>(src: EntityID, def: D & DeclaredRelationRead<A, D>): EntityID[];
|
|
239
|
+
/** Sources pointing at `tgt` under `R` (the reverse index), ascending by id.
|
|
240
|
+
* `(entity, def)` order, matching `targetOf` and `targetsOf`. */
|
|
241
|
+
sourcesOf<D extends RelationDef>(tgt: EntityID, def: D & DeclaredRelationRead<A, D>): EntityID[];
|
|
242
|
+
/** Whether `src` holds any pair under `R`. */
|
|
243
|
+
hasRelation(src: EntityID, def: RelationDef): boolean;
|
|
244
|
+
/** Flush all deferred changes: structural (add and remove) first, then
|
|
245
|
+
* destructions. Republishes archetype row counts into the SAB
|
|
246
|
+
* descriptor at the end so any WASM scan running in the next phase
|
|
247
|
+
* sees fresh `row_count` fields. This is one of two publish sites,
|
|
248
|
+
* `ECS.update()` also republishes once at tick start, which covers
|
|
249
|
+
* host-side mutations between updates. The publish walks
|
|
250
|
+
* descriptors only. It doesn't touch column data, so paying it once per
|
|
251
|
+
* phase boundary is cheaper than the earlier pattern of paying it for each
|
|
252
|
+
* WASM-using system in each tick. The descriptor walk is gated
|
|
253
|
+
* on a dirty flag, so a read-only phase skips the walk entirely. */
|
|
254
|
+
flush(): void;
|
|
255
|
+
/**
|
|
256
|
+
* Emit an event (or a payload-less signal) onto its channel. The event is
|
|
257
|
+
* visible to every system that runs *later* in the same `update()` and is
|
|
258
|
+
* cleared at the tick's tail, events live exactly one tick, and there is no
|
|
259
|
+
* acknowledgement. The channel must have been registered at world setup with
|
|
260
|
+
* `ecs.events.register(key, fields)` or `registerSignal(key)`.
|
|
261
|
+
*
|
|
262
|
+
* @example
|
|
263
|
+
* const Damaged = eventKey<{ target: EntityID; amount: number }>("Damaged");
|
|
264
|
+
* ecs.events.register(Damaged, ["target", "amount"]);
|
|
265
|
+
* // inside a system:
|
|
266
|
+
* ctx.emit(Damaged, { target: e, amount: 10 });
|
|
267
|
+
*/
|
|
268
|
+
emit(key: SignalKey): void;
|
|
269
|
+
emit<S extends EventShape<S>>(key: EventKey<S>, values: NoInfer<S>): void;
|
|
270
|
+
/**
|
|
271
|
+
* Read this tick's events on a channel. Returns an SoA reader over
|
|
272
|
+
* everything emitted *earlier in the same `update()`*, order systems so
|
|
273
|
+
* readers run after emitters, or they see an empty reader.
|
|
274
|
+
*
|
|
275
|
+
* @example
|
|
276
|
+
* const dmg = ctx.readEvents(Damaged); // SoA columns, one per field
|
|
277
|
+
* for (let i = 0; i < dmg.length; i++) {
|
|
278
|
+
* applyDamage(dmg.target[i], dmg.amount[i]);
|
|
279
|
+
* }
|
|
280
|
+
*/
|
|
281
|
+
readEvents<S extends EventShape<S>>(key: EventKey<S>): EventReader<S>;
|
|
282
|
+
/** Read a resource (declared in `resourceReads`). The flat `ctx` surface verbs
|
|
283
|
+
* its accessors, `getResource`, `setResource`, `removeResource` and `hasResource`,
|
|
284
|
+
* matching `getField`, `setField` and `hasComponent`. The grouped `ecs.resources`
|
|
285
|
+
* facade drops the noun (`get`, `set`, `remove` and `has`) because its receiver
|
|
286
|
+
* already names it. */
|
|
287
|
+
getResource<K extends ResourceKey<any>>(key: K & DeclaredResourceRead<A, K>): ResourceValueOf<K>;
|
|
288
|
+
setResource<K extends ResourceKey<any>>(key: K & DeclaredResourceWrite<A, K>, value: ResourceValueOf<NoInfer<K>>): void;
|
|
289
|
+
/** Drop a resource mid-tick. A lifecycle mutation, so it is access-
|
|
290
|
+
* checked as a *write*, the system must declare the key in `resourceWrites`,
|
|
291
|
+
* which serialises it against readers and writers of the same resource. Fails
|
|
292
|
+
* closed on a missing key. */
|
|
293
|
+
removeResource<K extends ResourceKey<any>>(key: K & DeclaredResourceWrite<A, K>): void;
|
|
294
|
+
hasResource<T>(key: ResourceKey<T>): boolean;
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=system_context.d.ts.map
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import { Store } from './store.js';
|
|
2
|
+
import { FrameTraceSink } from './frame_trace.js';
|
|
3
|
+
import { EntityID } from './entity.js';
|
|
4
|
+
import { ComponentDef, AttachValuesArg, SchemaOf, FieldValues } from './component.js';
|
|
5
|
+
import { SparseComponentDef, SparseSchemaOf } from './sparse_store.js';
|
|
6
|
+
import { RelationDef } from './relation.js';
|
|
7
|
+
import { SystemAccess, DeclaredRead, DeclaredWrite, DeclaredAdd, DeclaredRemove, DeclaredSparseRead, DeclaredSparseWrite, DeclaredRelationRead, DeclaredRelationWrite, DeclaredResourceRead, DeclaredResourceWrite, DespawnArg } from './system.js';
|
|
8
|
+
import { ComponentCursor, ComponentRef, ReadonlyComponentCursor, ReadonlyComponentRef } from './ref.js';
|
|
9
|
+
import { EventKey, EventReader, EventShape, SignalKey } from './event.js';
|
|
10
|
+
import { ResourceKey, ResourceValueOf } from './resource.js';
|
|
11
|
+
/**
|
|
12
|
+
* A `BundleOrDef` whose def is constrained to the enclosing system's declared
|
|
13
|
+
* add surface (system.ts). The bundle branch restates `Bundle`'s shape with
|
|
14
|
+
* the def slot narrowed, intersecting `Bundle<any> & { def: … }` instead
|
|
15
|
+
* would put two `ComponentDef` instantiations in one intersection, which TS
|
|
16
|
+
* relates leniently (see the access-typing notes in system.ts).
|
|
17
|
+
*
|
|
18
|
+
* The outer conditional is a deliberate no-op (`[D] extends [unknown]` is
|
|
19
|
+
* always true): it makes the variance of `D`, and therefore of the access
|
|
20
|
+
* param `A` threaded through `Commands` and `SystemContext`. Unmeasurable to
|
|
21
|
+
* the compiler. A measurable (plain-union) definition here gets `A` marked
|
|
22
|
+
* reliably contravariant, variance-based comparison then rejects
|
|
23
|
+
* `SystemContext<Narrow> → SystemContext` without the structural fallback,
|
|
24
|
+
* and every helper taking a bare `SystemContext` stops accepting typed
|
|
25
|
+
* contexts. Unmeasurable variance forces the structural path, where class
|
|
26
|
+
* methods compare bivariantly and the conversion holds.
|
|
27
|
+
*
|
|
28
|
+
* The inner `D extends ComponentDef ? … : never` Distributes over the declared
|
|
29
|
+
* add-set union, so each raw-literal branch carries its own def's schema
|
|
30
|
+
* (`Partial<FieldValues<SchemaOf<D>>>`) rather than the erased
|
|
31
|
+
* `Partial<Record<string, number>>`. A hand-written `{ def: Vel, values: { x }}`
|
|
32
|
+
* whose fields don't match its def is then rejected in a declared-access system,
|
|
33
|
+
* matching the `StrictBundles` guarantee on the `ecs.*` surface. A permissive
|
|
34
|
+
* context (`add: ComponentDef<any>`, an unnarrowed or `exclusive` system)
|
|
35
|
+
* keeps the loose shape, which is the point of opting out of narrowing. The
|
|
36
|
+
* outer no-op is preserved, so the variance invariant above still holds
|
|
37
|
+
* (verified: the `permissiveHelper(ctx)` assertion still compiles).
|
|
38
|
+
*/
|
|
39
|
+
export type DeclaredBundleOrDef<D> = [D] extends [unknown] ? D extends ComponentDef ? D | {
|
|
40
|
+
readonly def: D;
|
|
41
|
+
readonly values: Readonly<Partial<FieldValues<SchemaOf<D>>>>;
|
|
42
|
+
} : never : never;
|
|
43
|
+
/**
|
|
44
|
+
* Deferred structural-command facade (Bevy `Commands`).
|
|
45
|
+
* Namespaces the deferred structural ops so the call site is self-documenting:
|
|
46
|
+
* `ctx.commands.add(e, …)` is *always* deferred (applied at the phase flush),
|
|
47
|
+
* ending the collision where `ecs.addComponent` (immediate) and a bare
|
|
48
|
+
* `ctx.addComponent` (deferred) would share a name with opposite timing. Takes
|
|
49
|
+
* varargs callable bundles, so one shape, `commands.spawn(bundle(Pos,{x,y}), bundle(Vel,{vx:1}))`,
|
|
50
|
+
* serves spawn and add. This is the only deferred surface: the bare
|
|
51
|
+
* `ctx.addComponent`, `ctx.removeComponent`, `ctx.disable` and `ctx.enable`
|
|
52
|
+
* duplicates were removed in 0.5.0, completing the receiver-implies-timing
|
|
53
|
+
* rule (`ecs.*` immediate, `ctx.commands.*` deferred) that 0.5.0 started for
|
|
54
|
+
* spawn and despawn.
|
|
55
|
+
*
|
|
56
|
+
* `A` narrows the def-taking methods to the enclosing system's declared access
|
|
57
|
+
* (system.ts). The default is fully permissive.
|
|
58
|
+
*
|
|
59
|
+
* `out A` (declared covariance) is deliberate: every use of `A` sits inside a
|
|
60
|
+
* declared-access conditional, whose variance the compiler cannot measure,
|
|
61
|
+
* left unannotated, the measured verdict rejects `Commands<Narrow> →
|
|
62
|
+
* Commands` (the direction every permissive consumer needs). Covariance is
|
|
63
|
+
* the honest direction: a context with more declared access is usable where
|
|
64
|
+
* one with less is expected. The checks themselves are per-instantiation, so
|
|
65
|
+
* the annotation does not weaken them.
|
|
66
|
+
*/
|
|
67
|
+
export declare class Commands<out A extends SystemAccess = SystemAccess> {
|
|
68
|
+
private readonly _store;
|
|
69
|
+
constructor(_store: Store);
|
|
70
|
+
/** Spawn from bundles. The create is immediate, so the id returns now. The
|
|
71
|
+
* component attaches are deferred to the phase flush, so until that flush the
|
|
72
|
+
* entity exists in its empty and partial archetype and a query running later in
|
|
73
|
+
* the same phase can observe it half-built. (Same semantics as
|
|
74
|
+
* `ctx.commands.spawn()` followed by `ctx.commands.add`. A fully deferred
|
|
75
|
+
* id-reservation spawn, à la Bevy, is a separate follow-up.) */
|
|
76
|
+
spawn(...items: DeclaredBundleOrDef<A["add"]>[]): EntityID;
|
|
77
|
+
/** Attach bundles to an existing entity (deferred). Bundles zero-fill
|
|
78
|
+
* omitted fields. */
|
|
79
|
+
add(entityId: EntityID, ...items: DeclaredBundleOrDef<A["add"]>[]): this;
|
|
80
|
+
/** Explicit complete-values attach (deferred), the compile-checked shape
|
|
81
|
+
* where a typo'd or missing field is a compile error, mirroring the
|
|
82
|
+
* immediate `ecs.addComponent(e, def, values)`. Tags take no values
|
|
83
|
+
* argument (`AttachValuesArg`). */
|
|
84
|
+
add<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredAdd<A, D>, ...values: AttachValuesArg<SchemaOf<D>>): this;
|
|
85
|
+
/** Remove a component (deferred). */
|
|
86
|
+
remove<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredRemove<A, D>): this;
|
|
87
|
+
/** Destroy an entity (deferred). */
|
|
88
|
+
despawn(entityId: DespawnArg<A>): this;
|
|
89
|
+
/** Buffer `entityId` to be disabled at the phase flush (idempotent).
|
|
90
|
+
* Deferred because a toggle is an in-archetype row swap, which would corrupt
|
|
91
|
+
* a `forEach` SoA loop iterating that archetype if applied mid-system (it
|
|
92
|
+
* reorders the dense columns being read). A disabled entity is excluded from
|
|
93
|
+
* default queries. Opt back in per query with `.includeDisabled()`. The
|
|
94
|
+
* immediate read is `ctx.isDisabled`. */
|
|
95
|
+
disable(entityId: EntityID): this;
|
|
96
|
+
/** Buffer `entityId` to be re-enabled at the phase flush (idempotent).
|
|
97
|
+
* Deferred for the same row-swap reason as `disable`. */
|
|
98
|
+
enable(entityId: EntityID): this;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* The per-system world facade. `A` is the system's declared access surface
|
|
102
|
+
* (system.ts): the config-form `registerSystem` computes it from
|
|
103
|
+
* the literal `reads` and `writes`/… declarations and every guarded method below
|
|
104
|
+
* checks its handle argument against the matching union at compile time,
|
|
105
|
+
* the same rules `accessCheck` enforces at runtime in `DEV`. The default
|
|
106
|
+
* `A = SystemAccess` is fully permissive, so a bare `SystemContext` (helper
|
|
107
|
+
* functions, host-side code, explicitly-annotated escape hatches) behaves
|
|
108
|
+
* exactly as before, and every narrowed `SystemContext<…>` is assignable to
|
|
109
|
+
* it.
|
|
110
|
+
*
|
|
111
|
+
* `out A` (declared covariance) is deliberate, see `Commands` above: the
|
|
112
|
+
* declared-access conditionals are unmeasurable to the compiler, and the
|
|
113
|
+
* unannotated verdict rejects exactly the `SystemContext<Narrow> →
|
|
114
|
+
* SystemContext` conversion the whole design depends on.
|
|
115
|
+
*/
|
|
116
|
+
export declare class SystemContext<out A extends SystemAccess = SystemAccess> {
|
|
117
|
+
private readonly _store;
|
|
118
|
+
lastRunTick: number;
|
|
119
|
+
/** Deferred structural-command facade. */
|
|
120
|
+
readonly commands: Commands<A>;
|
|
121
|
+
/** The frame tick: the count of `update()` calls so far. Run conditions
|
|
122
|
+
* read it. The change tick that a write stamps is a separate counter that
|
|
123
|
+
* advances before every system run, so it does not equal this value. */
|
|
124
|
+
get ecsTick(): number;
|
|
125
|
+
/** @internal Advance the change tick for the run that follows and return
|
|
126
|
+
* the new value. The schedule calls it before each system run and before
|
|
127
|
+
* each phase flush. Not for a system body. */
|
|
128
|
+
advanceChangeTick(): number;
|
|
129
|
+
/** @internal Copy every archetype's live row count into its descriptor.
|
|
130
|
+
* The schedule calls it before it dispatches a system to a compute backend,
|
|
131
|
+
* because a module reads the copy and a mutation earlier in the phase leaves
|
|
132
|
+
* it stale. The store returns on a flag when nothing is dirty, so a phase
|
|
133
|
+
* with no mutation pays that flag read for each dispatch. Not for a system
|
|
134
|
+
* body, a host outside the schedule calls `ecs.publishRowCounts()`. */
|
|
135
|
+
publishRowCounts(): void;
|
|
136
|
+
/** The world's frame-trace sink, or `null`. Lets the schedule
|
|
137
|
+
* fire `systemBegin` and `flush*` without reaching into the private store.
|
|
138
|
+
* Read only under `if (DEV)`. The seam is dead-code-eliminated in prod. */
|
|
139
|
+
get trace(): FrameTraceSink | null;
|
|
140
|
+
constructor(_store: Store);
|
|
141
|
+
isAlive(entityId: EntityID): boolean;
|
|
142
|
+
hasComponent(entityId: EntityID, def: ComponentDef): boolean;
|
|
143
|
+
getField<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredRead<A, D>, field: string & keyof SchemaOf<D>): number;
|
|
144
|
+
/** Total sibling of {@link getField}, mirroring `ecs.tryGetField`. It reads
|
|
145
|
+
* `undefined` when the entity is dead or doesn't hold
|
|
146
|
+
* the component, instead of a dev throw or a prod garbage read. The safe way
|
|
147
|
+
* to probe-and-read in one call: `ctx.tryGetField(e, Health, "current") ?? 0`. */
|
|
148
|
+
tryGetField<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredRead<A, D>, field: string & keyof SchemaOf<D>): number | undefined;
|
|
149
|
+
setField<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredWrite<A, D>, field: string & keyof SchemaOf<D>, value: number): void;
|
|
150
|
+
/** Read-modify-write one field: `updateField(e, Gold, "value", v => v - cost)`
|
|
151
|
+
* is the one-line form of the `getField` → compute → `setField` round trip.
|
|
152
|
+
* Returns the written value. Same access-check and observer semantics as the
|
|
153
|
+
* two calls it composes (inlined here: the declared-access conditionals on
|
|
154
|
+
* those methods only resolve per `A` instantiation, so a body where `A` is
|
|
155
|
+
* still generic cannot call them without casts). */
|
|
156
|
+
updateField<D extends ComponentDef<any>>(entityId: EntityID, def: D & DeclaredWrite<A, D>, field: string & keyof SchemaOf<D>, fn: (current: number) => number): number;
|
|
157
|
+
/**
|
|
158
|
+
* Record an entity as changed for a component's per-entity `onSet` observer.
|
|
159
|
+
* The SoA write idiom, `const { x } = cols.mut(D); x[i] = v` in a tight
|
|
160
|
+
* loop, bypasses the engine, which never sees the per-element writes, so a
|
|
161
|
+
* per-entity `onSet` consumer records the row by hand. This is the by-id
|
|
162
|
+
* form: a call, a resolve and a list push per row. The row form,
|
|
163
|
+
* `cols.ticks(D)[i] = cols.tick`, is one store per row, and the one to
|
|
164
|
+
* reach for inside a chunk loop. No-op for components without a
|
|
165
|
+
* per-entity onSet observer. `setField`, `ref` and a cursor record on
|
|
166
|
+
* their own.
|
|
167
|
+
*/
|
|
168
|
+
markChanged(entityId: EntityID, def: ComponentDef): void;
|
|
169
|
+
/**
|
|
170
|
+
* Create a cached component reference for a single entity. Marks the
|
|
171
|
+
* component as changed (the mutable default, see `refRead` for the
|
|
172
|
+
* read-only variant to reach for when you are not mutating), and records
|
|
173
|
+
* the entity for a per-entity onSet observer. Both happen here, at
|
|
174
|
+
* creation: the accessor's setters write raw columns and cannot record,
|
|
175
|
+
* so the record is conservative, as the archetype stamp is. See ref.ts.
|
|
176
|
+
*/
|
|
177
|
+
ref<D extends ComponentDef<any>>(def: D & DeclaredWrite<A, D>, entityId: EntityID): ComponentRef<SchemaOf<D>>;
|
|
178
|
+
/**
|
|
179
|
+
* Create a cached read-only component reference for a single entity. Use
|
|
180
|
+
* this when you are not mutating. The returned `ReadonlyComponentRef<S>`
|
|
181
|
+
* is an *advisory* compile-time barrier (no `_changedTick` bump): the
|
|
182
|
+
* `readonly` typing blocks field writes at the type layer, but the
|
|
183
|
+
* underlying accessor shares its prototype with `ref()` and can still be
|
|
184
|
+
* written through a deliberate cast. See ref.ts.
|
|
185
|
+
*/
|
|
186
|
+
refRead<D extends ComponentDef<any>>(def: D & DeclaredRead<A, D>, entityId: EntityID): ReadonlyComponentRef<SchemaOf<D>>;
|
|
187
|
+
/**
|
|
188
|
+
* A re-pointable single-entity cursor over `def`, the in-system twin of
|
|
189
|
+
* {@link ECS.cursor}, and the accessor to reach for when a system touches many
|
|
190
|
+
* entities **by id** rather than by query span.
|
|
191
|
+
*
|
|
192
|
+
* `ctx.ref` allocates one accessor for each entity. That allocation is the
|
|
193
|
+
* largest part of the cost of a read of one field by id, because to make an
|
|
194
|
+
* accessor costs much more than to move one. Make the cursor one time,
|
|
195
|
+
* outside the loop:
|
|
196
|
+
*
|
|
197
|
+
* const p = ctx.cursor(Pos);
|
|
198
|
+
* for (const e of hits) { p.at(e); p.x += p.y * dt; }
|
|
199
|
+
*
|
|
200
|
+
* Mutable: every `at()` stamps the change tick. Still prefer `forEachChunk` when
|
|
201
|
+
* a query can express the entity set, a cursor removes the per-entity
|
|
202
|
+
* allocation, not the per-entity archetype resolution.
|
|
203
|
+
*/
|
|
204
|
+
cursor<D extends ComponentDef<any>>(def: D & DeclaredWrite<A, D>): ComponentCursor<SchemaOf<D>>;
|
|
205
|
+
/** Read-only {@link cursor}: no change-tick stamp on `at()`. Advisory only,
|
|
206
|
+
* same caveat as `ctx.refRead`. */
|
|
207
|
+
cursorRead<D extends ComponentDef<any>>(def: D & DeclaredRead<A, D>): ReadonlyComponentCursor<SchemaOf<D>>;
|
|
208
|
+
/** Whether `entityId` is currently disabled (immediate read). Toggling is
|
|
209
|
+
* deferred, `ctx.commands.disable` and `ctx.commands.enable`. */
|
|
210
|
+
isDisabled(entityId: EntityID): boolean;
|
|
211
|
+
/** Tags take no values argument. Valued schemas require a complete one. */
|
|
212
|
+
addSparse<D extends SparseComponentDef<any>>(entityId: EntityID, def: D & DeclaredSparseWrite<A, D>, ...values: AttachValuesArg<SparseSchemaOf<D>>): this;
|
|
213
|
+
removeSparse<D extends SparseComponentDef<any>>(entityId: EntityID, def: D & DeclaredSparseWrite<A, D>): this;
|
|
214
|
+
hasSparse(entityId: EntityID, def: SparseComponentDef): boolean;
|
|
215
|
+
getSparseField<D extends SparseComponentDef<any>>(entityId: EntityID, def: D & DeclaredSparseRead<A, D>, field: string & keyof SparseSchemaOf<D>): number;
|
|
216
|
+
setSparseField<D extends SparseComponentDef<any>>(entityId: EntityID, def: D & DeclaredSparseWrite<A, D>, field: string & keyof SparseSchemaOf<D>, value: number): void;
|
|
217
|
+
/** A cursor over a sparse component, the sparse sibling of {@link cursor}
|
|
218
|
+
* and the fastest read by id in a system: `at()` writes the entity index and
|
|
219
|
+
* a field access is one load. Mutable. Declare the component in
|
|
220
|
+
* `sparseWrites`. See `ECS.sparseCursor`. */
|
|
221
|
+
sparseCursor<D extends SparseComponentDef<any>>(def: D & DeclaredSparseWrite<A, D>): ComponentCursor<SparseSchemaOf<D>>;
|
|
222
|
+
/** Whether the sparse component of `entityId` changed since the previous
|
|
223
|
+
* run of this system: its row tick is above `lastRunTick`. The row grain
|
|
224
|
+
* of change detection for a sparse component, as a pull. Needs row ticks
|
|
225
|
+
* (`ecs.trackRows(def)`, or an entity-level `onSet`), and throws
|
|
226
|
+
* `ROW_TICKS_NOT_TRACKED` without them. A non-member reads `false`. */
|
|
227
|
+
sparseChanged<D extends SparseComponentDef<any>>(def: D & DeclaredSparseRead<A, D>, entityId: EntityID): boolean;
|
|
228
|
+
/** Read-only {@link sparseCursor}. Declare the component in `sparseReads`.
|
|
229
|
+
* Advisory only, same caveat as `ctx.cursorRead`. */
|
|
230
|
+
sparseCursorRead<D extends SparseComponentDef<any>>(def: D & DeclaredSparseRead<A, D>): ReadonlyComponentCursor<SparseSchemaOf<D>>;
|
|
231
|
+
/** Add a `(R, tgt)` pair to `src` (exclusive replaces, multi adds). */
|
|
232
|
+
addRelation<D extends RelationDef>(src: EntityID, def: D & DeclaredRelationWrite<A, D>, tgt: EntityID): this;
|
|
233
|
+
/** Remove a `(R, tgt)` pair from `src`. For multi, omitting `tgt` removes all. */
|
|
234
|
+
removeRelation<D extends RelationDef>(src: EntityID, def: D & DeclaredRelationWrite<A, D>, tgt?: EntityID): this;
|
|
235
|
+
/** The single target of `src` under an exclusive relation, or `undefined`. */
|
|
236
|
+
targetOf<D extends RelationDef<"exclusive">>(src: EntityID, def: D & DeclaredRelationRead<A, D>): EntityID | undefined;
|
|
237
|
+
/** All targets of `src` under `R`, ascending by id. */
|
|
238
|
+
targetsOf<D extends RelationDef>(src: EntityID, def: D & DeclaredRelationRead<A, D>): EntityID[];
|
|
239
|
+
/** Sources pointing at `tgt` under `R` (the reverse index), ascending by id.
|
|
240
|
+
* `(entity, def)` order, matching `targetOf` and `targetsOf`. */
|
|
241
|
+
sourcesOf<D extends RelationDef>(tgt: EntityID, def: D & DeclaredRelationRead<A, D>): EntityID[];
|
|
242
|
+
/** Whether `src` holds any pair under `R`. */
|
|
243
|
+
hasRelation(src: EntityID, def: RelationDef): boolean;
|
|
244
|
+
/** Flush all deferred changes: structural (add and remove) first, then
|
|
245
|
+
* destructions. Republishes archetype row counts into the SAB
|
|
246
|
+
* descriptor at the end so any WASM scan running in the next phase
|
|
247
|
+
* sees fresh `row_count` fields. This is one of two publish sites,
|
|
248
|
+
* `ECS.update()` also republishes once at tick start, which covers
|
|
249
|
+
* host-side mutations between updates. The publish walks
|
|
250
|
+
* descriptors only. It doesn't touch column data, so paying it once per
|
|
251
|
+
* phase boundary is cheaper than the earlier pattern of paying it for each
|
|
252
|
+
* WASM-using system in each tick. The descriptor walk is gated
|
|
253
|
+
* on a dirty flag, so a read-only phase skips the walk entirely. */
|
|
254
|
+
flush(): void;
|
|
255
|
+
/**
|
|
256
|
+
* Emit an event (or a payload-less signal) onto its channel. The event is
|
|
257
|
+
* visible to every system that runs *later* in the same `update()` and is
|
|
258
|
+
* cleared at the tick's tail, events live exactly one tick, and there is no
|
|
259
|
+
* acknowledgement. The channel must have been registered at world setup with
|
|
260
|
+
* `ecs.events.register(key, fields)` or `registerSignal(key)`.
|
|
261
|
+
*
|
|
262
|
+
* @example
|
|
263
|
+
* const Damaged = eventKey<{ target: EntityID; amount: number }>("Damaged");
|
|
264
|
+
* ecs.events.register(Damaged, ["target", "amount"]);
|
|
265
|
+
* // inside a system:
|
|
266
|
+
* ctx.emit(Damaged, { target: e, amount: 10 });
|
|
267
|
+
*/
|
|
268
|
+
emit(key: SignalKey): void;
|
|
269
|
+
emit<S extends EventShape<S>>(key: EventKey<S>, values: NoInfer<S>): void;
|
|
270
|
+
/**
|
|
271
|
+
* Read this tick's events on a channel. Returns an SoA reader over
|
|
272
|
+
* everything emitted *earlier in the same `update()`*, order systems so
|
|
273
|
+
* readers run after emitters, or they see an empty reader.
|
|
274
|
+
*
|
|
275
|
+
* @example
|
|
276
|
+
* const dmg = ctx.readEvents(Damaged); // SoA columns, one per field
|
|
277
|
+
* for (let i = 0; i < dmg.length; i++) {
|
|
278
|
+
* applyDamage(dmg.target[i], dmg.amount[i]);
|
|
279
|
+
* }
|
|
280
|
+
*/
|
|
281
|
+
readEvents<S extends EventShape<S>>(key: EventKey<S>): EventReader<S>;
|
|
282
|
+
/** Read a resource (declared in `resourceReads`). The flat `ctx` surface verbs
|
|
283
|
+
* its accessors, `getResource`, `setResource`, `removeResource` and `hasResource`,
|
|
284
|
+
* matching `getField`, `setField` and `hasComponent`. The grouped `ecs.resources`
|
|
285
|
+
* facade drops the noun (`get`, `set`, `remove` and `has`) because its receiver
|
|
286
|
+
* already names it. */
|
|
287
|
+
getResource<K extends ResourceKey<any>>(key: K & DeclaredResourceRead<A, K>): ResourceValueOf<K>;
|
|
288
|
+
setResource<K extends ResourceKey<any>>(key: K & DeclaredResourceWrite<A, K>, value: ResourceValueOf<NoInfer<K>>): void;
|
|
289
|
+
/** Drop a resource mid-tick. A lifecycle mutation, so it is access-
|
|
290
|
+
* checked as a *write*, the system must declare the key in `resourceWrites`,
|
|
291
|
+
* which serialises it against readers and writers of the same resource. Fails
|
|
292
|
+
* closed on a missing key. */
|
|
293
|
+
removeResource<K extends ResourceKey<any>>(key: K & DeclaredResourceWrite<A, K>): void;
|
|
294
|
+
hasResource<T>(key: ResourceKey<T>): boolean;
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=system_context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system_context.d.ts","sourceRoot":"","sources":["../../../src/core/ecs/system_context.ts"],"names":[],"mappings":"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"}
|