@@ -45,9 +45,8 @@ func (d *NoProgressDetector) process() {
45
45
if timeSinceLastProgress > d .gcEngine .gameConfig .NoProgressTimeout [d .gcEngine .currentState .Division .Div ()] {
46
46
duration := float32 (timeSinceLastProgress .Seconds ())
47
47
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 {
51
50
d .gcEngine .Enqueue (createGameEventChange (state .GameEvent_KEEPER_HELD_BALL , state.GameEvent {
52
51
Event : & state.GameEvent_KeeperHeldBall_ {
53
52
KeeperHeldBall : & state.GameEvent_KeeperHeldBall {
@@ -60,13 +59,25 @@ func (d *NoProgressDetector) process() {
60
59
return
61
60
}
62
61
}
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
+ },
68
69
},
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
+ }
71
81
}
82
+ return false , state .Team_UNKNOWN
72
83
}
0 commit comments