Skip to content

cfnptr/ecsm

Repository files navigation

ECSM

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

Features

  • Straightforward template architecture
  • Acceptable compilation time
  • Custom event creation support
  • Custom system groups creation
  • Cache friendly linear pools
  • Fast component iteration
  • Fast entity component access
  • Smart pool item views (zero-cost)
  • Deferred components destruction
  • Singleton class pattern

Usage example

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;
}

Supported operating systems

  • Windows (10/11)
  • Ubuntu (22.04/24.04)
  • macOS (15/26)

This list includes only those systems on which functionality testing is conducted. However, you can also compile it under any other Linux distribution or operating system.

Build requirements

Use building instructions to install all required tools and libraries.

CMake options

Name Description Default value
ECSM_BUILD_SHARED Build ECSM shared library ON
ECSM_BUILD_TESTS Build ECSM library tests ON

CMake targets

Name Description Windows macOS Linux
ecsm-static Static ECSM library .lib .a .a
ecsm-shared Dynamic ECSM library .dll .dylib .so

Cloning

git clone --recursive https://github.com/cfnptr/ecsm

Building CI

  • Windows: ./scripts/build-release.bat
  • macOS / Ubuntu: ./scripts/build-release.sh

Third-party

Special thanks to Sahak Grigoryan.

About

Easy to use and fast Entity Component System Manager (ECS) C++ library.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published