Skip to content

Commit 4ebe4cb

Browse files
committed
Do not randomize team during majority
If a majority by type was reached, but no unique team could be agreed on, a team was drawn by chance. Now, the team is set to unknown. Thus, the GCO has to manually choose how to proceed.
1 parent b94eec8 commit 4ebe4cb

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

internal/app/statemachine/change_acceptproposal.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,7 @@ func (s *StateMachine) createMergedGameEvent(group *state.ProposalGroup, accepte
6262
} else if byTeam[state.Team_YELLOW] < byTeam[state.Team_BLUE] {
6363
event.SetByTeam(state.Team_BLUE)
6464
} else {
65-
log.Printf("autoRefs undecided on team: %v. Throwing a dice.", byTeam)
66-
event.SetByTeam(state.Team(s.rand.Intn(2) + 1))
65+
event.SetByTeam(state.Team_UNKNOWN)
6766
}
6867
var events []*state.GameEvent
6968
for _, p := range proposals {

internal/app/statemachine/change_gameevent.go

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -338,24 +338,45 @@ func (s *StateMachine) nextCommandForEvent(newState *state.State, gameEvent *sta
338338
state.GameEvent_PENALTY_KICK_FAILED,
339339
state.GameEvent_POSSIBLE_GOAL,
340340
state.GameEvent_INVALID_GOAL:
341-
return state.NewCommand(state.Command_DIRECT, gameEvent.ByTeam().Opposite())
341+
return lastCommandOnUnknownTeam(
342+
newState.NextCommand,
343+
state.NewCommand(state.Command_DIRECT, gameEvent.ByTeam().Opposite()),
344+
)
342345
case state.GameEvent_DEFENDER_IN_DEFENSE_AREA:
343-
return state.NewCommand(state.Command_PENALTY, gameEvent.ByTeam().Opposite())
346+
return lastCommandOnUnknownTeam(
347+
newState.NextCommand,
348+
state.NewCommand(state.Command_PENALTY, gameEvent.ByTeam().Opposite()),
349+
)
344350
case state.GameEvent_GOAL:
345-
return state.NewCommand(state.Command_KICKOFF, gameEvent.ByTeam().Opposite())
351+
return lastCommandOnUnknownTeam(
352+
newState.NextCommand,
353+
state.NewCommand(state.Command_KICKOFF, gameEvent.ByTeam().Opposite()),
354+
)
346355
case state.GameEvent_NO_PROGRESS_IN_GAME,
347356
state.GameEvent_TOO_MANY_ROBOTS:
348357
return state.NewCommand(state.Command_FORCE_START, state.Team_UNKNOWN)
349358
case state.GameEvent_EMERGENCY_STOP:
350359
if newState.NextCommand != nil {
351360
return newState.NextCommand
352361
}
353-
return state.NewCommand(state.Command_DIRECT, gameEvent.ByTeam().Opposite())
362+
return lastCommandOnUnknownTeam(
363+
newState.NextCommand,
364+
state.NewCommand(state.Command_DIRECT, gameEvent.ByTeam().Opposite()),
365+
)
354366
default:
355367
return newState.NextCommand
356368
}
357369
}
358370

371+
func lastCommandOnUnknownTeam(lastCommand, newCommand *state.Command) *state.Command {
372+
if newCommand.ForTeam.Unknown() {
373+
// no (new) next command, if the team is unknown
374+
// this can happen if an autoRef majority matched by type, but not by team
375+
return lastCommand
376+
}
377+
return newCommand
378+
}
379+
359380
// incrementsFoulCounter checks if the game event increments the foul counter
360381
func incrementsFoulCounter(currentState *state.State, gameEvent *state.GameEvent) bool {
361382
switch *gameEvent.Type {

0 commit comments

Comments
 (0)