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()
{
ECSM_SUBSCRIBE_TO_EVENT("Update", PhysicsSystem::update);
}
~PhysicsSystem() final
{
if (Manager::get()->isRunning)
ECSM_UNSUBSCRIBE_FROM_EVENT("Update", PhysicsSystem::update);
}
void copyComponent(View<Component> source, View<Component> destination) final
{
const auto sourceView = View<RigidBodyComponent>(source);
auto destinationView = View<RigidBodyComponent>(destination);
destinationView->size = sourceView->size;
}
void update()
{
// Process components...
}
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 https://github.com/cfnptr/ecsm
- Windows:
./scripts/build-release.bat
- macOS / Ubuntu:
./scripts/build-release.sh