mirror of
https://github.com/vcmi/vcmi.git
synced 2025-11-27 22:49:25 +02:00
boat offsets for shipyards are counted from visitable position
This commit is contained in:
@@ -953,11 +953,15 @@ BoatId CGHeroInstance::getBoatType() const
|
|||||||
|
|
||||||
void CGHeroInstance::getOutOffsets(std::vector<int3> &offsets) const
|
void CGHeroInstance::getOutOffsets(std::vector<int3> &offsets) const
|
||||||
{
|
{
|
||||||
// FIXME: Offsets need to be fixed once we get rid of convertPosition
|
offsets = {
|
||||||
// Check issue 515 for details
|
{0, -1, 0},
|
||||||
offsets =
|
{+1, -1, 0},
|
||||||
{
|
{+1, 0, 0},
|
||||||
int3(-1,1,0), int3(-1,-1,0), int3(-2,0,0), int3(0,0,0), int3(0,1,0), int3(-2,1,0), int3(0,-1,0), int3(-2,-1,0)
|
{+1, +1, 0},
|
||||||
|
{0, +1, 0},
|
||||||
|
{-1, +1, 0},
|
||||||
|
{-1, 0, 0},
|
||||||
|
{-1, -1, 0},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -585,7 +585,7 @@ bool CGTownInstance::passableFor(PlayerColor color) const
|
|||||||
|
|
||||||
void CGTownInstance::getOutOffsets( std::vector<int3> &offsets ) const
|
void CGTownInstance::getOutOffsets( std::vector<int3> &offsets ) const
|
||||||
{
|
{
|
||||||
offsets = {int3(-1,2,0), int3(-3,2,0)};
|
offsets = {int3(-1,2,0), int3(+1,2,0)};
|
||||||
}
|
}
|
||||||
|
|
||||||
CGTownInstance::EGeneratorState CGTownInstance::shipyardStatus() const
|
CGTownInstance::EGeneratorState CGTownInstance::shipyardStatus() const
|
||||||
|
|||||||
@@ -92,7 +92,9 @@ int3 IBoatGenerator::bestLocation() const
|
|||||||
|
|
||||||
for (auto & offset : offsets)
|
for (auto & offset : offsets)
|
||||||
{
|
{
|
||||||
if(const TerrainTile *tile = getObject()->cb->getTile(getObject()->getPosition() + offset, false)) //tile is in the map
|
const TerrainTile *tile = getObject()->cb->getTile(getObject()->visitablePos() + offset, false);
|
||||||
|
|
||||||
|
if(tile) //tile is in the map
|
||||||
{
|
{
|
||||||
if(tile->terType->isWater() && (!tile->blocked || tile->blockingObjects.front()->ID == Obj::BOAT)) //and is water and is not blocked or is blocked by boat
|
if(tile->terType->isWater() && (!tile->blocked || tile->blockingObjects.front()->ID == Obj::BOAT)) //and is water and is not blocked or is blocked by boat
|
||||||
return getObject()->getPosition() + offset;
|
return getObject()->getPosition() + offset;
|
||||||
|
|||||||
@@ -1355,9 +1355,18 @@ void CGShipyard::getOutOffsets( std::vector<int3> &offsets ) const
|
|||||||
// A x S x B
|
// A x S x B
|
||||||
// C E G F D
|
// C E G F D
|
||||||
offsets = {
|
offsets = {
|
||||||
int3(-3,0,0), int3(1,0,0), //AB
|
{-2, 0, 0}, // A
|
||||||
int3(-3,1,0), int3(1,1,0), int3(-2,1,0), int3(0,1,0), int3(-1,1,0), //CDEFG
|
{+2, 0, 0}, // B
|
||||||
int3(-3,-1,0), int3(1,-1,0), int3(-2,-1,0), int3(0,-1,0), int3(-1,-1,0) //HIJKL
|
{-2, 1, 0}, // C
|
||||||
|
{+2, 1, 0}, // D
|
||||||
|
{-1, 1, 0}, // E
|
||||||
|
{+1, 1, 0}, // F
|
||||||
|
{0, 1, 0}, // G
|
||||||
|
{-2, -1, 0}, // H
|
||||||
|
{+2, -1, 0}, // I
|
||||||
|
{-1, -1, 0}, // G
|
||||||
|
{+1, -1, 0}, // K
|
||||||
|
{0, -1, 0}, // L
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user