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

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

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

Provides random access to the results of a query

Query transformer skipping entities that do not have a T component

Query transformer skipping entities that have a T component

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

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