A simple implementation of the Entity-Component pattern.
This project is available on PyPI so you can simply install it via
pip install pyecsfrom 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