A simple implementation of the Entity-Component pattern.
This project is available on PyPI so you can simply install it via
pip install pyecs
from dataclasses import dataclass
from typing import Tuple
from pyecs import Store
# 1. build your components
@dataclass
class Transform:
position: Tuple[float, float] = (0.0, 0.0)
@dataclass
class Rigidbody:
velocity: Tuple[float, float] = (0.0, 0.0)
acceleration: Tuple[float, float] = (0.0, 0.0)
if __name__ == "__main__":
# 2. intialize entity-component store
store = Store()
# 3. add some entities
scene = store.add_entity()
scene.add_child(Transform(), Rigidbody(acceleration=(1.0, 0.0)))
scene.add_child(Transform(), Rigidbody(acceleration=(0.0, 1.0)))
scene.add_child(Transform(), Rigidbody(acceleration=(1.0, 1.0)))
# 4. run everything
while True:
for entity in store.get_entities_with(Transform, Rigidbody):
transform, rigidbody = entity.get_components(Transform, Rigidbody)
rigidbody.velocity = (
rigidbody.velocity[0] + rigidbody.acceleration[0],
rigidbody.velocity[1] + rigidbody.acceleration[1],
)
transform.position = (
transform.position[0] + rigidbody.velocity[0],
transform.position[1] + rigidbody.velocity[1],
)
print(f"{transform=}\t{rigidbody=}")
Simply install pipenv and run the following line:
pipenv install --dev