Add starting quadrant and Auto balls to the scouting database
This patch makes sure that the starting quadrant data and the auto
balls that get picked actually make it into the database.
Signed-off-by: Philipp Schrader <philipp.schrader@gmail.com>
Change-Id: Icfbe31009913a7fa42b499c6d53fe07310e1e12a
diff --git a/scouting/db/db.go b/scouting/db/db.go
index 98cc788..d9bebc9 100644
--- a/scouting/db/db.go
+++ b/scouting/db/db.go
@@ -21,7 +21,10 @@
}
type Stats struct {
- TeamNumber, MatchNumber int32
+ TeamNumber, MatchNumber int32
+ StartingQuadrant int32
+ AutoBallPickedUp [5]bool
+ // TODO(phil): Re-order auto and teleop fields so auto comes first.
ShotsMissed, UpperGoalShots, LowerGoalShots int32
ShotsMissedAuto, UpperGoalAuto, LowerGoalAuto, PlayedDefense int32
Climbing int32
@@ -80,6 +83,12 @@
"id SERIAL PRIMARY KEY, " +
"TeamNumber INTEGER, " +
"MatchNumber INTEGER, " +
+ "StartingQuadrant INTEGER, " +
+ "AutoBall1PickedUp BOOLEAN, " +
+ "AutoBall2PickedUp BOOLEAN, " +
+ "AutoBall3PickedUp BOOLEAN, " +
+ "AutoBall4PickedUp BOOLEAN, " +
+ "AutoBall5PickedUp BOOLEAN, " +
"ShotsMissed INTEGER, " +
"UpperGoalShots INTEGER, " +
"LowerGoalShots INTEGER, " +
@@ -152,14 +161,20 @@
func (database *Database) AddToMatch(m Match) error {
statement, err := database.Prepare("INSERT INTO team_match_stats(" +
"TeamNumber, MatchNumber, " +
+ "StartingQuadrant, " +
+ "AutoBall1PickedUp, AutoBall2PickedUp, AutoBall3PickedUp, " +
+ "AutoBall4PickedUp, AutoBall5PickedUp, " +
"ShotsMissed, UpperGoalShots, LowerGoalShots, " +
"ShotsMissedAuto, UpperGoalAuto, LowerGoalAuto, " +
"PlayedDefense, Climbing, CollectedBy) " +
"VALUES (" +
"$1, $2, " +
- "$3, $4, $5, " +
- "$6, $7, $8, " +
- "$9, $10, $11) " +
+ "$3, " +
+ "$4, $5, $6, " +
+ "$7, $8, " +
+ "$9, $10, $11, " +
+ "$12, $13, $14, " +
+ "$15, $16, $17) " +
"RETURNING id")
if err != nil {
return errors.New(fmt.Sprint("Failed to prepare insertion into stats database: ", err))
@@ -168,7 +183,14 @@
var rowIds [6]int64
for i, TeamNumber := range []int32{m.R1, m.R2, m.R3, m.B1, m.B2, m.B3} {
- row := statement.QueryRow(TeamNumber, m.MatchNumber, 0, 0, 0, 0, 0, 0, 0, 0, "")
+ row := statement.QueryRow(
+ TeamNumber, m.MatchNumber,
+ 0,
+ false, false, false,
+ false, false,
+ 0, 0, 0,
+ 0, 0, 0,
+ 0, 0, "")
err = row.Scan(&rowIds[i])
if err != nil {
return errors.New(fmt.Sprint("Failed to insert stats: ", err))
@@ -200,16 +222,23 @@
func (database *Database) AddToStats(s Stats) error {
statement, err := database.Prepare("UPDATE team_match_stats SET " +
"TeamNumber = $1, MatchNumber = $2, " +
- "ShotsMissed = $3, UpperGoalShots = $4, LowerGoalShots = $5, " +
- "ShotsMissedAuto = $6, UpperGoalAuto = $7, LowerGoalAuto = $8, " +
- "PlayedDefense = $9, Climbing = $10, CollectedBy = $11 " +
- "WHERE MatchNumber = $12 AND TeamNumber = $13")
+ "StartingQuadrant = $3, " +
+ "AutoBall1PickedUp = $4, AutoBall2PickedUp = $5, AutoBall3PickedUp = $6, " +
+ "AutoBall4PickedUp = $7, AutoBall5PickedUp = $8, " +
+ "ShotsMissed = $9, UpperGoalShots = $10, LowerGoalShots = $11, " +
+ "ShotsMissedAuto = $12, UpperGoalAuto = $13, LowerGoalAuto = $14, " +
+ "PlayedDefense = $15, Climbing = $16, CollectedBy = $17 " +
+ "WHERE MatchNumber = $18 AND TeamNumber = $19")
if err != nil {
return errors.New(fmt.Sprint("Failed to prepare stats update statement: ", err))
}
defer statement.Close()
- result, err := statement.Exec(s.TeamNumber, s.MatchNumber,
+ result, err := statement.Exec(
+ s.TeamNumber, s.MatchNumber,
+ s.StartingQuadrant,
+ s.AutoBallPickedUp[0], s.AutoBallPickedUp[1], s.AutoBallPickedUp[2],
+ s.AutoBallPickedUp[3], s.AutoBallPickedUp[4],
s.ShotsMissed, s.UpperGoalShots, s.LowerGoalShots,
s.ShotsMissedAuto, s.UpperGoalAuto, s.LowerGoalAuto,
s.PlayedDefense, s.Climbing, s.CollectedBy,
@@ -263,7 +292,11 @@
for rows.Next() {
var team Stats
var id int
- err = rows.Scan(&id, &team.TeamNumber, &team.MatchNumber,
+ err = rows.Scan(&id,
+ &team.TeamNumber, &team.MatchNumber,
+ &team.StartingQuadrant,
+ &team.AutoBallPickedUp[0], &team.AutoBallPickedUp[1], &team.AutoBallPickedUp[2],
+ &team.AutoBallPickedUp[3], &team.AutoBallPickedUp[4],
&team.ShotsMissed, &team.UpperGoalShots, &team.LowerGoalShots,
&team.ShotsMissedAuto, &team.UpperGoalAuto, &team.LowerGoalAuto,
&team.PlayedDefense, &team.Climbing, &team.CollectedBy)
@@ -310,7 +343,11 @@
for rows.Next() {
var team Stats
var id int
- err = rows.Scan(&id, &team.TeamNumber, &team.MatchNumber,
+ err = rows.Scan(&id,
+ &team.TeamNumber, &team.MatchNumber,
+ &team.StartingQuadrant,
+ &team.AutoBallPickedUp[0], &team.AutoBallPickedUp[1], &team.AutoBallPickedUp[2],
+ &team.AutoBallPickedUp[3], &team.AutoBallPickedUp[4],
&team.ShotsMissed, &team.UpperGoalShots, &team.LowerGoalShots,
&team.ShotsMissedAuto, &team.UpperGoalAuto, &team.LowerGoalAuto,
&team.PlayedDefense, &team.Climbing, &team.CollectedBy)
diff --git a/scouting/db/db_test.go b/scouting/db/db_test.go
index b06706d..c5bea5e 100644
--- a/scouting/db/db_test.go
+++ b/scouting/db/db_test.go
@@ -89,42 +89,54 @@
correct := []Stats{
Stats{
TeamNumber: 1236, MatchNumber: 7,
- ShotsMissed: 9, UpperGoalShots: 5, LowerGoalShots: 4,
+ StartingQuadrant: 2,
+ AutoBallPickedUp: [5]bool{false, false, false, true, false},
+ ShotsMissed: 9, UpperGoalShots: 5, LowerGoalShots: 4,
ShotsMissedAuto: 3, UpperGoalAuto: 2, LowerGoalAuto: 1,
PlayedDefense: 2, Climbing: 3,
CollectedBy: "josh",
},
Stats{
TeamNumber: 1001, MatchNumber: 7,
- ShotsMissed: 6, UpperGoalShots: 9, LowerGoalShots: 9,
+ StartingQuadrant: 3,
+ AutoBallPickedUp: [5]bool{true, false, true, true, false},
+ ShotsMissed: 6, UpperGoalShots: 9, LowerGoalShots: 9,
ShotsMissedAuto: 0, UpperGoalAuto: 0, LowerGoalAuto: 0,
PlayedDefense: 0, Climbing: 0,
CollectedBy: "rupert",
},
Stats{
TeamNumber: 777, MatchNumber: 7,
- ShotsMissed: 5, UpperGoalShots: 7, LowerGoalShots: 12,
+ StartingQuadrant: 4,
+ AutoBallPickedUp: [5]bool{false, true, true, true, false},
+ ShotsMissed: 5, UpperGoalShots: 7, LowerGoalShots: 12,
ShotsMissedAuto: 0, UpperGoalAuto: 4, LowerGoalAuto: 0,
PlayedDefense: 0, Climbing: 0,
CollectedBy: "felix",
},
Stats{
TeamNumber: 1000, MatchNumber: 7,
- ShotsMissed: 12, UpperGoalShots: 6, LowerGoalShots: 10,
+ StartingQuadrant: 1,
+ AutoBallPickedUp: [5]bool{false, false, false, false, false},
+ ShotsMissed: 12, UpperGoalShots: 6, LowerGoalShots: 10,
ShotsMissedAuto: 0, UpperGoalAuto: 7, LowerGoalAuto: 0,
PlayedDefense: 0, Climbing: 0,
CollectedBy: "thea",
},
Stats{
TeamNumber: 4321, MatchNumber: 7,
- ShotsMissed: 14, UpperGoalShots: 12, LowerGoalShots: 3,
+ StartingQuadrant: 2,
+ AutoBallPickedUp: [5]bool{true, false, false, false, false},
+ ShotsMissed: 14, UpperGoalShots: 12, LowerGoalShots: 3,
ShotsMissedAuto: 0, UpperGoalAuto: 7, LowerGoalAuto: 0,
PlayedDefense: 0, Climbing: 0,
CollectedBy: "amy",
},
Stats{
TeamNumber: 1234, MatchNumber: 7,
- ShotsMissed: 3, UpperGoalShots: 4, LowerGoalShots: 0,
+ StartingQuadrant: 3,
+ AutoBallPickedUp: [5]bool{false, false, false, false, true},
+ ShotsMissed: 3, UpperGoalShots: 4, LowerGoalShots: 0,
ShotsMissedAuto: 0, UpperGoalAuto: 9, LowerGoalAuto: 0,
PlayedDefense: 0, Climbing: 0,
CollectedBy: "beth",
@@ -195,36 +207,48 @@
testDatabase := []Stats{
Stats{
TeamNumber: 1235, MatchNumber: 94,
- ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2,
+ StartingQuadrant: 1,
+ AutoBallPickedUp: [5]bool{false, false, false, false, false},
+ ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2,
ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2,
PlayedDefense: 2, Climbing: 2},
Stats{
TeamNumber: 1234, MatchNumber: 94,
- ShotsMissed: 4, UpperGoalShots: 4, LowerGoalShots: 4,
+ StartingQuadrant: 2,
+ AutoBallPickedUp: [5]bool{false, false, false, false, true},
+ ShotsMissed: 4, UpperGoalShots: 4, LowerGoalShots: 4,
ShotsMissedAuto: 4, UpperGoalAuto: 4, LowerGoalAuto: 4,
PlayedDefense: 7, Climbing: 2,
},
Stats{
TeamNumber: 1233, MatchNumber: 94,
- ShotsMissed: 3, UpperGoalShots: 3, LowerGoalShots: 3,
+ StartingQuadrant: 3,
+ AutoBallPickedUp: [5]bool{false, false, false, false, false},
+ ShotsMissed: 3, UpperGoalShots: 3, LowerGoalShots: 3,
ShotsMissedAuto: 3, UpperGoalAuto: 3, LowerGoalAuto: 3,
PlayedDefense: 3, Climbing: 3,
},
Stats{
TeamNumber: 1232, MatchNumber: 94,
- ShotsMissed: 5, UpperGoalShots: 5, LowerGoalShots: 5,
+ StartingQuadrant: 2,
+ AutoBallPickedUp: [5]bool{true, false, false, false, true},
+ ShotsMissed: 5, UpperGoalShots: 5, LowerGoalShots: 5,
ShotsMissedAuto: 5, UpperGoalAuto: 5, LowerGoalAuto: 5,
PlayedDefense: 7, Climbing: 1,
},
Stats{
TeamNumber: 1231, MatchNumber: 94,
- ShotsMissed: 6, UpperGoalShots: 6, LowerGoalShots: 6,
+ StartingQuadrant: 3,
+ AutoBallPickedUp: [5]bool{false, false, true, false, false},
+ ShotsMissed: 6, UpperGoalShots: 6, LowerGoalShots: 6,
ShotsMissedAuto: 6, UpperGoalAuto: 6, LowerGoalAuto: 6,
PlayedDefense: 7, Climbing: 1,
},
Stats{
TeamNumber: 1239, MatchNumber: 94,
- ShotsMissed: 7, UpperGoalShots: 7, LowerGoalShots: 7,
+ StartingQuadrant: 4,
+ AutoBallPickedUp: [5]bool{false, true, true, false, false},
+ ShotsMissed: 7, UpperGoalShots: 7, LowerGoalShots: 7,
ShotsMissedAuto: 7, UpperGoalAuto: 7, LowerGoalAuto: 3,
PlayedDefense: 7, Climbing: 1,
},
@@ -237,13 +261,15 @@
for i := 0; i < len(testDatabase); i++ {
err = fixture.db.AddToStats(testDatabase[i])
- check(t, err, fmt.Sprint("Failed to add stats", i))
+ check(t, err, fmt.Sprint("Failed to add stats ", i))
}
correct := []Stats{
Stats{
TeamNumber: 1235, MatchNumber: 94,
- ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2,
+ StartingQuadrant: 1,
+ AutoBallPickedUp: [5]bool{false, false, false, false, false},
+ ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2,
ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2,
PlayedDefense: 2, Climbing: 2,
},
@@ -309,37 +335,48 @@
correct := []Stats{
Stats{
TeamNumber: 1235, MatchNumber: 94,
- ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2,
+ StartingQuadrant: 1,
+ AutoBallPickedUp: [5]bool{false, false, false, false, false},
+ ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2,
ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2,
- PlayedDefense: 2, Climbing: 2,
- },
+ PlayedDefense: 2, Climbing: 2},
Stats{
TeamNumber: 1236, MatchNumber: 94,
- ShotsMissed: 4, UpperGoalShots: 4, LowerGoalShots: 4,
+ StartingQuadrant: 2,
+ AutoBallPickedUp: [5]bool{false, false, false, false, true},
+ ShotsMissed: 4, UpperGoalShots: 4, LowerGoalShots: 4,
ShotsMissedAuto: 4, UpperGoalAuto: 4, LowerGoalAuto: 4,
PlayedDefense: 7, Climbing: 2,
},
Stats{
TeamNumber: 1237, MatchNumber: 94,
- ShotsMissed: 3, UpperGoalShots: 3, LowerGoalShots: 3,
+ StartingQuadrant: 3,
+ AutoBallPickedUp: [5]bool{false, false, false, false, false},
+ ShotsMissed: 3, UpperGoalShots: 3, LowerGoalShots: 3,
ShotsMissedAuto: 3, UpperGoalAuto: 3, LowerGoalAuto: 3,
PlayedDefense: 3, Climbing: 3,
},
Stats{
TeamNumber: 1238, MatchNumber: 94,
- ShotsMissed: 5, UpperGoalShots: 5, LowerGoalShots: 5,
+ StartingQuadrant: 2,
+ AutoBallPickedUp: [5]bool{true, false, false, false, true},
+ ShotsMissed: 5, UpperGoalShots: 5, LowerGoalShots: 5,
ShotsMissedAuto: 5, UpperGoalAuto: 5, LowerGoalAuto: 5,
PlayedDefense: 7, Climbing: 1,
},
Stats{
TeamNumber: 1239, MatchNumber: 94,
- ShotsMissed: 6, UpperGoalShots: 6, LowerGoalShots: 6,
+ StartingQuadrant: 3,
+ AutoBallPickedUp: [5]bool{false, false, true, false, false},
+ ShotsMissed: 6, UpperGoalShots: 6, LowerGoalShots: 6,
ShotsMissedAuto: 6, UpperGoalAuto: 6, LowerGoalAuto: 6,
PlayedDefense: 7, Climbing: 1,
},
Stats{
TeamNumber: 1233, MatchNumber: 94,
- ShotsMissed: 7, UpperGoalShots: 7, LowerGoalShots: 7,
+ StartingQuadrant: 4,
+ AutoBallPickedUp: [5]bool{false, true, true, false, false},
+ ShotsMissed: 7, UpperGoalShots: 7, LowerGoalShots: 7,
ShotsMissedAuto: 7, UpperGoalAuto: 7, LowerGoalAuto: 3,
PlayedDefense: 7, Climbing: 1,
},
@@ -352,7 +389,7 @@
for i := 0; i < len(correct); i++ {
err = fixture.db.AddToStats(correct[i])
- check(t, err, fmt.Sprint("Failed to add stats", i))
+ check(t, err, fmt.Sprint("Failed to add stats ", i))
}
got, err := fixture.db.ReturnStats()
diff --git a/scouting/webserver/requests/debug/cli/cli_test.py b/scouting/webserver/requests/debug/cli/cli_test.py
index b20703b..8bebc69 100644
--- a/scouting/webserver/requests/debug/cli/cli_test.py
+++ b/scouting/webserver/requests/debug/cli/cli_test.py
@@ -62,6 +62,12 @@
json_path = write_json_request({
"team": 100,
"match": 1,
+ "starting_quadrant": 3,
+ "auto_ball_1": True,
+ "auto_ball_2": False,
+ "auto_ball_3": False,
+ "auto_ball_4": False,
+ "auto_ball_5": True,
"missed_shots_auto": 10,
"upper_goal_auto": 11,
"lower_goal_auto": 12,
@@ -92,7 +98,13 @@
LowerGoalTele: (int32) 15,
DefenseRating: (int32) 3,
Climbing: (int32) 1,
- CollectedBy: (string) (len=9) "debug_cli"
+ CollectedBy: (string) (len=9) "debug_cli",
+ AutoBall1: (bool) true,
+ AutoBall2: (bool) false,
+ AutoBall3: (bool) false,
+ AutoBall4: (bool) false,
+ AutoBall5: (bool) true,
+ StartingQuadrant: (int32) 3
}"""), stdout)
def test_request_all_matches(self):
diff --git a/scouting/webserver/requests/messages/request_data_scouting_response.fbs b/scouting/webserver/requests/messages/request_data_scouting_response.fbs
index 5703a07..7d91cb7 100644
--- a/scouting/webserver/requests/messages/request_data_scouting_response.fbs
+++ b/scouting/webserver/requests/messages/request_data_scouting_response.fbs
@@ -3,6 +3,7 @@
table Stats {
team:int (id: 0);
match:int (id: 1);
+
missed_shots_auto:int (id: 2);
upper_goal_auto:int (id:3);
lower_goal_auto:int (id:4);
@@ -12,6 +13,15 @@
defense_rating:int (id:8);
climbing:int (id:9);
collected_by:string (id:10);
+
+ auto_ball_1:bool (id:11);
+ auto_ball_2:bool (id:12);
+ auto_ball_3:bool (id:13);
+ auto_ball_4:bool (id:14);
+ auto_ball_5:bool (id:15);
+ // The quadrant that the robot starts in for autonomous mode.
+ // Valid values are 1 through 4.
+ starting_quadrant: int (id:16);
}
table RequestDataScoutingResponse {
diff --git a/scouting/webserver/requests/requests.go b/scouting/webserver/requests/requests.go
index 5a469b5..13d7396 100644
--- a/scouting/webserver/requests/requests.go
+++ b/scouting/webserver/requests/requests.go
@@ -142,8 +142,13 @@
}
stats := db.Stats{
- TeamNumber: request.Team(),
- MatchNumber: request.Match(),
+ TeamNumber: request.Team(),
+ MatchNumber: request.Match(),
+ StartingQuadrant: request.StartingQuadrant(),
+ AutoBallPickedUp: [5]bool{
+ request.AutoBall1(), request.AutoBall2(), request.AutoBall3(),
+ request.AutoBall4(), request.AutoBall5(),
+ },
ShotsMissedAuto: request.MissedShotsAuto(),
UpperGoalAuto: request.UpperGoalAuto(),
LowerGoalAuto: request.LowerGoalAuto(),
@@ -155,9 +160,17 @@
CollectedBy: username,
}
+ // Do some error checking.
+ if stats.StartingQuadrant < 1 || stats.StartingQuadrant > 4 {
+ respondWithError(w, http.StatusBadRequest, fmt.Sprint(
+ "Invalid starting_quadrant field value of ", stats.StartingQuadrant))
+ return
+ }
+
err = handler.db.AddToStats(stats)
if err != nil {
respondWithError(w, http.StatusInternalServerError, fmt.Sprint("Failed to submit datascouting data: ", err))
+ return
}
builder := flatbuffers.NewBuilder(50 * 1024)
@@ -316,17 +329,23 @@
var response RequestDataScoutingResponseT
for _, stat := range stats {
response.StatsList = append(response.StatsList, &request_data_scouting_response.StatsT{
- Team: stat.TeamNumber,
- Match: stat.MatchNumber,
- MissedShotsAuto: stat.ShotsMissedAuto,
- UpperGoalAuto: stat.UpperGoalAuto,
- LowerGoalAuto: stat.LowerGoalAuto,
- MissedShotsTele: stat.ShotsMissed,
- UpperGoalTele: stat.UpperGoalShots,
- LowerGoalTele: stat.LowerGoalShots,
- DefenseRating: stat.PlayedDefense,
- Climbing: stat.Climbing,
- CollectedBy: stat.CollectedBy,
+ Team: stat.TeamNumber,
+ Match: stat.MatchNumber,
+ StartingQuadrant: stat.StartingQuadrant,
+ AutoBall1: stat.AutoBallPickedUp[0],
+ AutoBall2: stat.AutoBallPickedUp[1],
+ AutoBall3: stat.AutoBallPickedUp[2],
+ AutoBall4: stat.AutoBallPickedUp[3],
+ AutoBall5: stat.AutoBallPickedUp[4],
+ MissedShotsAuto: stat.ShotsMissedAuto,
+ UpperGoalAuto: stat.UpperGoalAuto,
+ LowerGoalAuto: stat.LowerGoalAuto,
+ MissedShotsTele: stat.ShotsMissed,
+ UpperGoalTele: stat.UpperGoalShots,
+ LowerGoalTele: stat.LowerGoalShots,
+ DefenseRating: stat.PlayedDefense,
+ Climbing: stat.Climbing,
+ CollectedBy: stat.CollectedBy,
})
}
diff --git a/scouting/webserver/requests/requests_test.go b/scouting/webserver/requests/requests_test.go
index c716b44..12d918b 100644
--- a/scouting/webserver/requests/requests_test.go
+++ b/scouting/webserver/requests/requests_test.go
@@ -82,16 +82,22 @@
builder := flatbuffers.NewBuilder(1024)
builder.Finish((&submit_data_scouting.SubmitDataScoutingT{
- Team: 971,
- Match: 1,
- MissedShotsAuto: 9971,
- UpperGoalAuto: 9971,
- LowerGoalAuto: 9971,
- MissedShotsTele: 9971,
- UpperGoalTele: 9971,
- LowerGoalTele: 9971,
- DefenseRating: 9971,
- Climbing: 9971,
+ Team: 971,
+ Match: 1,
+ StartingQuadrant: 2,
+ AutoBall1: true,
+ AutoBall2: false,
+ AutoBall3: false,
+ AutoBall4: false,
+ AutoBall5: false,
+ MissedShotsAuto: 9971,
+ UpperGoalAuto: 9971,
+ LowerGoalAuto: 9971,
+ MissedShotsTele: 9971,
+ UpperGoalTele: 9971,
+ LowerGoalTele: 9971,
+ DefenseRating: 9971,
+ Climbing: 9971,
}).Pack(builder))
response, err := debug.SubmitDataScouting("http://localhost:8080", builder.FinishedBytes())
@@ -221,14 +227,18 @@
stats: []db.Stats{
{
TeamNumber: 971, MatchNumber: 1,
- ShotsMissed: 1, UpperGoalShots: 2, LowerGoalShots: 3,
+ StartingQuadrant: 1,
+ AutoBallPickedUp: [5]bool{true, false, false, false, true},
+ ShotsMissed: 1, UpperGoalShots: 2, LowerGoalShots: 3,
ShotsMissedAuto: 4, UpperGoalAuto: 5, LowerGoalAuto: 6,
PlayedDefense: 7, Climbing: 8,
CollectedBy: "john",
},
{
TeamNumber: 972, MatchNumber: 1,
- ShotsMissed: 2, UpperGoalShots: 3, LowerGoalShots: 4,
+ StartingQuadrant: 2,
+ AutoBallPickedUp: [5]bool{false, false, true, false, false},
+ ShotsMissed: 2, UpperGoalShots: 3, LowerGoalShots: 4,
ShotsMissedAuto: 5, UpperGoalAuto: 6, LowerGoalAuto: 7,
PlayedDefense: 8, Climbing: 9,
CollectedBy: "andrea",
@@ -255,12 +265,18 @@
// MissedShotsTele, UpperGoalTele, LowerGoalTele,
// DefenseRating, Climbing,
// CollectedBy,
+ // AutoBall1, AutoBall2, AutoBall3,
+ // AutoBall4, AutoBall5,
+ // StartingQuadrant,
{
971, 1,
4, 5, 6,
1, 2, 3,
7, 8,
"john",
+ true, false, false,
+ false, true,
+ 1,
},
{
972, 1,
@@ -268,6 +284,9 @@
2, 3, 4,
8, 9,
"andrea",
+ false, false, true,
+ false, false,
+ 2,
},
},
}