1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-01-26 03:52:01 +02:00

Handle connections by unique id

This commit is contained in:
Tomasz Zieliński 2024-11-23 10:07:34 +01:00
parent a4417f3fc5
commit c8e3458dfb
2 changed files with 26 additions and 5 deletions

View File

@ -420,6 +420,7 @@ void ZoneOptions::serializeJson(JsonSerializeFormat & handler)
}
ZoneConnection::ZoneConnection():
id(-1),
zoneA(-1),
zoneB(-1),
guardStrength(0),
@ -429,6 +430,16 @@ ZoneConnection::ZoneConnection():
}
int ZoneConnection::getId() const
{
return id;
}
void ZoneConnection::setId(int id)
{
this->id = id;
}
TRmgTemplateZoneId ZoneConnection::getZoneA() const
{
return zoneA;
@ -472,7 +483,7 @@ rmg::ERoadOption ZoneConnection::getRoadOption() const
bool operator==(const ZoneConnection & l, const ZoneConnection & r)
{
return l.zoneA == r.zoneA && l.zoneB == r.zoneB && l.guardStrength == r.guardStrength;
return l.id == r.id;
}
void ZoneConnection::serializeJson(JsonSerializeFormat & handler)
@ -591,7 +602,7 @@ const CRmgTemplate::Zones & CRmgTemplate::getZones() const
const std::vector<ZoneConnection> & CRmgTemplate::getConnectedZoneIds() const
{
return connectedZoneIds;
return connections;
}
void CRmgTemplate::validate() const
@ -720,7 +731,14 @@ void CRmgTemplate::serializeJson(JsonSerializeFormat & handler)
{
auto connectionsData = handler.enterArray("connections");
connectionsData.serializeStruct(connectedZoneIds);
connectionsData.serializeStruct(connections);
if(!handler.saving)
{
for(size_t i = 0; i < connections.size(); ++i)
{
connections[i].setId(i);
}
}
}
{
@ -842,7 +860,7 @@ void CRmgTemplate::afterLoad()
}
}
for(const auto & connection : connectedZoneIds)
for(const auto & connection : connections)
{
auto id1 = connection.getZoneA();
auto id2 = connection.getZoneB();

View File

@ -96,6 +96,8 @@ public:
ZoneConnection();
int getId() const;
void setId(int id);
TRmgTemplateZoneId getZoneA() const;
TRmgTemplateZoneId getZoneB() const;
TRmgTemplateZoneId getOtherZoneId(TRmgTemplateZoneId id) const;
@ -107,6 +109,7 @@ public:
friend bool operator==(const ZoneConnection &, const ZoneConnection &);
private:
int id;
TRmgTemplateZoneId zoneA;
TRmgTemplateZoneId zoneB;
int guardStrength;
@ -293,7 +296,7 @@ private:
CPlayerCountRange players;
CPlayerCountRange humanPlayers;
Zones zones;
std::vector<rmg::ZoneConnection> connectedZoneIds;
std::vector<rmg::ZoneConnection> connections;
std::set<EWaterContent::EWaterContent> allowedWaterContent;
std::unique_ptr<JsonNode> mapSettings;