mirror of
https://github.com/vcmi/vcmi.git
synced 2025-06-15 00:05:02 +02:00
@ -101,7 +101,6 @@ struct OCM_HLP_CGIN
|
|||||||
} ocmptwo_cgin ;
|
} ocmptwo_cgin ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CPlayerInterface::CPlayerInterface(PlayerColor Player)
|
CPlayerInterface::CPlayerInterface(PlayerColor Player)
|
||||||
{
|
{
|
||||||
logGlobal->traceStream() << "\tHuman player interface for player " << Player << " being constructed";
|
logGlobal->traceStream() << "\tHuman player interface for player " << Player << " being constructed";
|
||||||
@ -1503,8 +1502,16 @@ void CPlayerInterface::centerView (int3 pos, int focusTime)
|
|||||||
if(focusTime)
|
if(focusTime)
|
||||||
{
|
{
|
||||||
GH.totalRedraw();
|
GH.totalRedraw();
|
||||||
|
#ifdef VCMI_SDL1
|
||||||
CSDL_Ext::update(screen);
|
CSDL_Ext::update(screen);
|
||||||
SDL_Delay(focusTime);
|
SDL_Delay(focusTime);
|
||||||
|
#else
|
||||||
|
{
|
||||||
|
auto unlockPim = vstd::makeUnlockGuard(*pim);
|
||||||
|
IgnoreEvents ignore(*this);
|
||||||
|
SDL_Delay(focusTime);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2553,6 +2560,16 @@ bool CPlayerInterface::capturedAllEvents()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(ignoreEvents)
|
||||||
|
{
|
||||||
|
boost::unique_lock<boost::mutex> un(eventsM);
|
||||||
|
while(!events.empty())
|
||||||
|
{
|
||||||
|
events.pop();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -269,7 +269,25 @@ private:
|
|||||||
template <typename Handler> void serializeTempl(Handler &h, const int version);
|
template <typename Handler> void serializeTempl(Handler &h, const int version);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
struct IgnoreEvents
|
||||||
|
{
|
||||||
|
CPlayerInterface & owner;
|
||||||
|
IgnoreEvents(CPlayerInterface & Owner):owner(Owner)
|
||||||
|
{
|
||||||
|
owner.ignoreEvents = true;
|
||||||
|
};
|
||||||
|
~IgnoreEvents()
|
||||||
|
{
|
||||||
|
owner.ignoreEvents = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool duringMovement;
|
bool duringMovement;
|
||||||
|
bool ignoreEvents;
|
||||||
|
|
||||||
void doMoveHero(const CGHeroInstance *h, CGPath path);
|
void doMoveHero(const CGHeroInstance *h, CGPath path);
|
||||||
};
|
};
|
||||||
|
@ -164,6 +164,11 @@ void SetMovePoints::applyCl( CClient *cl )
|
|||||||
void FoWChange::applyCl( CClient *cl )
|
void FoWChange::applyCl( CClient *cl )
|
||||||
{
|
{
|
||||||
for(auto &i : cl->playerint)
|
for(auto &i : cl->playerint)
|
||||||
|
{
|
||||||
|
if(cl->getPlayerRelations(i.first, player) == PlayerRelations::SAME_PLAYER && waitForDialogs && LOCPLINT == i.second.get())
|
||||||
|
{
|
||||||
|
LOCPLINT->waitWhileDialog();
|
||||||
|
}
|
||||||
if(cl->getPlayerRelations(i.first, player) != PlayerRelations::ENEMIES)
|
if(cl->getPlayerRelations(i.first, player) != PlayerRelations::ENEMIES)
|
||||||
{
|
{
|
||||||
if(mode)
|
if(mode)
|
||||||
@ -171,7 +176,7 @@ void FoWChange::applyCl( CClient *cl )
|
|||||||
else
|
else
|
||||||
i.second->tileHidden(tiles);
|
i.second->tileHidden(tiles);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
cl->invalidatePaths();
|
cl->invalidatePaths();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -302,16 +302,17 @@ struct SetMovePoints : public CPackForClient //111
|
|||||||
|
|
||||||
struct FoWChange : public CPackForClient //112
|
struct FoWChange : public CPackForClient //112
|
||||||
{
|
{
|
||||||
FoWChange(){type = 112;};
|
FoWChange(){type = 112;waitForDialogs = false;};
|
||||||
void applyCl(CClient *cl);
|
void applyCl(CClient *cl);
|
||||||
DLL_LINKAGE void applyGs(CGameState *gs);
|
DLL_LINKAGE void applyGs(CGameState *gs);
|
||||||
|
|
||||||
std::unordered_set<int3, struct ShashInt3 > tiles;
|
std::unordered_set<int3, struct ShashInt3 > tiles;
|
||||||
PlayerColor player;
|
PlayerColor player;
|
||||||
ui8 mode; //mode==0 - hide, mode==1 - reveal
|
ui8 mode; //mode==0 - hide, mode==1 - reveal
|
||||||
|
bool waitForDialogs;
|
||||||
template <typename Handler> void serialize(Handler &h, const int version)
|
template <typename Handler> void serialize(Handler &h, const int version)
|
||||||
{
|
{
|
||||||
h & tiles & player & mode;
|
h & tiles & player & mode & waitForDialogs;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1294,6 +1294,7 @@ void CGMagi::onHeroVisit(const CGHeroInstance * h) const
|
|||||||
FoWChange fw;
|
FoWChange fw;
|
||||||
fw.player = h->tempOwner;
|
fw.player = h->tempOwner;
|
||||||
fw.mode = 1;
|
fw.mode = 1;
|
||||||
|
fw.waitForDialogs = true;
|
||||||
|
|
||||||
for(auto it : eyelist[subID])
|
for(auto it : eyelist[subID])
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user