#include "Game.hpp" #include "ConstructionSite.hpp" #include "Creep.hpp" #include "Room.hpp" #include "StructureSpawn.hpp" namespace Screeps { GameObject Game; GameObject::GameObject() = default; template typename std::enable_if_t::value, std::map> convertObjectToMap(const JS::Value& object) { std::map map; for (const auto& pair : JS::jsObjectToMap(object)) map.insert(std::make_pair(pair.first, T{pair.second})); return map; } template typename std::enable_if_t::value, std::map> convertObjectToMap(const JS::Value& object) { std::map map; for (const auto& pair : JS::jsObjectToMap(object)) map.emplace(pair.first, pair.second.as()); return map; } std::map GameObject::constructionSites() const { return convertObjectToMap(value()["constructionSites"]); } JSON GameObject::cpu() const { return JS::toJSON(value()["cpu"]); } std::map GameObject::creeps() const { return convertObjectToMap(value()["creeps"]); } GameObject::GCL GameObject::gcl() const { GCL gcl; auto obj = value()["gcl"]; gcl.level = obj["level"].as(); gcl.progress = obj["progress"].as(); gcl.progressTotal = obj["progressTotal"].as(); return gcl; } GameObject::GPL GameObject::gpl() const { GPL gpl; auto obj = value()["gpl"]; gpl.level = obj["level"].as(); gpl.progress = obj["progress"].as(); gpl.progressTotal = obj["progressTotal"].as(); return gpl; } std::map GameObject::resources() const { return convertObjectToMap(value()["resources"]); } std::map GameObject::rooms() const { return convertObjectToMap(value()["rooms"]); } GameObject::Shard GameObject::shard() const { Shard shard; auto obj = value()["shard"]; shard.name = obj["name"].as(); shard.type = obj["type"].as(); shard.ptr = obj["ptr"].as(); return shard; } std::map GameObject::spawns() const { return convertObjectToMap(value()["spawns"]); } std::map GameObject::structures() const { return convertObjectToMap(value()["structures"]); } int GameObject::time() const { return value()["time"].as(); } double GameObject::cpuGetUsed() { return value()["cpu"].call("getUsed"); } int GameObject::cpuGeneratePixel() { return value()["cpu"].call("generatePixel"); } std::unique_ptr GameObject::getObjectById(const std::string& id) { auto object = value().call("getObjectById", id); if (object.isUndefined()) return nullptr; else return createRoomObject(std::move(object)); } } // namespace Screeps