mirror of
https://github.com/vcmi/vcmi.git
synced 2025-01-12 02:28:11 +02:00
Merge pull request #4019 from IvanSavenko/simturn_tweaks
[1.5.2] Simturn tweaks
This commit is contained in:
commit
c85ea98519
@ -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;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user