浏览代码

Fix hot seat timer visualization

nordsoft 2 年之前
父节点
当前提交
614a285fb8
共有 2 个文件被更改,包括 17 次插入4 次删除
  1. 10 4
      client/adventureMap/TurnTimerWidget.cpp
  2. 7 0
      client/adventureMap/TurnTimerWidget.h

+ 10 - 4
client/adventureMap/TurnTimerWidget.cpp

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

+ 7 - 0
client/adventureMap/TurnTimerWidget.h

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