mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-01-25 19:04:48 -08:00
fix bug with phase highlighting in replays (#5161)
* fix bug with incorrectly highlighted phases * fix new bug with phases continuously darkening * use preincrement instead of postincrement * simplify conditional
This commit is contained in:
@@ -637,6 +637,19 @@ void TabGame::replayFastForwardButtonToggled(bool checked)
|
||||
timelineWidget->setTimeScaleFactor(checked ? 10.0 : 1.0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Handles everything that needs to be reset when doing a replay rewind.
|
||||
*/
|
||||
void TabGame::replayRewind()
|
||||
{
|
||||
// reset chat log
|
||||
messageLog->clearChat();
|
||||
|
||||
// reset phase markers
|
||||
currentPhase = -1;
|
||||
phasesToolbar->reset();
|
||||
}
|
||||
|
||||
void TabGame::incrementGameTime()
|
||||
{
|
||||
int seconds = ++secondsElapsed;
|
||||
@@ -1718,7 +1731,7 @@ void TabGame::createReplayDock()
|
||||
timelineWidget->setTimeline(replayTimeline);
|
||||
connect(timelineWidget, SIGNAL(processNextEvent()), this, SLOT(replayNextEvent()));
|
||||
connect(timelineWidget, SIGNAL(replayFinished()), this, SLOT(replayFinished()));
|
||||
connect(timelineWidget, &ReplayTimelineWidget::rewound, messageLog, &ChatView::clearChat);
|
||||
connect(timelineWidget, &ReplayTimelineWidget::rewound, this, &TabGame::replayRewind);
|
||||
|
||||
// timeline skip shortcuts
|
||||
aReplaySkipForward = new QAction(timelineWidget);
|
||||
|
||||
@@ -225,6 +225,7 @@ private slots:
|
||||
void replayFinished();
|
||||
void replayPlayButtonToggled(bool checked);
|
||||
void replayFastForwardButtonToggled(bool checked);
|
||||
void replayRewind();
|
||||
|
||||
void incrementGameTime();
|
||||
void adminLockChanged(bool lock);
|
||||
|
||||
@@ -74,13 +74,32 @@ void PhaseButton::updateAnimation()
|
||||
if (!highlightable)
|
||||
return;
|
||||
|
||||
if (active) {
|
||||
if (++activeAnimationCounter >= 10)
|
||||
activeAnimationTimer->stop();
|
||||
// the counter ticks up to 10 when active and down to 0 when inactive
|
||||
if (active && activeAnimationCounter < 10) {
|
||||
++activeAnimationCounter;
|
||||
} else if (!active && activeAnimationCounter > 0) {
|
||||
--activeAnimationCounter;
|
||||
} else {
|
||||
if (--activeAnimationCounter <= 0)
|
||||
activeAnimationTimer->stop();
|
||||
activeAnimationTimer->stop();
|
||||
}
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Immediately resets the button to the inactive state, without going through the animation.
|
||||
*/
|
||||
void PhaseButton::reset()
|
||||
{
|
||||
activeAnimationTimer->stop();
|
||||
active = false;
|
||||
|
||||
if (highlightable) {
|
||||
activeAnimationCounter = 0;
|
||||
} else {
|
||||
activeAnimationCounter = 9;
|
||||
}
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
@@ -249,6 +268,16 @@ void PhasesToolbar::phaseButtonClicked()
|
||||
emit sendGameCommand(cmd, -1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Immediately resets the toolbar to its initial state, with all phases inactive.
|
||||
*/
|
||||
void PhasesToolbar::reset()
|
||||
{
|
||||
for (auto &i : buttonList) {
|
||||
i->reset();
|
||||
}
|
||||
}
|
||||
|
||||
void PhasesToolbar::actNextTurn()
|
||||
{
|
||||
emit sendGameCommand(Command_NextTurn(), -1);
|
||||
|
||||
@@ -45,6 +45,7 @@ public:
|
||||
{
|
||||
return active;
|
||||
}
|
||||
void reset();
|
||||
void triggerDoubleClickAction();
|
||||
signals:
|
||||
void clicked();
|
||||
@@ -85,6 +86,7 @@ public:
|
||||
public slots:
|
||||
void setActivePhase(int phase);
|
||||
void triggerPhaseAction(int phase);
|
||||
void reset();
|
||||
private slots:
|
||||
void phaseButtonClicked();
|
||||
void actNextTurn();
|
||||
|
||||
Reference in New Issue
Block a user