View Source ECS Design
entities-aspects-and-components
Entities, Aspects, and Components
Everything in your application is an entity, but in ECS you won't work with these entities directly - instead you will work directly with the individual attributes that an entity might have. These attributes are called aspects, and they are given to an entity by creating a component, which holds, at minimum, the entity's unique ID, but also any extra data which is relevant to that aspect. For example:
- You're running a simulation of cars on a highway
- Each car gets its own
entity_id
e.g.123
- If the car with ID 123 is blue, we give it the
Color
aspect, stored as a{123, "blue"}
component - If the same car is moving west at 60mph, we might model this with a
Moving
aspect, stored as a{123, 60, "west"}
component - Another car with ID 135 might have the
Moving
aspect with different data{135, 30, "east"}
- These cars would also have
Location
which holds x, y, z coordinates:{entity_id, x, y, z}
systems
Systems
Once your data is modeled using components to associate different aspects to your entities, you'll create systems to operate on them. For example:
- Entities with the
Moving
aspect should have their locations regularly updated according to the speed and direction - We can create a
Move
system which reads theMoving
component, calculates how far the car has moved since the last server tick, and updates the entity'sLocation
component accordingly. - The system will run every tick, only considering entities which have the
Moving
aspect