Crate hecs

source ·
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

Convenience tools for serializing Worlds

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
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 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
A borrow of a World sufficient to execute the query Q on a single entity
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
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

Type of access a Query may have to an Archetype
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
A collection of component types to fetch from a World
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