Skip to content

Commit c8854fb

Browse files
committed
Read new geometry format and respect type attribute of shapes
1 parent 4535f3f commit c8854fb

File tree

7 files changed

+304
-202
lines changed

7 files changed

+304
-202
lines changed

config/ssl-game-controller.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ game:
7171
defense-area-width: 3.6
7272
penalty-kick-dist-to-goal: 8.0
7373
goal-width: 1.8
74+
center-circle-radius: 0.5
7475
placement-offset-touch-line: 0.2
7576
placement-offset-goal-line: 0.2
7677
placement-offset-goal-line-goal-kick: 1.0
@@ -82,6 +83,7 @@ game:
8283
defense-area-width: 2.0
8384
penalty-kick-dist-to-goal: 6.0
8485
goal-width: 1.0
86+
center-circle-radius: 0.5
8587
placement-offset-touch-line: 0.2
8688
placement-offset-goal-line: 0.2
8789
placement-offset-goal-line-goal-kick: 1.0

internal/app/config/config.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ type Geometry struct {
2727
DefenseAreaWidth float64 `yaml:"defense-area-width"`
2828
PenaltyKickDistToGoal float64 `yaml:"penalty-kick-dist-to-goal"`
2929
GoalWidth float64 `yaml:"goal-width"`
30+
CenterCircleRadius float64 `yaml:"center-circle-radius"`
3031
PlacementOffsetTouchLine float64 `yaml:"placement-offset-touch-line"`
3132
PlacementOffsetGoalLine float64 `yaml:"placement-offset-goal-line"`
3233
PlacementOffsetGoalLineGoalKick float64 `yaml:"placement-offset-goal-line-goal-kick"`
@@ -227,6 +228,7 @@ func DefaultControllerConfig() (c Controller) {
227228
DefenseAreaWidth: 3.6,
228229
PenaltyKickDistToGoal: 8.0,
229230
GoalWidth: 1.8,
231+
CenterCircleRadius: 0.5,
230232
PlacementOffsetTouchLine: 0.2,
231233
PlacementOffsetGoalLine: 0.2,
232234
PlacementOffsetGoalLineGoalKick: 1.0,
@@ -239,6 +241,7 @@ func DefaultControllerConfig() (c Controller) {
239241
DefenseAreaWidth: 2,
240242
PenaltyKickDistToGoal: 6.0,
241243
GoalWidth: 1.0,
244+
CenterCircleRadius: 0.5,
242245
PlacementOffsetTouchLine: 0.2,
243246
PlacementOffsetGoalLine: 0.2,
244247
PlacementOffsetGoalLineGoalKick: 1.0,

internal/app/config/testdata/config.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ game:
7070
defense-area-width: 3.6
7171
penalty-kick-dist-to-goal: 8.0
7272
goal-width: 1.8
73+
center-circle-radius: 0.5
7374
placement-offset-touch-line: 0.2
7475
placement-offset-goal-line: 0.2
7576
placement-offset-goal-line-goal-kick: 1.0
@@ -81,6 +82,7 @@ game:
8182
defense-area-width: 2.0
8283
penalty-kick-dist-to-goal: 6.0
8384
goal-width: 1.0
85+
center-circle-radius: 0.5
8486
placement-offset-touch-line: 0.2
8587
placement-offset-goal-line: 0.2
8688
placement-offset-goal-line-goal-kick: 1.0

internal/app/engine/consume_geometry.go

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,39 @@ func (e *Engine) ProcessGeometry(data *vision.SSL_GeometryData) {
1616
newGeometry.FieldWidth = float64(*data.Field.FieldWidth) / 1000.0
1717
newGeometry.FieldLength = float64(*data.Field.FieldLength) / 1000.0
1818
newGeometry.GoalWidth = float64(*data.Field.GoalWidth) / 1000.0
19-
for _, line := range data.Field.FieldLines {
20-
if *line.Name == "LeftFieldLeftPenaltyStretch" {
21-
newGeometry.DefenseAreaDepth = math.Abs(float64(*line.P1.X-*line.P2.X)) / 1000.0
22-
} else if *line.Name == "LeftPenaltyStretch" {
23-
newGeometry.DefenseAreaWidth = math.Abs(float64(*line.P1.Y-*line.P2.Y)) / 1000.0
19+
20+
if data.Field.PenaltyAreaWidth != nil {
21+
newGeometry.DefenseAreaWidth = float64(*data.Field.PenaltyAreaWidth) / 1000.0
22+
} else {
23+
for _, line := range data.Field.FieldLines {
24+
if (line.Type != nil && *line.Type == vision.SSL_FieldShapeType_LeftPenaltyStretch) ||
25+
*line.Name == "LeftPenaltyStretch" {
26+
newGeometry.DefenseAreaWidth = math.Abs(float64(*line.P1.Y-*line.P2.Y)) / 1000.0
27+
break
28+
}
29+
}
30+
}
31+
32+
if data.Field.PenaltyAreaDepth != nil {
33+
newGeometry.DefenseAreaDepth = float64(*data.Field.PenaltyAreaDepth) / 1000.0
34+
} else {
35+
for _, line := range data.Field.FieldLines {
36+
if (line.Type != nil && *line.Type == vision.SSL_FieldShapeType_LeftFieldLeftPenaltyStretch) ||
37+
*line.Name == "LeftFieldLeftPenaltyStretch" {
38+
newGeometry.DefenseAreaDepth = math.Abs(float64(*line.P1.X-*line.P2.X)) / 1000.0
39+
break
40+
}
2441
}
2542
}
2643

44+
if data.Field.GoalCenterToPenaltyMark != nil {
45+
newGeometry.PenaltyKickDistToGoal = float64(*data.Field.GoalCenterToPenaltyMark) / 1000.0
46+
}
47+
48+
if data.Field.CenterCircleRadius != nil {
49+
newGeometry.CenterCircleRadius = float64(*data.Field.CenterCircleRadius) / 1000.0
50+
}
51+
2752
e.stateMachine.Geometry = newGeometry
2853

2954
if currentGeometry != newGeometry {

internal/app/engine/process_continue.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func (e *Engine) processContinue() {
3333

3434
if *e.currentState.Command.Type == state.Command_KICKOFF {
3535
// ball in center circle
36-
if e.gcState.TrackerStateGc.Ball.Pos.ToVector2().Length() > e.gameConfig.DistanceToBallInStop {
36+
if e.gcState.TrackerStateGc.Ball.Pos.ToVector2().Length() > e.getGeometry().CenterCircleRadius {
3737
return
3838
}
3939

0 commit comments

Comments
 (0)