diff --git a/lib/campaign/CampaignState.cpp b/lib/campaign/CampaignState.cpp index 4e953a7fe..132d6e904 100644 --- a/lib/campaign/CampaignState.cpp +++ b/lib/campaign/CampaignState.cpp @@ -37,18 +37,11 @@ CampaignRegions::RegionDescription CampaignRegions::RegionDescription::fromJson( { CampaignRegions::RegionDescription rd; rd.infix = node["infix"].String(); - rd.xpos = static_cast(node["x"].Float()); - rd.ypos = static_cast(node["y"].Float()); + rd.pos = Point(static_cast(node["x"].Float()), static_cast(node["y"].Float())); if(!node["labelPos"].isNull()) - { - rd.xLabelpos = static_cast(node["labelPos"]["x"].Float()); - rd.yLabelpos = static_cast(node["labelPos"]["y"].Float()); - } + rd.labelPos = Point(static_cast(node["labelPos"]["x"].Float()), static_cast(node["labelPos"]["y"].Float())); else - { - rd.xLabelpos = std::nullopt; - rd.yLabelpos = std::nullopt; - } + rd.labelPos = std::nullopt; return rd; } @@ -90,16 +83,13 @@ ImagePath CampaignRegions::getBackgroundName() const Point CampaignRegions::getPosition(CampaignScenarioID which) const { auto const & region = regions[which.getNum()]; - return Point(region.xpos, region.ypos); + return region.pos; } std::optional CampaignRegions::getLabelPosition(CampaignScenarioID which) const { auto const & region = regions[which.getNum()]; - if(region.xLabelpos && region.yLabelpos) - return Point(*region.xLabelpos, *region.yLabelpos); - else - return std::nullopt; + return region.labelPos; } ImagePath CampaignRegions::getNameFor(CampaignScenarioID which, int colorIndex, std::string type) const diff --git a/lib/campaign/CampaignState.h b/lib/campaign/CampaignState.h index d6d25a9fa..c4103c128 100644 --- a/lib/campaign/CampaignState.h +++ b/lib/campaign/CampaignState.h @@ -16,6 +16,7 @@ #include "CampaignConstants.h" #include "CampaignScenarioPrologEpilog.h" #include "../gameState/HighScore.h" +#include "../Point.h" VCMI_LIB_NAMESPACE_BEGIN @@ -27,7 +28,6 @@ class CMap; class CMapHeader; class CMapInfo; class JsonNode; -class Point; class IGameCallback; class DLL_LINKAGE CampaignRegions @@ -40,20 +40,21 @@ class DLL_LINKAGE CampaignRegions struct DLL_LINKAGE RegionDescription { std::string infix; - int xpos; - int ypos; - std::optional xLabelpos; - std::optional yLabelpos; + Point pos; + std::optional labelPos; template void serialize(Handler &h) { h & infix; - h & xpos; - h & ypos; if (h.version >= Handler::Version::REGION_LABEL) { - h & xLabelpos; - h & yLabelpos; + h & pos; + h & labelPos; + } + else + { + h & pos.x; + h & pos.y; } }