mirror of
https://github.com/vcmi/vcmi.git
synced 2025-04-15 11:46:56 +02:00
commit
2022d55d40
@ -30,8 +30,9 @@ void CEmptyAI::initGameInterface(std::shared_ptr<Environment> ENV, std::shared_p
|
|||||||
playerID = *cb->getMyColor();
|
playerID = *cb->getMyColor();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CEmptyAI::yourTurn()
|
void CEmptyAI::yourTurn(QueryID queryID)
|
||||||
{
|
{
|
||||||
|
cb->selectionMade(0, queryID);
|
||||||
cb->endTurn();
|
cb->endTurn();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ public:
|
|||||||
virtual void loadGame(BinaryDeserializer & h, const int version) override;
|
virtual void loadGame(BinaryDeserializer & h, const int version) override;
|
||||||
|
|
||||||
void initGameInterface(std::shared_ptr<Environment> ENV, std::shared_ptr<CCallback> CB) override;
|
void initGameInterface(std::shared_ptr<Environment> ENV, std::shared_ptr<CCallback> CB) override;
|
||||||
void yourTurn() override;
|
void yourTurn(QueryID queryID) override;
|
||||||
void yourTacticPhase(int distance) override;
|
void yourTacticPhase(int distance) override;
|
||||||
void activeStack(const CStack * stack) override;
|
void activeStack(const CStack * stack) override;
|
||||||
void heroGotLevel(const CGHeroInstance *hero, PrimarySkill pskill, std::vector<SecondarySkill> &skills, QueryID queryID) override;
|
void heroGotLevel(const CGHeroInstance *hero, PrimarySkill pskill, std::vector<SecondarySkill> &skills, QueryID queryID) override;
|
||||||
|
@ -544,10 +544,12 @@ void AIGateway::initGameInterface(std::shared_ptr<Environment> env, std::shared_
|
|||||||
retrieveVisitableObjs();
|
retrieveVisitableObjs();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AIGateway::yourTurn()
|
void AIGateway::yourTurn(QueryID queryID)
|
||||||
{
|
{
|
||||||
LOG_TRACE(logAi);
|
LOG_TRACE_PARAMS(logAi, "queryID '%i'", queryID);
|
||||||
NET_EVENT_HANDLER;
|
NET_EVENT_HANDLER;
|
||||||
|
status.addQuery(queryID, "YourTurn");
|
||||||
|
requestActionASAP([=](){ answerQuery(queryID, 0); });
|
||||||
status.startedTurn();
|
status.startedTurn();
|
||||||
makingTurn = std::make_unique<boost::thread>(&AIGateway::makeTurn, this);
|
makingTurn = std::make_unique<boost::thread>(&AIGateway::makeTurn, this);
|
||||||
}
|
}
|
||||||
|
@ -111,7 +111,7 @@ public:
|
|||||||
std::string getBattleAIName() const override;
|
std::string getBattleAIName() const override;
|
||||||
|
|
||||||
void initGameInterface(std::shared_ptr<Environment> env, std::shared_ptr<CCallback> CB) override;
|
void initGameInterface(std::shared_ptr<Environment> env, std::shared_ptr<CCallback> CB) override;
|
||||||
void yourTurn() override;
|
void yourTurn(QueryID queryID) override;
|
||||||
|
|
||||||
void heroGotLevel(const CGHeroInstance * hero, PrimarySkill pskill, std::vector<SecondarySkill> & skills, QueryID queryID) override; //pskill is gained primary skill, interface has to choose one of given skills and call callback with selection id
|
void heroGotLevel(const CGHeroInstance * hero, PrimarySkill pskill, std::vector<SecondarySkill> & skills, QueryID queryID) override; //pskill is gained primary skill, interface has to choose one of given skills and call callback with selection id
|
||||||
void commanderGotLevel(const CCommanderInstance * commander, std::vector<ui32> skills, QueryID queryID) override; //TODO
|
void commanderGotLevel(const CCommanderInstance * commander, std::vector<ui32> skills, QueryID queryID) override; //TODO
|
||||||
|
@ -610,10 +610,12 @@ void VCAI::initGameInterface(std::shared_ptr<Environment> ENV, std::shared_ptr<C
|
|||||||
retrieveVisitableObjs();
|
retrieveVisitableObjs();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VCAI::yourTurn()
|
void VCAI::yourTurn(QueryID queryID)
|
||||||
{
|
{
|
||||||
LOG_TRACE(logAi);
|
LOG_TRACE_PARAMS(logAi, "queryID '%i'", queryID);
|
||||||
NET_EVENT_HANDLER;
|
NET_EVENT_HANDLER;
|
||||||
|
status.addQuery(queryID, "YourTurn");
|
||||||
|
requestActionASAP([=](){ answerQuery(queryID, 0); });
|
||||||
status.startedTurn();
|
status.startedTurn();
|
||||||
makingTurn = std::make_unique<boost::thread>(&VCAI::makeTurn, this);
|
makingTurn = std::make_unique<boost::thread>(&VCAI::makeTurn, this);
|
||||||
}
|
}
|
||||||
|
@ -144,7 +144,7 @@ public:
|
|||||||
std::string getBattleAIName() const override;
|
std::string getBattleAIName() const override;
|
||||||
|
|
||||||
void initGameInterface(std::shared_ptr<Environment> ENV, std::shared_ptr<CCallback> CB) override;
|
void initGameInterface(std::shared_ptr<Environment> ENV, std::shared_ptr<CCallback> CB) override;
|
||||||
void yourTurn() override;
|
void yourTurn(QueryID queryID) override;
|
||||||
|
|
||||||
void heroGotLevel(const CGHeroInstance * hero, PrimarySkill pskill, std::vector<SecondarySkill> & skills, QueryID queryID) override; //pskill is gained primary skill, interface has to choose one of given skills and call callback with selection id
|
void heroGotLevel(const CGHeroInstance * hero, PrimarySkill pskill, std::vector<SecondarySkill> & skills, QueryID queryID) override; //pskill is gained primary skill, interface has to choose one of given skills and call callback with selection id
|
||||||
void commanderGotLevel(const CCommanderInstance * commander, std::vector<ui32> skills, QueryID queryID) override; //TODO
|
void commanderGotLevel(const CCommanderInstance * commander, std::vector<ui32> skills, QueryID queryID) override; //TODO
|
||||||
|
@ -243,7 +243,7 @@ void CPlayerInterface::performAutosave()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPlayerInterface::yourTurn()
|
void CPlayerInterface::yourTurn(QueryID queryID)
|
||||||
{
|
{
|
||||||
EVENT_HANDLER_CALLED_BY_CLIENT;
|
EVENT_HANDLER_CALLED_BY_CLIENT;
|
||||||
{
|
{
|
||||||
@ -273,10 +273,10 @@ void CPlayerInterface::yourTurn()
|
|||||||
adventureInt->onPlayerTurnStarted(playerID);
|
adventureInt->onPlayerTurnStarted(playerID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
acceptTurn();
|
acceptTurn(queryID);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPlayerInterface::acceptTurn()
|
void CPlayerInterface::acceptTurn(QueryID queryID)
|
||||||
{
|
{
|
||||||
if (settings["session"]["autoSkip"].Bool())
|
if (settings["session"]["autoSkip"].Bool())
|
||||||
{
|
{
|
||||||
@ -322,6 +322,8 @@ void CPlayerInterface::acceptTurn()
|
|||||||
else
|
else
|
||||||
logGlobal->warn("Player has no towns, but daysWithoutCastle is not set");
|
logGlobal->warn("Player has no towns, but daysWithoutCastle is not set");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cb->selectionMade(0, queryID);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPlayerInterface::heroMoved(const TryMoveHero & details, bool verbose)
|
void CPlayerInterface::heroMoved(const TryMoveHero & details, bool verbose)
|
||||||
|
@ -133,7 +133,7 @@ protected: // Call-ins from server, should not be called directly, but only via
|
|||||||
void tileRevealed(const std::unordered_set<int3> &pos) override; //called when fog of war disappears from given tiles
|
void tileRevealed(const std::unordered_set<int3> &pos) override; //called when fog of war disappears from given tiles
|
||||||
void newObject(const CGObjectInstance * obj) override;
|
void newObject(const CGObjectInstance * obj) override;
|
||||||
void availableArtifactsChanged(const CGBlackMarket *bm = nullptr) override; //bm may be nullptr, then artifacts are changed in the global pool (used by merchants in towns)
|
void availableArtifactsChanged(const CGBlackMarket *bm = nullptr) override; //bm may be nullptr, then artifacts are changed in the global pool (used by merchants in towns)
|
||||||
void yourTurn() override;
|
void yourTurn(QueryID queryID) override;
|
||||||
void availableCreaturesChanged(const CGDwelling *town) override;
|
void availableCreaturesChanged(const CGDwelling *town) override;
|
||||||
void heroBonusChanged(const CGHeroInstance *hero, const Bonus &bonus, bool gain) override;//if gain hero received bonus, else he lost it
|
void heroBonusChanged(const CGHeroInstance *hero, const Bonus &bonus, bool gain) override;//if gain hero received bonus, else he lost it
|
||||||
void playerBonusChanged(const Bonus &bonus, bool gain) override;
|
void playerBonusChanged(const Bonus &bonus, bool gain) override;
|
||||||
@ -228,7 +228,7 @@ private:
|
|||||||
void heroKilled(const CGHeroInstance* hero);
|
void heroKilled(const CGHeroInstance* hero);
|
||||||
void garrisonsChanged(std::vector<const CGObjectInstance *> objs);
|
void garrisonsChanged(std::vector<const CGObjectInstance *> objs);
|
||||||
void requestReturningToMainMenu(bool won);
|
void requestReturningToMainMenu(bool won);
|
||||||
void acceptTurn(); //used during hot seat after your turn message is close
|
void acceptTurn(QueryID queryID); //used during hot seat after your turn message is close
|
||||||
void initializeHeroTownList();
|
void initializeHeroTownList();
|
||||||
int getLastIndex(std::string namePrefix);
|
int getLastIndex(std::string namePrefix);
|
||||||
void doMoveHero(const CGHeroInstance *h, CGPath path);
|
void doMoveHero(const CGHeroInstance *h, CGPath path);
|
||||||
|
@ -471,6 +471,7 @@ void ClientCommandManager::giveTurn(const PlayerColor &colorIdentifier)
|
|||||||
{
|
{
|
||||||
YourTurn yt;
|
YourTurn yt;
|
||||||
yt.player = colorIdentifier;
|
yt.player = colorIdentifier;
|
||||||
|
yt.queryID = -1;
|
||||||
|
|
||||||
ApplyClientNetPackVisitor visitor(*CSH->client, *CSH->client->gameState());
|
ApplyClientNetPackVisitor visitor(*CSH->client, *CSH->client->gameState());
|
||||||
yt.visit(visitor);
|
yt.visit(visitor);
|
||||||
|
@ -398,7 +398,7 @@ void ApplyClientNetPackVisitor::visitPlayerReinitInterface(PlayerReinitInterface
|
|||||||
if (cl.gameState()->isPlayerMakingTurn(player))
|
if (cl.gameState()->isPlayerMakingTurn(player))
|
||||||
{
|
{
|
||||||
callAllInterfaces(cl, &IGameEventsReceiver::playerStartsTurn, player);
|
callAllInterfaces(cl, &IGameEventsReceiver::playerStartsTurn, player);
|
||||||
callOnlyThatInterface(cl, player, &CGameInterface::yourTurn);
|
callOnlyThatInterface(cl, player, &CGameInterface::yourTurn, -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -873,7 +873,7 @@ void ApplyClientNetPackVisitor::visitYourTurn(YourTurn & pack)
|
|||||||
logNetwork->debug("Server gives turn to %s", pack.player.getStr());
|
logNetwork->debug("Server gives turn to %s", pack.player.getStr());
|
||||||
|
|
||||||
callAllInterfaces(cl, &IGameEventsReceiver::playerStartsTurn, pack.player);
|
callAllInterfaces(cl, &IGameEventsReceiver::playerStartsTurn, pack.player);
|
||||||
callOnlyThatInterface(cl, pack.player, &CGameInterface::yourTurn);
|
callOnlyThatInterface(cl, pack.player, &CGameInterface::yourTurn, pack.queryID);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ApplyClientNetPackVisitor::visitTurnTimeUpdate(TurnTimeUpdate & pack)
|
void ApplyClientNetPackVisitor::visitTurnTimeUpdate(TurnTimeUpdate & pack)
|
||||||
|
@ -88,7 +88,7 @@ class DLL_LINKAGE CGameInterface : public CBattleGameInterface, public IGameEven
|
|||||||
public:
|
public:
|
||||||
virtual ~CGameInterface() = default;
|
virtual ~CGameInterface() = default;
|
||||||
virtual void initGameInterface(std::shared_ptr<Environment> ENV, std::shared_ptr<CCallback> CB){};
|
virtual void initGameInterface(std::shared_ptr<Environment> ENV, std::shared_ptr<CCallback> CB){};
|
||||||
virtual void yourTurn(){}; //called AFTER playerStartsTurn(player)
|
virtual void yourTurn(QueryID askID){}; //called AFTER playerStartsTurn(player)
|
||||||
|
|
||||||
//pskill is gained primary skill, interface has to choose one of given skills and call callback with selection id
|
//pskill is gained primary skill, interface has to choose one of given skills and call callback with selection id
|
||||||
virtual void heroGotLevel(const CGHeroInstance *hero, PrimarySkill pskill, std::vector<SecondarySkill> &skills, QueryID queryID)=0;
|
virtual void heroGotLevel(const CGHeroInstance *hero, PrimarySkill pskill, std::vector<SecondarySkill> &skills, QueryID queryID)=0;
|
||||||
|
@ -162,7 +162,7 @@ struct DLL_LINKAGE TurnTimeUpdate : public CPackForClient
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DLL_LINKAGE YourTurn : public CPackForClient
|
struct DLL_LINKAGE YourTurn : public Query
|
||||||
{
|
{
|
||||||
void applyGs(CGameState * gs) const;
|
void applyGs(CGameState * gs) const;
|
||||||
|
|
||||||
@ -172,6 +172,7 @@ struct DLL_LINKAGE YourTurn : public CPackForClient
|
|||||||
|
|
||||||
template <typename Handler> void serialize(Handler & h, const int version)
|
template <typename Handler> void serialize(Handler & h, const int version)
|
||||||
{
|
{
|
||||||
|
h & queryID;
|
||||||
h & player;
|
h & player;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#include "TurnOrderProcessor.h"
|
#include "TurnOrderProcessor.h"
|
||||||
|
|
||||||
#include "../queries/QueriesProcessor.h"
|
#include "../queries/QueriesProcessor.h"
|
||||||
|
#include "../queries/MapQueries.h"
|
||||||
#include "../CGameHandler.h"
|
#include "../CGameHandler.h"
|
||||||
#include "../CVCMIServer.h"
|
#include "../CVCMIServer.h"
|
||||||
|
|
||||||
@ -98,8 +99,12 @@ void TurnOrderProcessor::doStartPlayerTurn(PlayerColor which)
|
|||||||
awaitingPlayers.erase(which);
|
awaitingPlayers.erase(which);
|
||||||
gameHandler->onPlayerTurnStarted(which);
|
gameHandler->onPlayerTurnStarted(which);
|
||||||
|
|
||||||
|
auto turnQuery = std::make_shared<PlayerStartsTurnQuery>(gameHandler, which);
|
||||||
|
gameHandler->queries->addQuery(turnQuery);
|
||||||
|
|
||||||
YourTurn yt;
|
YourTurn yt;
|
||||||
yt.player = which;
|
yt.player = which;
|
||||||
|
yt.queryID = turnQuery->queryID;
|
||||||
gameHandler->sendAndApply(&yt);
|
gameHandler->sendAndApply(&yt);
|
||||||
|
|
||||||
assert(actingPlayers.size() == 1); // No simturns yet :(
|
assert(actingPlayers.size() == 1); // No simturns yet :(
|
||||||
|
@ -15,6 +15,32 @@
|
|||||||
#include "../../lib/mapObjects/MiscObjects.h"
|
#include "../../lib/mapObjects/MiscObjects.h"
|
||||||
#include "../../lib/serializer/Cast.h"
|
#include "../../lib/serializer/Cast.h"
|
||||||
|
|
||||||
|
PlayerStartsTurnQuery::PlayerStartsTurnQuery(CGameHandler * owner, PlayerColor player):
|
||||||
|
CGhQuery(owner)
|
||||||
|
{
|
||||||
|
addPlayer(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PlayerStartsTurnQuery::blocksPack(const CPack *pack) const
|
||||||
|
{
|
||||||
|
return blockAllButReply(pack);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerStartsTurnQuery::onAdding(PlayerColor color)
|
||||||
|
{
|
||||||
|
//gh->turnTimerHandler.setTimerEnabled(color, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerStartsTurnQuery::onRemoval(PlayerColor color)
|
||||||
|
{
|
||||||
|
//gh->turnTimerHandler.setTimerEnabled(color, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PlayerStartsTurnQuery::endsByPlayerAnswer() const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
CObjectVisitQuery::CObjectVisitQuery(CGameHandler * owner, const CGObjectInstance * Obj, const CGHeroInstance * Hero, int3 Tile):
|
CObjectVisitQuery::CObjectVisitQuery(CGameHandler * owner, const CGObjectInstance * Obj, const CGHeroInstance * Hero, int3 Tile):
|
||||||
CGhQuery(owner), visitedObject(Obj), visitingHero(Hero), tile(Tile), removeObjectAfterVisit(false)
|
CGhQuery(owner), visitedObject(Obj), visitingHero(Hero), tile(Tile), removeObjectAfterVisit(false)
|
||||||
{
|
{
|
||||||
|
@ -13,6 +13,21 @@
|
|||||||
|
|
||||||
#include "../../lib/NetPacks.h"
|
#include "../../lib/NetPacks.h"
|
||||||
|
|
||||||
|
class TurnTimerHandler;
|
||||||
|
|
||||||
|
//Created when player starts turn
|
||||||
|
//Removed when player accepts a turn
|
||||||
|
class PlayerStartsTurnQuery : public CGhQuery
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
PlayerStartsTurnQuery(CGameHandler * owner, PlayerColor player);
|
||||||
|
|
||||||
|
bool blocksPack(const CPack *pack) const override;
|
||||||
|
void onAdding(PlayerColor color) override;
|
||||||
|
void onRemoval(PlayerColor color) override;
|
||||||
|
bool endsByPlayerAnswer() const override;
|
||||||
|
};
|
||||||
|
|
||||||
//Created when hero visits object.
|
//Created when hero visits object.
|
||||||
//Removed when query above is resolved (or immediately after visit if no queries were created)
|
//Removed when query above is resolved (or immediately after visit if no queries were created)
|
||||||
class CObjectVisitQuery : public CGhQuery
|
class CObjectVisitQuery : public CGhQuery
|
||||||
|
Loading…
x
Reference in New Issue
Block a user