A simple realization of Entity Component System
Project description
Ecys is a simple realization of Entity Components System
Ecys is an MIT licensed Entity Component System (ECS). The design is based on anax realization of ECS.
1) Compatibility
Esyc is a Python 3 library only. Specifically, all currently supported versions of Python 3.
2) Installation
You can install ecys using pip:
pip install ecys
3) Structure
World
A World is your main working object to interact with ecys. After creating a World object, you’ll use that object to crate Entities from your Component objects. A World is assigned all of your System instances. A World allows you to update all your Systems using call per frame. You can create or delete Entities, add or remove Systems while your application is running.
Entity
Entity is a simple container for Components. You can add or remove Components from your Entity.
Components
You should define your Component classes. They should not contain any logic. Components might have initialization code, but no updating state logic. You can use ecys.Component to indicate your class as Component, but it’s not obligatory.
Example of simple Velocity component:
from dataclasses import dataclass @dataclass class Velocity(ecys.Component): x: float y: float
Systems
Systems are where all processing logic is executed. All Systems must inherit from the ecys.System class, and have a method called update. You should add your System to the World instance to using. You can define your System classes with ecys.requires or ecys.excludes decorators. An entities property returns tuple of Entities with (or without) Components specified in decorator parameters. If you have not defined a decorator an entities returns all entities in your World.
A simple MovementSystem:
@ecys.requires(Position, Velocity) class MovementSystem(ecys.System): def update(self): for entity in self.entities: position = entity.get_component(Position) velocity = entity.get_component(Velocity) position.x += velocity.x position.y += velocity.y
4) Basic usage
The first step after importing ecys is to create a World instance:
world = ecys.World()
Create some System instances and add to the World. You can specify an optional updating priority (higher number = faster). By default priority is 0:
movement_system = MovementSystem() render_system = RenderSystem() world.add_system(movement_system, 1) world.add_system(render_system) # . . . world.add_system(AnotherOneSystem())
Create Entities:
player = world.create_entity(Position(0, 0), Velocity(1, 2)) # . . . player.add_component(AnotherOneComponent(*args))
Executing all Systems is done with a single call to world.update. This will call the update methods on all added Systems, in order of their priority:
world.update()
You can pass any args you need to world.update, but you must also make sure to receive them properly in the update methods of your Systems. For example, if you pass a delta time argument as world.update(delta_time), your Systems’s update methods should all receive it as: def process(self, delta_time):
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file ecys-2.1.0.tar.gz
.
File metadata
- Download URL: ecys-2.1.0.tar.gz
- Upload date:
- Size: 5.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: Python-urllib/3.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bba7396d40088481af5da8cdb9e3604cfd6021c39f96d30391995cb52ae1e865 |
|
MD5 | e1035c02113b02c62194808451a8c7df |
|
BLAKE2b-256 | 56ad52091e1a52f0d3046cf6247ecd05607fa0762a8231e8a53d521dbe0a5ac1 |