Expand description
A handy ECS
hecs provides a high-performance, minimalist entity-component-system (ECS) world. It is a
library, not a framework. In place of an explicit “System” abstraction, a World
’s entities are
easily queried from regular code. Organize your application however you like!
In order of importance, hecs pursues:
- fast traversals
- a simple interface
- a small dependency closure
- exclusion of externally-implementable functionality
let mut world = World::new();
// Nearly any type can be used as a component with zero boilerplate
let a = world.spawn((123, true, "abc"));
let b = world.spawn((42, false));
// Systems can be simple for loops
for (id, (number, &flag)) in world.query_mut::<(&mut i32, &bool)>() {
if flag { *number *= 2; }
}
// Random access is simple and safe
assert_eq!(*world.get::<&i32>(a).unwrap(), 246);
assert_eq!(*world.get::<&i32>(b).unwrap(), 42);
Modules
Structs
A collection of entities having the same component types
Shared reference to a single column of component data in an Archetype
Unique reference to a single column of component data in an Archetype
Determines freshness of information derived from World::archetypes
A sequence of entities yielded by BatchedIter
Error indicating that a ColumnBatchBuilder
was missing components
Handle for appending components
Batched version of QueryIter
The output of an EntityBuilder
, suitable for passing to
World::spawn
or World::insert
A collection of components that implement Clone
Borrows every T
component in a world
A collection of component data for entities with the same component types
An incomplete collection of component data for entities with the same component types
A collection of component types
Uniquely borrows every T
component in a world
Records operations for future application to a World
Lightweight unique ID, or handle, of an entity
Helper for incrementally constructing a bundle of components with dynamic component types
Variant of EntityBuilder
that clones components on use
Handle to an entity with any component types
Iterator over all of a world’s entities
Error indicating that an entity did not have a required component
Error indicating that no entity with a particular ID exists
A prepared query can be stored independently of the World
to amortize query set-up costs.
Combined borrow of a PreparedQuery
and a World
Iterates over all entities matching a PreparedQuery
Provides random access to the results of a prepared query
A borrow of a World
sufficient to execute the query Q
Iterator over the set of entities with the components in Q
A query builder that’s convertible directly into an iterator
Shared borrow of an entity’s component
Unique borrow of an entity’s component
A query that yields true
iff an entity would satisfy the query Q
Entity IDs created by World::spawn_batch
Iterator over Entity
s spawned by World::spawn_column_batch()
An entity removed from a World
Provides random access to the results of a query
Query transformer skipping entities that do not satisfy another query
Query transformer skipping entities that satisfy another query
An unordered collection of entities, each having any number of distinctly typed components
Enums
Errors that arise when accessing components
Holds an L
, or an R
, or both
Errors that arise when querying a single entity
Traits
A statically typed collection of components
Types that can be components, implemented automatically for all Send + Sync + 'static
types
&T
or &mut T
where T
is some component type
&T
where T
is some component type
A dynamically typed collection of components
A dynamically typed collection of cloneable components
Marker trait indicating whether a given Query
will not produce unique references
Type Definitions
Type of values yielded by a query
Derive Macros
Implement Bundle
for a struct
Implement DynamicBundleClone
for a struct.
Implement Query
for a struct