Skip to content

Commit e0db2d9

Browse files
committed
Feature: Handle disabled game events
1 parent 1e06689 commit e0db2d9

File tree

3 files changed

+38
-10
lines changed

3 files changed

+38
-10
lines changed

internal/app/engine/engine.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,14 @@ func NewEngine(gameConfig config.Game, engineConfig config.Engine) (e *Engine) {
6464

6565
// Enqueue adds the change to the change queue
6666
func (e *Engine) Enqueue(change *statemachine.Change) {
67+
if change.GetAddGameEvent() != nil {
68+
for t, b := range e.config.GameEventBehavior {
69+
if b == Config_GAME_EVENT_BEHAVIOR_OFF && change.GetAddGameEvent().GameEvent.Type.String() == t {
70+
// disabled game event
71+
return
72+
}
73+
}
74+
}
6775
if change.Revertible == nil {
6876
change.Revertible = new(bool)
6977
// Assume that changes from outside are by default revertible, except if the flag is already set
@@ -306,3 +314,8 @@ func (e *Engine) UpdateConfig(delta *Config) {
306314
log.Printf("Could not write engine config: %v", err)
307315
}
308316
}
317+
318+
// IsGameEventEnabled returns true, if the game event type is not disabled
319+
func (e *Engine) IsGameEventEnabled(evenType state.GameEvent_Type) bool {
320+
return e.config.GameEventBehavior[evenType.String()] != Config_GAME_EVENT_BEHAVIOR_OFF
321+
}

internal/app/engine/process_botremoved.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ import (
88
)
99

1010
func (e *Engine) processBotNumber() {
11+
if !e.IsGameEventEnabled(state.GameEvent_TOO_MANY_ROBOTS) {
12+
return
13+
}
14+
1115
for _, team := range state.BothTeams() {
1216
e.processBotNumberPerTeam(team)
1317
}

internal/app/engine/process_noprogress.go

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,8 @@ func (d *NoProgressDetector) process() {
4545
if timeSinceLastProgress > d.gcEngine.gameConfig.NoProgressTimeout[d.gcEngine.currentState.Division.Div()] {
4646
duration := float32(timeSinceLastProgress.Seconds())
4747
location := d.gcEngine.gcState.TrackerStateGc.Ball.Pos.ToVector2()
48-
for _, team := range state.BothTeams() {
49-
defenseArea := geom.NewDefenseArea(d.gcEngine.getGeometry(), *d.gcEngine.currentState.TeamState[team.String()].OnPositiveHalf)
50-
if defenseArea.IsPointInside(d.gcEngine.gcState.TrackerStateGc.Ball.Pos.ToVector2()) {
48+
if d.gcEngine.IsGameEventEnabled(state.GameEvent_KEEPER_HELD_BALL) {
49+
if ok, team := d.isBallInAnyDefenseArea(); ok {
5150
d.gcEngine.Enqueue(createGameEventChange(state.GameEvent_KEEPER_HELD_BALL, state.GameEvent{
5251
Event: &state.GameEvent_KeeperHeldBall_{
5352
KeeperHeldBall: &state.GameEvent_KeeperHeldBall{
@@ -60,13 +59,25 @@ func (d *NoProgressDetector) process() {
6059
return
6160
}
6261
}
63-
d.gcEngine.Enqueue(createGameEventChange(state.GameEvent_NO_PROGRESS_IN_GAME, state.GameEvent{
64-
Event: &state.GameEvent_NoProgressInGame_{
65-
NoProgressInGame: &state.GameEvent_NoProgressInGame{
66-
Location: location,
67-
Time: &duration,
62+
if d.gcEngine.IsGameEventEnabled(state.GameEvent_NO_PROGRESS_IN_GAME) {
63+
d.gcEngine.Enqueue(createGameEventChange(state.GameEvent_NO_PROGRESS_IN_GAME, state.GameEvent{
64+
Event: &state.GameEvent_NoProgressInGame_{
65+
NoProgressInGame: &state.GameEvent_NoProgressInGame{
66+
Location: location,
67+
Time: &duration,
68+
},
6869
},
69-
},
70-
}))
70+
}))
71+
}
72+
}
73+
}
74+
75+
func (d *NoProgressDetector) isBallInAnyDefenseArea() (bool, state.Team) {
76+
for _, team := range state.BothTeams() {
77+
defenseArea := geom.NewDefenseArea(d.gcEngine.getGeometry(), *d.gcEngine.currentState.TeamState[team.String()].OnPositiveHalf)
78+
if defenseArea.IsPointInside(d.gcEngine.gcState.TrackerStateGc.Ball.Pos.ToVector2()) {
79+
return true, team
80+
}
7181
}
82+
return false, state.Team_UNKNOWN
7283
}

0 commit comments

Comments
 (0)