Easy to use template based C++ Entity Component System Manager library.
The ECS pattern, or Entity-Component-System pattern, is a design pattern commonly used in game development and simulation software. It is a way to organize and manage the behavior and data of objects within a system. The ECS pattern is particularly useful for systems with a large number of entities that can have varying and dynamic sets of attributes.
See the documentation
- Straightforward template architecture
- Custom event creation support
- Cache friendly linear pools
- Acceptable compilation time
- Fast component iteration
- Fast entity component access
- Singleton class pattern
using namespace ecsm;
struct RigidBodyComponent final : public Component
{
float size = 0.0f;
};
class PhysicsSystem final : public ComponentSystem<RigidBodyComponent, false>
{
PhysicsSystem()
{
auto manager = Manager::Instance::get();
ECSM_SUBSCRIBE_TO_EVENT("Update", PhysicsSystem::update);
}
~PhysicsSystem() final
{
if (Manager::get()->isRunning)
{
auto manager = Manager::Instance::get();
ECSM_UNSUBSCRIBE_FROM_EVENT("Update", PhysicsSystem::update);
}
}
void update()
{
for (auto& component : components)
{
if (!component.getEntity())
continue;
// Process your component
}
}
friend class ecsm::Manager;
};
void ecsmExample()
{
auto manager = new ecsm::Manager();
manager->createSystem<PhysicsSystem>();
manager->createSystem<GraphicsSystem>(false, 123); // System arguments
// ...
manager->initialize();
auto rigidBody = manager->createEntity();
auto rigidBodyView = manager->add<RigidBodyComponent>(rigidBody);
rigidBodyView->size = 1.0f;
manager->start();
delete manager;
}- Windows
- macOS
- Ubuntu (Linux)
- C++17 compiler
- Git 2.30+
- CMake 3.16+
Use building instructions to install all required tools and libraries.
| Name | Description | Default value |
|---|---|---|
| ECSM_BUILD_SHARED | Build ECSM shared library | ON |
| ECSM_BUILD_TESTS | Build ECSM library tests | ON |
| Name | Description | Windows | macOS | Linux |
|---|---|---|---|---|
| ecsm-static | Static ECSM library | .lib |
.a |
.a |
| ecsm-shared | Dynamic ECSM library | .dll |
.dylib |
.so |
git clone --recursive https://github.com/cfnptr/ecsm
- Windows:
./scripts/build-release.bat - macOS / Ubuntu:
./scripts/build-release.sh
- robin-map (MIT license)