1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-03-31 22:05:10 +02:00

Fix hot seat timer visualization

This commit is contained in:
nordsoft 2023-08-26 06:15:28 +04:00
parent e4e9bcfb9b
commit 614a285fb8
2 changed files with 17 additions and 4 deletions

View File

@ -41,7 +41,7 @@ void TurnTimerWidget::DrawRect::showAll(Canvas & to)
TurnTimerWidget::TurnTimerWidget(): TurnTimerWidget::TurnTimerWidget():
InterfaceObjectConfigurable(TIME), InterfaceObjectConfigurable(TIME),
turnTime(0), lastTurnTime(0), cachedTurnTime(0) turnTime(0), lastTurnTime(0), cachedTurnTime(0), lastPlayer(PlayerColor::CANNOT_DETERMINE)
{ {
REGISTER_BUILDER("drawRect", &TurnTimerWidget::buildDrawRect); REGISTER_BUILDER("drawRect", &TurnTimerWidget::buildDrawRect);
@ -73,8 +73,8 @@ void TurnTimerWidget::show(Canvas & to)
void TurnTimerWidget::setTime(PlayerColor player, int time) void TurnTimerWidget::setTime(PlayerColor player, int time)
{ {
int newTime = time / 1000; int newTime = time / 1000;
if(player == LOCPLINT->playerID) if(player == LOCPLINT->playerID
&& (newTime != turnTime) && newTime != turnTime
&& notifications.count(newTime)) && notifications.count(newTime))
{ {
CCS->soundh->playSound(variables["notificationSound"].String()); CCS->soundh->playSound(variables["notificationSound"].String());
@ -117,6 +117,12 @@ void TurnTimerWidget::tick(uint32_t msPassed)
cachedTurnTime -= msPassed; cachedTurnTime -= msPassed;
if(cachedTurnTime < 0) cachedTurnTime = 0; //do not go below zero if(cachedTurnTime < 0) cachedTurnTime = 0; //do not go below zero
if(lastPlayer != player)
{
lastPlayer = player;
lastTurnTime = 0;
}
auto timeCheckAndUpdate = [&](int time) auto timeCheckAndUpdate = [&](int time)
{ {
if(time / 1000 != lastTurnTime / 1000) if(time / 1000 != lastTurnTime / 1000)
@ -130,7 +136,7 @@ void TurnTimerWidget::tick(uint32_t msPassed)
}; };
auto * playerInfo = LOCPLINT->cb->getPlayer(player); auto * playerInfo = LOCPLINT->cb->getPlayer(player);
if(playerInfo && playerInfo->isHuman()) if(player.isValidPlayer() || (playerInfo && playerInfo->isHuman()))
{ {
if(LOCPLINT->battleInt) if(LOCPLINT->battleInt)
{ {

View File

@ -18,6 +18,12 @@
class CAnimImage; class CAnimImage;
class CLabel; class CLabel;
VCMI_LIB_NAMESPACE_BEGIN
class PlayerColor;
VCMI_LIB_NAMESPACE_END
class TurnTimerWidget : public InterfaceObjectConfigurable class TurnTimerWidget : public InterfaceObjectConfigurable
{ {
private: private:
@ -35,6 +41,7 @@ private:
int turnTime; int turnTime;
int lastTurnTime; int lastTurnTime;
int cachedTurnTime; int cachedTurnTime;
PlayerColor lastPlayer;
std::set<int> notifications; std::set<int> notifications;