1
0
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:
Dydzio
2024-03-24 23:58:04 +01:00
parent b319d16de6
commit 982e67cea8
3 changed files with 48 additions and 13 deletions

View File

@@ -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))