1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
//! The renderer-free half of the engine's ECS: the storage mechanism, the
//! per-tick context systems see, and the asset identity + registry layer the
//! build / validate pipeline and the client runtime share.
//!
//! The storage mechanism is closed-world and carries no engine domain type. It
//! provides the generic primitives only: entities ([`Entity`], [`Entities`]),
//! typed storage columns ([`Column`]), change ticks ([`Tick`]), component masks
//! ([`ComponentMask`]) and a join index ([`JoinIndex`]), resources
//! ([`Resources`]), events ([`Events`]), and the per-system access sets
//! ([`Access`]) the scheduler uses to run two systems concurrently. Nothing in
//! that half knows about meshes, blobs, or rendering, and none of it stores a
//! type the project did not register at compile time: there is no TypeId-keyed
//! type erasure and no open-world insert of arbitrary external types.
//!
//! The concrete component set is registered in `registry` and expanded by
//! [`define_components!`](crate::define_components), which pairs the asset-enum
//! dispatch with the storage half from
//! [`define_component_storage!`](crate::define_component_storage).
//!
//! On top of that sit the pieces the engine reaches for: the [`Component`]
//! metadata trait, the plain data types the registry and blob format are built
//! from ([`AssetOrigin`], [`AssetPayload`], [`PayloadLocator`],
//! [`BlobAssetDef`], [`AssetKind`]), the [`System`] behavior trait, and the
//! [`World`]: the components, resources, events, payloads, profile, and frame
//! scratch a tick reads and writes, plus the systems that run over them and
//! their schedule. The system table itself ([`SystemTable`]) names a host's own
//! system types, so it is written in the client crate, whose `ecs` module
//! re-exports everything here under the historical `crate::ecs::*` paths
//! alongside the `ComponentAsset` value enum.
//!
//! The interner that assigns asset identities keeps a per-thread table and
//! lives in concinnity-host. The authoring `Registration` record lives in
//! concinnity-cook, constructed from the trait's metadata consts.
// The storage primitives. `Column`, `Entities`, `JoinIndex` and `AtomicTick`
// are named by the expansion of `define_component_storage!`, so they are public
// here for every crate that expands it.
pub use Access;
pub use ;
pub use ;
pub use ;
pub use EventStore;
pub use JoinIndex;
pub use ;
pub use Resources;
pub use ;
// The runtime-facing component contract and the metadata enums the registry and
// the blob format are built from.
pub use ;
// Systems' view of the world during a tick.
pub use PipelineContext;
// Per-frame facilities carried on `PipelineContext`. Re-exported by the client
// `ecs` module under the historical `crate::ecs::*` paths, like the rest.
// `Arena` comes with it so a crate that only builds a context (the physics and
// audio subsystems, and every test world) can name the scratch type without
// taking its own dependency on the allocation layer.
pub use crateArena;
pub use ;
// Renderer-free resources the runtime systems publish and read to coordinate a
// tick (menu state, frame-rate cap, HUD prefs, cursor + dropdown views), plus
// the world's cook-counted physics reservation. They name no renderer type, so
// they live here where the physics / audio subsystem crates can reach them; the
// client `ecs` module re-exports them under the historical `crate::ecs::*`
// paths.
pub use ;
// The runtime behavior trait every engine system implements + its per-step
// control signal. Renderer-free (they name only `PipelineContext`), so they live
// here for the physics / audio subsystem crates; the client `ecs` module
// re-exports them under the historical `crate::ecs::*` paths and its
// `define_systems!` table names the gate that builds each one.
pub use ;
// The name -> Entity index the load-time Prop decomposition pass publishes.
// Renderer-free, so the physics / audio subsystem crates can resolve a name
// reference to an Entity through it; the client `ecs::decompose` module
// re-exports it under the historical `crate::ecs::decompose::EntityByName` path.
pub use EntityByName;
// The payload-access seam systems reach through: keeps the storage mechanism
// free of blob file I/O (`concinnity_host::store`'s `BlobData` is the runtime
// implementor).
pub use ;
// A world, the systems built over it, and the table a host starts it from: one
// entry per system in run order, plus the load-time passes bracketing them.
// This crate writes one such table itself, listing the simulation systems it
// owns, for a world that runs with no host beyond it.
pub use BuiltSystem;
pub use HEADLESS_SYSTEMS;
pub use ;
pub use ;
// The host-installed monotonic clock the step loop times systems with.
pub use Clock;
// Runtime asset-registry types, generated by the macros in `define_components`
// (invoked in `registry`). Re-exported here so the rest of the crate (and the
// client, which re-exports this module under `crate::ecs::*`) can keep using
// the historical `crate::ecs::*` paths. The authoring `RegisteredType` registry
// is built from the same component list in the build crate. Systems have no
// registry here: they are built client-side from the `System` behavior trait.
pub use ;
// Points to an asset's compiled binary payload within the data blob files.
// Blob-backed asset structs carry it as a `#[serde(skip)]` field.
pub use PayloadLocator;
// Per-kind resource handles (dense per-kind indices into the runtime resource
// tables), Cook assigns them;
// components and the resource tables address resources by them.
pub use ;
pub use ;
// The blob record schema (the component defs stream + the resource stream) is
// owned by the `blob` format module; re-exported here so the runtime, cook, and
// the registry macros keep naming `ecs::{BlobAssetDef, ResourceKind, ...}`
// unchanged.
pub use crate;