mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	Check coastal tile OTF
This commit is contained in:
		| @@ -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() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user