recs - Reactive Entity Component System
recs
is built with reactivity in mind.
Components
and Queries
expose an update$
stream, that Systems
can react to.
To build some fundamental intuition about ECS, have a look at our MUD ECS introduction.
recs
is seamlessly integrated with the other MUD libraries, but can be used independently.
For detailed documentation, check out mud.dev/recs.
Features
- Reactive components, queries, and systems
- Powerful queries, including advanced indirect relationship queries
- Seamless integration with other MUD libraries and services
- Simple, declarative API
- Ultra high performance
- TypeScript support
Example
import {
createWorld,
defineComponent,
createEntity,
withValue,
defineSystem,
Has,
getComponentValue,
setComponent,
} from "@latticexyz/recs";
// Create a new World
const World = createWorld();
// Define a couple components
const Position = defineComponent(world, { x: Type.Number, y: Type.Number });
const Movable = defineComponent(world, { speed: Type.Number });
// Create a new entity
const entity1 = createEntity(world, [withValue(Position, { x: 0, y: 0 }), withValue(Movable, { speed: 10 })]);
// Define a system that reacts to updates of movable entities with a position
defineSystem(world, [Has(Position), Has(Movable)], (update) => {
console.log("Entity", update.entity, "moved to", update.value);
// ... do stuff, like rendering the entity on the screen, etc
});
// Move the entity around
setInterval(() => {
const currentPosition = getComponentValue(Position, entity1);
const newPosition = { x: position.x + 1, y: position.y + 1 };
setComponent(Position, entity1, newPosition);
}, 1000);
Acknowledgements
- Syntax originally inspired by bitECS