2018-12-28 23:45:48 +07:00
2018-12-24 21:19:45 +07:00
2018-12-24 08:26:08 +07:00
2018-12-24 21:19:45 +07:00
2018-12-24 08:26:08 +07:00
2018-12-24 12:45:56 +07:00
2018-12-24 08:26:08 +07:00
2018-12-24 08:26:08 +07:00
2018-12-28 23:45:48 +07:00
2018-12-28 23:45:48 +07:00
2018-12-24 08:26:08 +07:00
2018-12-28 11:52:23 +07:00

ecs.hpp

travis appveyor codecov language license paypal

Installation

ecs.hpp is a single header library. All you need to do is copy the header file into your project and include this file:

#include "ecs.hpp"

Basic usage

struct position_component {
    float x{0};
    float y{0};
    position_component(float nx, float ny)
    : x(nx), y(ny) {}
};

struct velocity_component {
    float dx{0};
    float dy{0};
    velocity_component(float ndx, float ndy)
    : dx(ndx), dy(ndy) {}
};

class movement_system : public ecs_hpp::system {
public:
    void process(ecs_hpp::registry& owner) override {
        owner.for_joined_components<
            position_component,
            velocity_component
        >([](const ecs_hpp::entity& e, position_component& p, const velocity_component& v) {
            p.x += v.dx;
            p.y += v.dy;
        });
    }
};

class gravity_system : public ecs_hpp::system {
public:
    gravity_system(float gravity)
    : gravity_(gravity) {}

    void process(ecs_hpp::registry& owner) override {
        owner.for_each_component<
            velocity_component
        >([this](const ecs_hpp::entity& e, velocity_component& v) {
            v.dx += gravity_;
            v.dy += gravity_;
        });
    }
private:
    float gravity_;
};

ecs_hpp::registry world;
world.add_system<movement_system>();
world.add_system<gravity_system>(9.8f);

auto entity_one = world.create_entity();
world.assign_component<position_component>(entity_one, 4.f, 2.f);
world.assign_component<velocity_component>(entity_one, 10.f, 20.f);

auto entity_two = world.create_entity();
entity_two.assign_component<position_component>(4.f, 2.f);
entity_two.assign_component<velocity_component>(10.f, 20.f);

world.process_systems();

API

coming soon!

License (MIT)

Description
Languages
C++ 96.4%
CMake 3.6%