1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-03-27 21:49:10 +02:00

Bug 0001789 correction (incorrect battle field detection)

This commit is contained in:
Macron1Robot 2014-05-18 03:09:42 +04:00
parent ccc5c69fa2
commit e4cbfe7f0b

View File

@ -759,9 +759,9 @@ CGameState::~CGameState()
BattleInfo * CGameState::setupBattle(int3 tile, const CArmedInstance *armies[2], const CGHeroInstance * heroes[2], bool creatureBank, const CGTownInstance *town) BattleInfo * CGameState::setupBattle(int3 tile, const CArmedInstance *armies[2], const CGHeroInstance * heroes[2], bool creatureBank, const CGTownInstance *town)
{ {
const TerrainTile &t = map->getTile(tile); const TerrainTile &t = map->getTile(tile);
ETerrainType terrain = t.terType; ETerrainType terrain = t.terType;
if(t.isCoastal() && !t.isWater()) if(t.isCoastal() && !t.isWater())
terrain = ETerrainType::SAND; terrain = ETerrainType::SAND;
BFieldType terType = battleGetBattlefieldType(tile); BFieldType terType = battleGetBattlefieldType(tile);
return BattleInfo::setupBattle(tile, terrain, terType, armies, heroes, creatureBank, town); return BattleInfo::setupBattle(tile, terrain, terType, armies, heroes, creatureBank, town);
@ -1953,8 +1953,7 @@ BFieldType CGameState::battleGetBattlefieldType(int3 tile)
for(auto &obj : map->objects) for(auto &obj : map->objects)
{ {
//look only for objects covering given tile //look only for objects covering given tile
if( !obj || obj->pos.z != tile.z if( !obj || obj->pos.z != tile.z || !obj->coveringAt(tile.x, tile.y))
|| !obj->coveringAt(tile.x - obj->pos.x, tile.y - obj->pos.y))
continue; continue;
switch(obj->ID) switch(obj->ID)
@ -1985,27 +1984,27 @@ BFieldType CGameState::battleGetBattlefieldType(int3 tile)
if(!t.isWater() && t.isCoastal()) if(!t.isWater() && t.isCoastal())
return BFieldType::SAND_SHORE; return BFieldType::SAND_SHORE;
switch(t.terType) switch(t.terType)
{ {
case ETerrainType::DIRT: case ETerrainType::DIRT:
return BFieldType(rand.nextInt(3, 5)); return BFieldType(rand.nextInt(3, 5));
case ETerrainType::SAND: case ETerrainType::SAND:
return BFieldType::SAND_MESAS; //TODO: coast support return BFieldType::SAND_MESAS; //TODO: coast support
case ETerrainType::GRASS: case ETerrainType::GRASS:
return BFieldType(rand.nextInt(6, 7)); return BFieldType(rand.nextInt(6, 7));
case ETerrainType::SNOW: case ETerrainType::SNOW:
return BFieldType(rand.nextInt(10, 11)); return BFieldType(rand.nextInt(10, 11));
case ETerrainType::SWAMP: case ETerrainType::SWAMP:
return BFieldType::SWAMP_TREES; return BFieldType::SWAMP_TREES;
case ETerrainType::ROUGH: case ETerrainType::ROUGH:
return BFieldType::ROUGH; return BFieldType::ROUGH;
case ETerrainType::SUBTERRANEAN: case ETerrainType::SUBTERRANEAN:
return BFieldType::SUBTERRANEAN; return BFieldType::SUBTERRANEAN;
case ETerrainType::LAVA: case ETerrainType::LAVA:
return BFieldType::LAVA; return BFieldType::LAVA;
case ETerrainType::WATER: case ETerrainType::WATER:
return BFieldType::SHIP; return BFieldType::SHIP;
case ETerrainType::ROCK: case ETerrainType::ROCK:
return BFieldType::ROCKLANDS; return BFieldType::ROCKLANDS;
default: default:
return BFieldType::NONE; return BFieldType::NONE;