mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	Merge pull request #4019 from IvanSavenko/simturn_tweaks
[1.5.2] Simturn tweaks
This commit is contained in:
		| @@ -32,11 +32,14 @@ struct DLL_LINKAGE SimturnsInfo | |||||||
| 	int optionalTurns = 0; | 	int optionalTurns = 0; | ||||||
| 	/// If set to true, human and 1 AI can act at the same time | 	/// If set to true, human and 1 AI can act at the same time | ||||||
| 	bool allowHumanWithAI = false; | 	bool allowHumanWithAI = false; | ||||||
|  | 	/// If set to true, allied players can play simultaneously even after contacting each other | ||||||
|  | 	bool ignoreAlliedContacts = true; | ||||||
|  |  | ||||||
| 	bool operator == (const SimturnsInfo & other) const | 	bool operator == (const SimturnsInfo & other) const | ||||||
| 	{ | 	{ | ||||||
| 		return requiredTurns == other.requiredTurns && | 		return requiredTurns == other.requiredTurns && | ||||||
| 				optionalTurns == other.optionalTurns && | 				optionalTurns == other.optionalTurns && | ||||||
|  | 				ignoreAlliedContacts == other.ignoreAlliedContacts && | ||||||
| 				allowHumanWithAI == other.allowHumanWithAI; | 				allowHumanWithAI == other.allowHumanWithAI; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -46,6 +49,10 @@ struct DLL_LINKAGE SimturnsInfo | |||||||
| 		h & requiredTurns; | 		h & requiredTurns; | ||||||
| 		h & optionalTurns; | 		h & optionalTurns; | ||||||
| 		h & allowHumanWithAI; | 		h & allowHumanWithAI; | ||||||
|  |  | ||||||
|  | 		static_assert(Handler::Version::RELEASE_143 < Handler::Version::CURRENT, "Please add ignoreAlliedContacts to serialization for 1.6"); | ||||||
|  | 		// disabled to allow multiplayer compatibility between 1.5.2 and 1.5.1 | ||||||
|  | 		// h & ignoreAlliedContacts | ||||||
| 	} | 	} | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -17,6 +17,9 @@ | |||||||
| #include "../CVCMIServer.h" | #include "../CVCMIServer.h" | ||||||
|  |  | ||||||
| #include "../../lib/CPlayerState.h" | #include "../../lib/CPlayerState.h" | ||||||
|  | #include "../../lib/mapping/CMap.h" | ||||||
|  | #include "../../lib/mapObjects/CGObjectInstance.h" | ||||||
|  | #include "../../lib/gameState/CGameState.h" | ||||||
| #include "../../lib/pathfinder/CPathfinder.h" | #include "../../lib/pathfinder/CPathfinder.h" | ||||||
| #include "../../lib/pathfinder/PathfinderOptions.h" | #include "../../lib/pathfinder/PathfinderOptions.h" | ||||||
|  |  | ||||||
| @@ -102,6 +105,18 @@ bool TurnOrderProcessor::playersInContact(PlayerColor left, PlayerColor right) c | |||||||
| 	const auto * leftInfo = gameHandler->getPlayerState(left, false); | 	const auto * leftInfo = gameHandler->getPlayerState(left, false); | ||||||
| 	const auto * rightInfo = gameHandler->getPlayerState(right, false); | 	const auto * rightInfo = gameHandler->getPlayerState(right, false); | ||||||
|  |  | ||||||
|  | 	for (auto obj : gameHandler->gameState()->map->objects) | ||||||
|  | 	{ | ||||||
|  | 		if (obj && obj->isVisitable()) | ||||||
|  | 		{ | ||||||
|  | 			int3 pos = obj->visitablePos(); | ||||||
|  | 			if (obj->tempOwner == left) | ||||||
|  | 				leftReachability[pos.z][pos.x][pos.y] = true; | ||||||
|  | 			if (obj->tempOwner == right) | ||||||
|  | 				rightReachability[pos.z][pos.x][pos.y] = true; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	for(const auto & hero : leftInfo->heroes) | 	for(const auto & hero : leftInfo->heroes) | ||||||
| 	{ | 	{ | ||||||
| 		CPathsInfo out(mapSize, hero); | 		CPathsInfo out(mapSize, hero); | ||||||
| @@ -174,6 +189,9 @@ bool TurnOrderProcessor::computeCanActSimultaneously(PlayerColor active, PlayerC | |||||||
| 	if (gameHandler->getDate(Date::DAY) > simturnsTurnsMaxLimit()) | 	if (gameHandler->getDate(Date::DAY) > simturnsTurnsMaxLimit()) | ||||||
| 		return false; | 		return false; | ||||||
|  |  | ||||||
|  | 	if (gameHandler->getStartInfo()->simturnsInfo.ignoreAlliedContacts && activeInfo->team == waitingInfo->team) | ||||||
|  | 		return true; | ||||||
|  |  | ||||||
| 	if (playersInContact(active, waiting)) | 	if (playersInContact(active, waiting)) | ||||||
| 		return false; | 		return false; | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user