Scouting: Track mobility

Signed-off-by: Filip Kujawa <filip.j.kujawa@gmail.com>
Change-Id: Ie8f9521116887eef574ebd13e20ca837f009825e
diff --git a/scouting/webserver/requests/messages/request_2023_data_scouting_response.fbs b/scouting/webserver/requests/messages/request_2023_data_scouting_response.fbs
index 341b012..e532ffe 100644
--- a/scouting/webserver/requests/messages/request_2023_data_scouting_response.fbs
+++ b/scouting/webserver/requests/messages/request_2023_data_scouting_response.fbs
@@ -27,6 +27,8 @@
   supercharged_pieces:int (id:29);
   // Time in nanoseconds.
   avg_cycle: int64 (id:19);
+  // Did the robot leave its community during auto.
+  mobility: bool (id:30);
   docked_auto: bool (id:20);
   engaged_auto: bool (id:23);
   balance_attempt_auto: bool (id:27);
@@ -41,4 +43,4 @@
     stats_list:[Stats2023] (id:0);
 }
 
-root_type Request2023DataScoutingResponse;
\ No newline at end of file
+root_type Request2023DataScoutingResponse;
diff --git a/scouting/webserver/requests/messages/submit_actions.fbs b/scouting/webserver/requests/messages/submit_actions.fbs
index d269788..a0f7913 100644
--- a/scouting/webserver/requests/messages/submit_actions.fbs
+++ b/scouting/webserver/requests/messages/submit_actions.fbs
@@ -16,6 +16,10 @@
     kSupercharged,
 }
 
+table MobilityAction {
+    mobility:bool (id:0);
+}
+
 table AutoBalanceAction {
     docked:bool (id:0);
     engaged:bool (id:1);
@@ -44,6 +48,7 @@
 }
 
 union ActionType {
+    MobilityAction,
     AutoBalanceAction,
     StartMatchAction,
     PickupObjectAction,
diff --git a/scouting/webserver/requests/requests.go b/scouting/webserver/requests/requests.go
index a6ee44c..25bb6b7 100644
--- a/scouting/webserver/requests/requests.go
+++ b/scouting/webserver/requests/requests.go
@@ -397,6 +397,13 @@
 			var startMatchAction submit_actions.StartMatchAction
 			startMatchAction.Init(actionTable.Bytes, actionTable.Pos)
 			stat.StartingQuadrant = startMatchAction.Position()
+		} else if action_type == submit_actions.ActionTypeMobilityAction {
+			var mobilityAction submit_actions.MobilityAction
+			mobilityAction.Init(actionTable.Bytes, actionTable.Pos)
+			if mobilityAction.Mobility() {
+				stat.Mobility = true
+			}
+
 		} else if action_type == submit_actions.ActionTypeAutoBalanceAction {
 			var autoBalanceAction submit_actions.AutoBalanceAction
 			autoBalanceAction.Init(actionTable.Bytes, actionTable.Pos)
@@ -545,6 +552,7 @@
 			ConesDropped:       stat.ConesDropped,
 			SuperchargedPieces: stat.SuperchargedPieces,
 			AvgCycle:           stat.AvgCycle,
+			Mobility:           stat.Mobility,
 			DockedAuto:         stat.DockedAuto,
 			EngagedAuto:        stat.EngagedAuto,
 			BalanceAttemptAuto: stat.BalanceAttemptAuto,
diff --git a/scouting/webserver/requests/requests_test.go b/scouting/webserver/requests/requests_test.go
index b6f09fc..c2bc750 100644
--- a/scouting/webserver/requests/requests_test.go
+++ b/scouting/webserver/requests/requests_test.go
@@ -130,7 +130,7 @@
 				ConesDroppedAuto: 0, LowCubes: 1, MiddleCubes: 1,
 				HighCubes: 2, CubesDropped: 1, LowCones: 1,
 				MiddleCones: 2, HighCones: 0, ConesDropped: 1, SuperchargedPieces: 0,
-				AvgCycle: 34, DockedAuto: true, EngagedAuto: true,
+				AvgCycle: 34, Mobility: false, DockedAuto: true, EngagedAuto: true,
 				BalanceAttemptAuto: false, Docked: false, Engaged: false,
 				BalanceAttempt: false, CollectedBy: "alex",
 			},
@@ -142,7 +142,7 @@
 				ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 0,
 				HighCubes: 1, CubesDropped: 0, LowCones: 0,
 				MiddleCones: 2, HighCones: 1, ConesDropped: 1, SuperchargedPieces: 0,
-				AvgCycle: 53, DockedAuto: true, EngagedAuto: false,
+				AvgCycle: 53, Mobility: true, DockedAuto: true, EngagedAuto: false,
 				BalanceAttemptAuto: false, Docked: false, Engaged: false,
 				BalanceAttempt: true, CollectedBy: "bob",
 			},
@@ -215,7 +215,7 @@
 				ConesDroppedAuto: 0, LowCubes: 1, MiddleCubes: 1,
 				HighCubes: 2, CubesDropped: 1, LowCones: 1,
 				MiddleCones: 2, HighCones: 0, ConesDropped: 1, SuperchargedPieces: 0,
-				AvgCycle: 34, DockedAuto: true, EngagedAuto: false,
+				AvgCycle: 34, Mobility: false, DockedAuto: true, EngagedAuto: false,
 				BalanceAttemptAuto: false, Docked: false, Engaged: false,
 				BalanceAttempt: true, CollectedBy: "isaac",
 			},
@@ -227,7 +227,7 @@
 				ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 0,
 				HighCubes: 1, CubesDropped: 0, LowCones: 0,
 				MiddleCones: 2, HighCones: 1, ConesDropped: 1, SuperchargedPieces: 0,
-				AvgCycle: 53, DockedAuto: false, EngagedAuto: false,
+				AvgCycle: 53, Mobility: false, DockedAuto: false, EngagedAuto: false,
 				BalanceAttemptAuto: true, Docked: false, Engaged: false,
 				BalanceAttempt: true, CollectedBy: "unknown",
 			},
@@ -256,7 +256,7 @@
 				ConesDroppedAuto: 0, LowCubes: 1, MiddleCubes: 1,
 				HighCubes: 2, CubesDropped: 1, LowCones: 1,
 				MiddleCones: 2, HighCones: 0, ConesDropped: 1, SuperchargedPieces: 0,
-				AvgCycle: 34, DockedAuto: true, EngagedAuto: false,
+				AvgCycle: 34, Mobility: false, DockedAuto: true, EngagedAuto: false,
 				BalanceAttemptAuto: false, Docked: false, Engaged: false,
 				BalanceAttempt: true, CollectedBy: "isaac",
 			},
@@ -268,7 +268,7 @@
 				ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 0,
 				HighCubes: 1, CubesDropped: 0, LowCones: 0,
 				MiddleCones: 2, HighCones: 1, ConesDropped: 1, SuperchargedPieces: 0,
-				AvgCycle: 53, DockedAuto: false, EngagedAuto: false,
+				AvgCycle: 53, Mobility: false, DockedAuto: false, EngagedAuto: false,
 				BalanceAttemptAuto: true, Docked: false, Engaged: false,
 				BalanceAttempt: true, CollectedBy: "unknown",
 			},
@@ -336,6 +336,15 @@
 			},
 			{
 				ActionTaken: &submit_actions.ActionTypeT{
+					Type: submit_actions.ActionTypeMobilityAction,
+					Value: &submit_actions.MobilityActionT{
+						Mobility: true,
+					},
+				},
+				Timestamp: 2200,
+			},
+			{
+				ActionTaken: &submit_actions.ActionTypeT{
 					Type: submit_actions.ActionTypeAutoBalanceAction,
 					Value: &submit_actions.AutoBalanceActionT{
 						Docked:         true,
@@ -416,7 +425,7 @@
 		ConesDroppedAuto: 0, LowCubes: 0, MiddleCubes: 0,
 		HighCubes: 0, CubesDropped: 0, LowCones: 0,
 		MiddleCones: 0, HighCones: 1, ConesDropped: 0, SuperchargedPieces: 1,
-		AvgCycle: 950, DockedAuto: true, EngagedAuto: true,
+		AvgCycle: 950, Mobility: true, DockedAuto: true, EngagedAuto: true,
 		BalanceAttemptAuto: false, Docked: true, Engaged: false,
 		BalanceAttempt: true, CollectedBy: "katie",
 	}