mirror of
https://github.com/vcmi/vcmi.git
synced 2025-12-03 23:19:22 +02:00
Working version of SoD dimension door spell
This commit is contained in:
@@ -500,7 +500,7 @@ std::vector<const CGHeroInstance *> CGameInfoCallback::getAvailableHeroes(const
|
||||
return ret;
|
||||
}
|
||||
|
||||
const TerrainTile * CGameInfoCallback::getTile( int3 tile, bool verbose) const
|
||||
const TerrainTile * CGameInfoCallback::getTile(int3 tile, bool verbose) const
|
||||
{
|
||||
if(isVisible(tile))
|
||||
return &gs->map->getTile(tile);
|
||||
@@ -510,6 +510,33 @@ const TerrainTile * CGameInfoCallback::getTile( int3 tile, bool verbose) const
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const TerrainTile * CGameInfoCallback::getTileForDimensionDoor(int3 tile, const CGHeroInstance * castingHero) const
|
||||
{
|
||||
auto outputTile = getTile(tile, false);
|
||||
|
||||
if(outputTile == nullptr)
|
||||
{
|
||||
if(castingHero->canCastThisSpell(static_cast<SpellID>(SpellID::DIMENSION_DOOR).toSpell())
|
||||
&& isInScreenRange(castingHero->pos, tile)) //TODO: check if > 0 casts left
|
||||
{
|
||||
//we are allowed to get basic blocked/water invisible nearby tile date when casting DD spell
|
||||
TerrainTile targetTile = gs->map->getTile(tile);
|
||||
auto obfuscatedTile = std::make_shared<TerrainTile>();
|
||||
obfuscatedTile->visitable = false;
|
||||
obfuscatedTile->blocked = targetTile.blocked || targetTile.visitable;
|
||||
obfuscatedTile->terType = (targetTile.blocked || targetTile.visitable)
|
||||
? VLC->terrainTypeHandler->getById(TerrainId::ROCK)
|
||||
: targetTile.isWater()
|
||||
? VLC->terrainTypeHandler->getById(TerrainId::WATER)
|
||||
: VLC->terrainTypeHandler->getById(TerrainId::GRASS);
|
||||
|
||||
outputTile = obfuscatedTile.get();
|
||||
}
|
||||
}
|
||||
|
||||
return outputTile;
|
||||
}
|
||||
|
||||
EDiggingStatus CGameInfoCallback::getTileDigStatus(int3 tile, bool verbose) const
|
||||
{
|
||||
if(!isVisible(tile))
|
||||
|
||||
Reference in New Issue
Block a user