Skip to content

Commit 833e5c8

Browse files
committed
Fix bug with amplified countdown not being propagated.
1 parent ac1b477 commit 833e5c8

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

field/arena.go

+8-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ package field
88
import (
99
"fmt"
1010
"log"
11+
"math"
1112
"reflect"
1213
"time"
1314

@@ -918,8 +919,10 @@ func (arena *Arena) handlePlcInputOutput() {
918919
// Handle in-match PLC functions.
919920
redScore := &arena.RedRealtimeScore.CurrentScore
920921
oldRedScore := *redScore
922+
oldRedAmplifiedTimeRemainingSec := arena.RedRealtimeScore.AmplifiedTimeRemainingSec
921923
blueScore := &arena.BlueRealtimeScore.CurrentScore
922924
oldBlueScore := *blueScore
925+
oldBlueAmplifiedTimeRemainingSec := arena.BlueRealtimeScore.AmplifiedTimeRemainingSec
923926
matchStartTime := arena.MatchStartTime
924927
currentTime := time.Now()
925928
teleopGracePeriod := matchStartTime.Add(
@@ -977,13 +980,17 @@ func (arena *Arena) handlePlcInputOutput() {
977980
blueAmpSpeaker.UpdateState(
978981
blueAmpNoteCount, blueSpeakerNoteCount, blueAmplifyButton, blueCoopButton, matchStartTime, currentTime,
979982
)
980-
if !oldRedScore.Equals(redScore) || !oldBlueScore.Equals(blueScore) {
983+
if !oldRedScore.Equals(redScore) || !oldBlueScore.Equals(blueScore) ||
984+
oldRedAmplifiedTimeRemainingSec != arena.RedRealtimeScore.AmplifiedTimeRemainingSec ||
985+
oldBlueAmplifiedTimeRemainingSec != arena.BlueRealtimeScore.AmplifiedTimeRemainingSec {
981986
arena.RealtimeScoreNotifier.Notify()
982987
}
983988

984989
// Handle the amp outputs.
985990
redAmplifiedTimeRemaining := redAmpSpeaker.AmplifiedTimeRemaining(currentTime)
991+
arena.RedRealtimeScore.AmplifiedTimeRemainingSec = int(math.Ceil(redAmplifiedTimeRemaining))
986992
blueAmplifiedTimeRemaining := blueAmpSpeaker.AmplifiedTimeRemaining(currentTime)
993+
arena.BlueRealtimeScore.AmplifiedTimeRemainingSec = int(math.Ceil(blueAmplifiedTimeRemaining))
987994
if arena.MatchState == AutoPeriod || arena.MatchState == PausePeriod || arena.MatchState == TeleopPeriod {
988995
redLowAmpLight := redAmpSpeaker.BankedAmpNotes >= 1
989996
redHighAmpLight := redAmpSpeaker.BankedAmpNotes >= 2

field/arena_test.go

+18
Original file line numberDiff line numberDiff line change
@@ -1095,17 +1095,30 @@ func TestPlcMatchCycleGameSpecific(t *testing.T) {
10951095
arena.Update()
10961096
arena.MatchStartTime = time.Now().Add(-durationToTeleopStart - 10200*time.Millisecond)
10971097
arena.Update()
1098+
assert.Equal(t, 0, arena.RedRealtimeScore.AmplifiedTimeRemainingSec)
1099+
assert.Equal(t, 10, arena.BlueRealtimeScore.AmplifiedTimeRemainingSec)
10981100
assert.Equal(t, false, plc.redSpeakerLight)
10991101
assert.Equal(t, false, plc.redSubwooferCountdown)
11001102
assert.Equal(t, true, plc.blueSpeakerLight)
11011103
assert.Equal(t, true, plc.blueSubwooferCountdown)
1104+
assert.Equal(t, [3]bool{false, true, true}, plc.blueAmpLights)
1105+
blueAmpSpeaker.LastAmplifiedTime = time.Now().Add(-750 * time.Millisecond)
1106+
arena.Update()
1107+
assert.Equal(t, 0, arena.RedRealtimeScore.AmplifiedTimeRemainingSec)
1108+
assert.Equal(t, 10, arena.BlueRealtimeScore.AmplifiedTimeRemainingSec)
11021109
plc.blueAmpButtons = [2]bool{false, false}
11031110
plc.blueNoteCounts = [2]int{4, 9}
11041111
arena.Update()
11051112
assert.Equal(t, 2, blueAmpSpeaker.TeleopUnamplifiedSpeakerNotes)
11061113
assert.Equal(t, 3, blueAmpSpeaker.TeleopAmplifiedSpeakerNotes)
1114+
blueAmpSpeaker.LastAmplifiedTime = time.Now().Add(-9990 * time.Millisecond)
1115+
arena.Update()
1116+
assert.Equal(t, 0, arena.RedRealtimeScore.AmplifiedTimeRemainingSec)
1117+
assert.Equal(t, 1, arena.BlueRealtimeScore.AmplifiedTimeRemainingSec)
11071118
blueAmpSpeaker.LastAmplifiedTime = time.Now().Add(-11 * time.Second)
11081119
arena.Update()
1120+
assert.Equal(t, 0, arena.RedRealtimeScore.AmplifiedTimeRemainingSec)
1121+
assert.Equal(t, 0, arena.BlueRealtimeScore.AmplifiedTimeRemainingSec)
11091122
assert.Equal(t, false, plc.blueSpeakerLight)
11101123
assert.Equal(t, false, plc.blueSubwooferCountdown)
11111124
plc.blueNoteCounts = [2]int{4, 11}
@@ -1120,14 +1133,19 @@ func TestPlcMatchCycleGameSpecific(t *testing.T) {
11201133
arena.Update()
11211134
arena.MatchStartTime = time.Now().Add(-durationToTeleopStart - 20001*time.Millisecond)
11221135
arena.Update()
1136+
assert.Equal(t, 10, arena.RedRealtimeScore.AmplifiedTimeRemainingSec)
1137+
assert.Equal(t, 0, arena.BlueRealtimeScore.AmplifiedTimeRemainingSec)
11231138
assert.Equal(t, true, plc.redSpeakerLight)
11241139
assert.Equal(t, true, plc.redSubwooferCountdown)
1140+
assert.Equal(t, [3]bool{false, true, true}, plc.redAmpLights)
11251141
assert.Equal(t, false, plc.blueSpeakerLight)
11261142
assert.Equal(t, false, plc.blueSubwooferCountdown)
11271143
arena.MatchStartTime = time.Now().Add(-durationToTeleopStart - 23000*time.Millisecond)
11281144
plc.redNoteCounts = [2]int{3, 6}
11291145
plc.redAmpButtons = [2]bool{false, false}
11301146
arena.Update()
1147+
assert.Equal(t, 0, arena.RedRealtimeScore.AmplifiedTimeRemainingSec)
1148+
assert.Equal(t, 0, arena.BlueRealtimeScore.AmplifiedTimeRemainingSec)
11311149
assert.Equal(t, 4, redAmpSpeaker.TeleopAmplifiedSpeakerNotes)
11321150
assert.Equal(t, false, plc.redSpeakerLight)
11331151
assert.Equal(t, false, plc.redSubwooferCountdown)

0 commit comments

Comments
 (0)