#ifndef DOUWCO_HIVEMIND_ENGINE_HPP #define DOUWCO_HIVEMIND_ENGINE_HPP #include #include #include #include #include "Constants.hpp" #include "Creeps/Creep.hpp" #include "Creeps/Harvester.hpp" #include "Structures/Structure.hpp" #include "Structures/Spawn.hpp" namespace DouwcoHivemind { class Creep; class Structure; class Engine { private: std::vector> creeps; std::vector> structures; public: Engine() { ReadOutCreeps(); ReadOutStructures(); } ~Engine() {} void loop() { for (auto &creep : creeps) creep->loop(); for (auto &structure : structures) structure->loop(); } private: void ReadOutCreeps() { auto src_creeps = Screeps::Game.creeps(); for (auto &creep : src_creeps) { Roles role = creep.second.memory()["role"]; switch (role) { case Roles::HARVESTER: creeps.push_back(std::make_unique(creep.second)); break; case Roles::UNEMPLOYED: default: EM_ASM({console.log('Undefined role for creep' + $0)}, creep.first.c_str()); break; } } } void ReadOutStructures() { auto spawns = Screeps::Game.spawns(); for (auto &spawn : spawns) { structures.push_back(std::make_unique(spawn.second)); } } }; } #endif // DOUWCO_HIVEMIND_ENGINE_HPP