mirror of
https://github.com/vcmi/vcmi.git
synced 2025-03-27 21:49:10 +02:00
Check coastal tile OTF
This commit is contained in:
parent
a3c3f935b9
commit
6552acdff6
@ -736,7 +736,7 @@ BattleInfo * CGameState::setupBattle(int3 tile, const CArmedInstance *armies[2],
|
||||
{
|
||||
const TerrainTile &t = map->getTile(tile);
|
||||
ETerrainType terrain = t.terType;
|
||||
if(t.isCoastal() && !t.isWater())
|
||||
if(map->isCoastalTile(tile)) //coastal tile is always ground
|
||||
terrain = ETerrainType::SAND;
|
||||
|
||||
BFieldType terType = battleGetBattlefieldType(tile);
|
||||
@ -1955,7 +1955,7 @@ BFieldType CGameState::battleGetBattlefieldType(int3 tile)
|
||||
}
|
||||
}
|
||||
|
||||
if(!t.isWater() && t.isCoastal())
|
||||
if(map->isCoastalTile(tile)) //coastal tile is always ground
|
||||
return BFieldType::SAND_SHORE;
|
||||
|
||||
switch(t.terType)
|
||||
|
@ -275,7 +275,7 @@ bool CPathfinder::isLayerTransitionPossible(const ELayer destLayer) const
|
||||
break;
|
||||
|
||||
case ELayer::SAIL:
|
||||
if(destLayer == ELayer::LAND && dt->isCoastal())
|
||||
if(destLayer == ELayer::LAND && gs->map->isCoastalTile(dp->coord))
|
||||
return true;
|
||||
|
||||
break;
|
||||
|
@ -141,11 +141,6 @@ CGObjectInstance * TerrainTile::topVisitableObj(bool excludeTop) const
|
||||
return visitableObjects.back();
|
||||
}
|
||||
|
||||
bool TerrainTile::isCoastal() const
|
||||
{
|
||||
return extTileFlags & 64;
|
||||
}
|
||||
|
||||
EDiggingStatus TerrainTile::getDiggingStatus(const bool excludeTop) const
|
||||
{
|
||||
if(terType == ETerrainType::WATER || terType == ETerrainType::ROCK)
|
||||
@ -322,6 +317,35 @@ CGHeroInstance * CMap::getHero(int heroID)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool CMap::isCoastalTile(const int3 & pos) const
|
||||
{
|
||||
//todo: refactoring: extract neighbor tile iterator and use it in GameState
|
||||
static const int3 dirs[] = { int3(0,1,0),int3(0,-1,0),int3(-1,0,0),int3(+1,0,0),
|
||||
int3(1,1,0),int3(-1,1,0),int3(1,-1,0),int3(-1,-1,0) };
|
||||
|
||||
if(!isInTheMap(pos))
|
||||
{
|
||||
logGlobal->errorStream() << "Coastal check outside of map :"<<pos;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(isWaterTile(pos))
|
||||
return false;
|
||||
|
||||
for (auto & dir : dirs)
|
||||
{
|
||||
const int3 hlp = pos + dir;
|
||||
|
||||
if(!isInTheMap(hlp))
|
||||
continue;
|
||||
const TerrainTile &hlpt = getTile(hlp);
|
||||
if(hlpt.isWater())
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CMap::isInTheMap(const int3 & pos) const
|
||||
{
|
||||
if(pos.x < 0 || pos.y < 0 || pos.z < 0 || pos.x >= width || pos.y >= height
|
||||
@ -349,7 +373,7 @@ const TerrainTile & CMap::getTile(const int3 & tile) const
|
||||
|
||||
bool CMap::isWaterTile(const int3 &pos) const
|
||||
{
|
||||
return isInTheMap(pos) && getTile(pos).terType == ETerrainType::WATER;
|
||||
return isInTheMap(pos) && getTile(pos).isWater();
|
||||
}
|
||||
|
||||
bool CMap::checkForVisitableDir(const int3 & src, const TerrainTile *pom, const int3 & dst ) const
|
||||
|
@ -277,8 +277,10 @@ public:
|
||||
CMapEditManager * getEditManager();
|
||||
TerrainTile & getTile(const int3 & tile);
|
||||
const TerrainTile & getTile(const int3 & tile) const;
|
||||
bool isCoastalTile(const int3 & pos) const;
|
||||
bool isInTheMap(const int3 & pos) const;
|
||||
bool isWaterTile(const int3 & pos) const;
|
||||
|
||||
bool checkForVisitableDir( const int3 & src, const TerrainTile *pom, const int3 & dst ) const;
|
||||
int3 guardingCreaturePosition (int3 pos) const;
|
||||
|
||||
|
@ -70,7 +70,6 @@ struct DLL_LINKAGE TerrainTile
|
||||
Obj topVisitableId(bool excludeTop = false) const;
|
||||
CGObjectInstance * topVisitableObj(bool excludeTop = false) const;
|
||||
bool isWater() const;
|
||||
bool isCoastal() const;
|
||||
EDiggingStatus getDiggingStatus(const bool excludeTop = true) const;
|
||||
bool hasFavourableWinds() const;
|
||||
|
||||
|
@ -478,7 +478,6 @@ void CDrawTerrainOperation::execute()
|
||||
|
||||
updateTerrainTypes();
|
||||
updateTerrainViews();
|
||||
//TODO add coastal bit to extTileFlags appropriately
|
||||
}
|
||||
|
||||
void CDrawTerrainOperation::undo()
|
||||
|
Loading…
x
Reference in New Issue
Block a user