#include #include #include #include #include struct Position { double x, y; }; struct Velocity { double x, y; }; int main() { flecs::world ecs; flecs::system fight = ecs.system() .each([&](flecs::entity e, const Position &other) { flecs::entity player = ecs.lookup("player"); if(e == player) return; // don't process the player const Position *player_p = player.get(); if(player_p->x == other.x && player_p->y == other.y) { std::cerr << "HIT\n"; } }); // Create a system for Position, Velocity. Systems are like queries (see // queries) with a function that can be ran or scheduled (see pipeline). flecs::system move = ecs.system() .each([&](flecs::entity e, Position& p, const Velocity& v) { p.x += v.x; p.y += v.y; std::cerr << e.name() << ": {" << p.x << ", " << p.y << "}\n"; }); // Create a few test entities for a Position, Velocity query ecs.entity("player") .set({10, 10}) .set({1, 1}); ecs.entity("e2") .set({10, 20}) .set({1, 1}); // This entity will not match as it does not have Position, Velocity ecs.entity("e3") .set({10, 20}); std::unordered_map type_names; type_names[std::type_index(typeid(Position))] = "Position"; type_names[std::type_index(typeid(Velocity))] = "Velocity"; for(const auto& [key, value] : type_names) { std::cout << " VAL " << value << std::endl; } // Run the system move.run(); fight.run(); }