From 4a335fff80c6325a5d07fbd4fb1cc7e4caf985e5 Mon Sep 17 00:00:00 2001 From: Daniel Stevens Date: Fri, 5 May 2023 19:10:07 -0600 Subject: [PATCH] Move `writeRobots` from `MapViewState` to `RobotPool` --- appOPHD/RobotPool.cpp | 36 +++++++++++++++++++++++++++++++ appOPHD/RobotPool.h | 10 +++++++++ appOPHD/States/MapViewStateIO.cpp | 36 +------------------------------ 3 files changed, 47 insertions(+), 35 deletions(-) diff --git a/appOPHD/RobotPool.cpp b/appOPHD/RobotPool.cpp index 28c38c618..ba160aad6 100644 --- a/appOPHD/RobotPool.cpp +++ b/appOPHD/RobotPool.cpp @@ -6,6 +6,8 @@ #include "MapObjects/Structures/RobotCommand.h" #include +#include +#include #include #include @@ -72,6 +74,26 @@ namespace } return controlCounter; } + + + NAS2D::Dictionary robotToDictionary(RobotPool::RobotTileTable& robotTileTable, Robot& robot) + { + NAS2D::Dictionary dictionary = robot.getDataDict(); + + const auto it = robotTileTable.find(&robot); + if (it != robotTileTable.end()) + { + const auto& tile = *it->second; + const auto position = tile.xy(); + dictionary += NAS2D::Dictionary{{ + {"x", position.x}, + {"y", position.y}, + {"depth", tile.depth()}, + }}; + } + + return dictionary; + } } @@ -253,3 +275,17 @@ void RobotPool::insertRobotIntoTable(RobotTileTable& robotMap, Robot& robot, Til ++mRobotControlCount; } + + +NAS2D::Xml::XmlElement* RobotPool::writeRobots(RobotTileTable& robotMap) +{ + auto* robots = new NAS2D::Xml::XmlElement("robots"); + + for (auto robot : mRobots) + { + auto dictionary = robotToDictionary(robotMap, *robot); + robots->linkEndChild(NAS2D::dictionaryToAttributes("robot", dictionary)); + } + + return robots; +} diff --git a/appOPHD/RobotPool.h b/appOPHD/RobotPool.h index ce5656555..fc7df58be 100644 --- a/appOPHD/RobotPool.h +++ b/appOPHD/RobotPool.h @@ -11,6 +11,14 @@ class Tile; using RobotList = std::vector; +namespace NAS2D +{ + namespace Xml + { + class XmlElement; + } +} + class RobotPool { @@ -54,6 +62,8 @@ class RobotPool const RobotList& robots() const { return mRobots; } + NAS2D::Xml::XmlElement* writeRobots(RobotTileTable& robotMap); + private: DiggerList mDiggers; DozerList mDozers; diff --git a/appOPHD/States/MapViewStateIO.cpp b/appOPHD/States/MapViewStateIO.cpp index 8b2657c21..d6c5bdcdf 100644 --- a/appOPHD/States/MapViewStateIO.cpp +++ b/appOPHD/States/MapViewStateIO.cpp @@ -79,40 +79,6 @@ namespace } - NAS2D::Dictionary robotToDictionary(RobotTileTable& robotTileTable, Robot& robot) - { - NAS2D::Dictionary dictionary = robot.getDataDict(); - - const auto it = robotTileTable.find(&robot); - if (it != robotTileTable.end()) - { - const auto& tile = *it->second; - const auto position = tile.xy(); - dictionary += NAS2D::Dictionary{{ - {"x", position.x}, - {"y", position.y}, - {"depth", tile.depth()}, - }}; - } - - return dictionary; - } - - - NAS2D::Xml::XmlElement* writeRobots(RobotPool& robotPool, RobotTileTable& robotMap) - { - auto* robots = new NAS2D::Xml::XmlElement("robots"); - - for (auto robot : robotPool.robots()) - { - auto dictionary = robotToDictionary(robotMap, *robot); - robots->linkEndChild(NAS2D::dictionaryToAttributes("robot", dictionary)); - } - - return robots; - } - - NAS2D::Xml::XmlElement* writeResearch(const ResearchTracker& tracker) { auto* research = new NAS2D::Xml::XmlElement("research"); @@ -189,7 +155,7 @@ void MapViewState::save(const std::string& filePath) mTileMap->serialize(root); mMapView->serialize(root); root->linkEndChild(NAS2D::Utility::get().serialize()); - root->linkEndChild(writeRobots(mRobotPool, mRobotList)); + root->linkEndChild(mRobotPool.writeRobots(mRobotList)); root->linkEndChild(writeResources(mResourceBreakdownPanel.previousResources(), "prev_resources")); root->linkEndChild(writeResearch(mResearchTracker)); root->linkEndChild(NAS2D::dictionaryToAttributes("turns", {{{"count", mTurnCount}}}));