#component #hecs #world #ecs #heavy #entities #patching

no-std hv-ecs

A wrapper around the hecs crate performing reexporting/version patching for Heavy

1 unstable release

0.1.0 Nov 12, 2021

#1469 in Encoding


Used in hv-guarded-borrow

MIT/Apache

255KB
5.5K SLoC

Heavy ECS - hecs shim

This crate exists to provide a shim between hecs and Heavy, for the reason that at current Heavy depends on several extensions to hecs we hope to upstream soon. Until that happens, this crate contains direct copy of our fork of the hecs source code, subject to the same license as hecs itself.

Once the fork is upstreamed this crate will become a single module with a single line that reexports hecs.

This is not expected to be used outside of Heavy.


lib.rs:

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);

Dependencies

~0.9–1.2MB
~20K SLoC