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

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

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