Added independent referee button to signal field reset.

This commit is contained in:
Patrick Fairbank
2014-09-05 22:42:26 -07:00
parent 1c670869bd
commit 15faf9dc9f
5 changed files with 32 additions and 4 deletions

View File

@@ -54,6 +54,7 @@ type RealtimeScore struct {
AutoCommitted bool
TeleopCommitted bool
FoulsCommitted bool
FieldReset bool
undoAutoScores []Score
undoCycles []Cycle
}
@@ -545,7 +546,7 @@ func (arena *Arena) handleLighting(alliance string, score *RealtimeScore) {
}
arena.lights.SetAssistGoal(alliance, score.CurrentCycle.Assists)
case POST_MATCH:
if mainArena.redRealtimeScore.FoulsCommitted && mainArena.blueRealtimeScore.FoulsCommitted {
if mainArena.redRealtimeScore.FieldReset && mainArena.blueRealtimeScore.FieldReset {
arena.lights.SetFieldReset()
} else {
arena.lights.ClearGoal(alliance)

View File

@@ -897,6 +897,14 @@ func RefereeDisplayWebsocketHandler(w http.ResponseWriter, r *http.Request) {
}
cards[strconv.Itoa(args.TeamId)] = args.Card
continue
case "signalReset":
if mainArena.MatchState != POST_MATCH {
// Don't allow clearing the field until the match is over.
continue
}
mainArena.redRealtimeScore.FieldReset = true
mainArena.blueRealtimeScore.FieldReset = true
continue // Don't reload.
case "commitMatch":
if mainArena.MatchState != POST_MATCH {
// Don't allow committing the fouls until the match is over.
@@ -904,6 +912,8 @@ func RefereeDisplayWebsocketHandler(w http.ResponseWriter, r *http.Request) {
}
mainArena.redRealtimeScore.FoulsCommitted = true
mainArena.blueRealtimeScore.FoulsCommitted = true
mainArena.redRealtimeScore.FieldReset = true
mainArena.blueRealtimeScore.FieldReset = true
mainArena.scoringStatusNotifier.Notify(nil)
default:
websocket.WriteError(fmt.Sprintf("Invalid message type '%s'.", messageType))

View File

@@ -432,10 +432,20 @@ func TestRefereeDisplayWebsocket(t *testing.T) {
assert.Equal(t, "red", mainArena.blueRealtimeScore.Cards["1680"])
}
// Test match committing.
// Test field reset and match committing.
mainArena.MatchState = POST_MATCH
ws.Write("commitMatch", foulData)
ws.Write("signalReset", nil)
time.Sleep(time.Millisecond * 10)
assert.True(t, mainArena.redRealtimeScore.FieldReset)
assert.True(t, mainArena.blueRealtimeScore.FieldReset)
assert.False(t, mainArena.redRealtimeScore.FoulsCommitted)
assert.False(t, mainArena.blueRealtimeScore.FoulsCommitted)
mainArena.redRealtimeScore.FieldReset = false
mainArena.blueRealtimeScore.FieldReset = false
ws.Write("commitMatch", nil)
readWebsocketType(t, ws, "reload")
assert.True(t, mainArena.redRealtimeScore.FieldReset)
assert.True(t, mainArena.blueRealtimeScore.FieldReset)
assert.True(t, mainArena.redRealtimeScore.FoulsCommitted)
assert.True(t, mainArena.blueRealtimeScore.FoulsCommitted)

View File

@@ -77,6 +77,11 @@ var cycleCard = function(cardButton) {
$(cardButton).attr("data-card", newCard);
};
// Signals to the teams that they may enter the field.
var signalReset = function() {
websocket.send("signalReset");
};
// Signals the scorekeeper that foul entry is complete for this match.
var commitMatch = function() {
websocket.send("commitMatch");

View File

@@ -60,11 +60,13 @@
{{end}}
</div>
<div class="row text-center">
<a class="btn btn-lg btn-default btn-referee btn-referee-wide" onclick="clearFoul();">Clear</a>
<a class="btn btn-lg btn-default btn-referee btn-referee-wide" onclick="clearFoul();">Clear Foul</a>
<button type="button" class="btn btn-lg btn-success btn-referee btn-referee-wide" id="commit"
onclick="commitFoul();">Add Foul</button>
</div>
<div class="row text-center">
<a class="btn btn-lg btn-success btn-referee btn-referee-wide"
onclick="signalReset();">Signal Reset</a>
<a class="btn btn-lg btn-info btn-referee btn-referee-wide"
onclick="commitMatch();">Commit Match</a>
</div>