MicroECS
Minimal (~500 LoC) Entity Component System in python and numpy. Examples also use raylib for rendering.
Usage:
- Via pip:
pip install microecs - From source code:
git clone https://gitlab.com/meehai/microecs # clone the source code
cd microecs # go in the cloned directory
python -m venv .venv && source .venv/bin/activate # make a virtual env, optional but useful
python -m pip install -e . # install micro ecs in this virtual env
python -m pytest test/ # run the unit & integration tests to verify installation
python examples/01-hello-world.py # run the basic hello world example (others in that dir)
Docs: meehai.gitlab.io/microecs
Simple example
from dataclasses import field
import numpy as np
from microecs import World, Component
class HasPosition(Component):
position: np.ndarray = field(metadata={"shape": (2, ), "dtype": "float32", "default": np.float32([0, 0])})
class HasVelocity(Component):
velocity: np.ndarray = field(metadata={"shape": (2, ), "dtype": "float32", "default": np.float32([0, 0])})
world = World(components=[HasPosition, HasVelocity])
# both velocity and position (data) are optional since they have a default
eid1 = world.add_entity(components=[HasPosition, HasVelocity])
# data is passed as kwargs to add_entity
eid2 = world.add_entity(components=[HasPosition, HasVelocity],
velocity=np.float32([1, 1]))
world.update() # add_entity uses a command buffer internally until this is called
print(f"Added 2 entities. Id1={eid1}, Id2={eid2}")
# Querying: batch operate on all entities at once.
qr = world.query(HasVelocity) # qr is a QueryResult object, a numpy-based Structure of Arrays (SoA).
qr.velocity += np.float32([0.1, 0.5])
Documentation
- Primitives — the five building blocks (
Component,Entity,Pool,QueryResult,World), mutation timing, and how numpy-like the query views really are. - Systems & Per-Entity Iteration — writing systems, the three ways to touch data (vectorized,
zip-rows, theEntityAPI), and when each is right. - Hello World (raylib) — a complete runnable program, walked through part by part.
- Benchmarks — microecs vs OOP, and microecs vs other Python ECS libraries.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
microecs-0.7.0.tar.gz
(15.6 kB
view details)
File details
Details for the file microecs-0.7.0.tar.gz.
File metadata
- Download URL: microecs-0.7.0.tar.gz
- Upload date:
- Size: 15.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/5.1.1 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4bd3f8a32fe866b62419b2f24dc0c93e1fb9f76ae3ac00a02cc63b84bc68dc6e
|
|
| MD5 |
3515806a1117f79df6ef3109f679ea87
|
|
| BLAKE2b-256 |
e06846c9d21d3c78607d3ebcabf8d5fa36ecab745a8815630419c8070da7867a
|