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 componentsHandle for appending components
Batched version of
QueryIter
A collection of components that implement
Clone
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
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 useHandle 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 bothErrors 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 typeA dynamically typed collection of components
A dynamically typed collection of cloneable components
Marker trait indicating whether a given
Query
will not produce unique referencesType Definitions
Type of values yielded by a query
Derive Macros
Implement
Bundle
for a structImplement
DynamicBundleClone
for a struct.Implement
Query
for a struct