A simple implementation of the Entity-Component pattern.
This project is available on PyPI so you can simply install it via
pip install pyecsfromdataclassesimportdataclassfromtypingimportTuplefrompyecsimportStore# 1. build your components@dataclassclassTransform:
position: Tuple[float, float] = (0.0, 0.0)
@dataclassclassRigidbody:
velocity: Tuple[float, float] = (0.0, 0.0)
acceleration: Tuple[float, float] = (0.0, 0.0)
if__name__=="__main__":
# 2. intialize entity-component storestore=Store()
# 3. add some entitiesscene=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 everythingwhileTrue:
forentityinstore.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