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

Fixed bug with Subterranean Gates:

Failed to connect (-1,-1,-1) with center of teh zone.
This commit is contained in:
DjWarmonger 2016-07-10 10:11:29 +02:00
parent cfacd1adc3
commit a66893af28
2 changed files with 12 additions and 6 deletions

View File

@ -518,6 +518,8 @@ void CMapGenerator::createConnections()
int3 tile = posA;
int3 otherTile = tile;
auto sgt = VLC->objtypeh->getHandlerFor(Obj::SUBTERRANEAN_GATE, 0)->getTemplates().front();
bool stop = false;
while (!stop)
{
@ -551,11 +553,15 @@ void CMapGenerator::createConnections()
withinZone = false;
});
if (withinZone)
//make sure both gates has some free tiles below them
if (zoneA->getAccessibleOffset(this, sgt, tile).valid() && zoneB->getAccessibleOffset(this, sgt, otherTile).valid())
{
zoneA->placeSubterraneanGate(this, tile, connection.getGuardStrength());
zoneB->placeSubterraneanGate(this, otherTile, connection.getGuardStrength());
stop = true; //we are done, go to next connection
if (withinZone)
{
zoneA->placeSubterraneanGate(this, tile, connection.getGuardStrength());
zoneB->placeSubterraneanGate(this, otherTile, connection.getGuardStrength());
stop = true; //we are done, go to next connection
}
}
}
}

View File

@ -147,6 +147,8 @@ public:
void setCenter(const float3 &f);
int3 getPos() const;
void setPos(const int3 &pos);
bool isAccessibleFromAnywhere(CMapGenerator* gen, ObjectTemplate &appearance, int3 &tile) const;
int3 getAccessibleOffset(CMapGenerator* gen, ObjectTemplate &appearance, int3 &tile) const;
void addTile (const int3 &pos);
void initFreeTiles (CMapGenerator* gen);
@ -239,8 +241,6 @@ private:
bool pointIsIn(int x, int y);
void addAllPossibleObjects (CMapGenerator* gen); //add objects, including zone-specific, to possibleObjects
bool isAccessibleFromAnywhere (CMapGenerator* gen, ObjectTemplate &appearance, int3 &tile) const;
int3 getAccessibleOffset(CMapGenerator* gen, ObjectTemplate &appearance, int3 &tile) const;
bool findPlaceForObject(CMapGenerator* gen, CGObjectInstance* obj, si32 min_dist, int3 &pos);
bool findPlaceForTreasurePile(CMapGenerator* gen, float min_dist, int3 &pos, int value);
bool canObstacleBePlacedHere(CMapGenerator* gen, ObjectTemplate &temp, int3 &pos);