Scouting: Update dead screen and dropped

Revive and undo should be separate because we need to make a distinction between a scouter accidentally pressing the dead button vs the robot dying and then reviving. Scouters should also be able to end the game from the death screen.
An N/A radio button was added for robot position in endgame to allow scouters to unselect Park, Harmony, etc.
Previous implementation of dropped was based on if there are two picked up actions in a row. Since scouters currently press undo if the robot drops the note, this will never happen. A separate dropped button fixes this.

Signed-off-by: Emily Markova <emily.markova@gmail.com>
Change-Id: Ice943c56b0efa93d96cbcc432a771cf3cad10d9e
diff --git a/scouting/webserver/requests/requests.go b/scouting/webserver/requests/requests.go
index a9919af..3cd14a7 100644
--- a/scouting/webserver/requests/requests.go
+++ b/scouting/webserver/requests/requests.go
@@ -452,7 +452,7 @@
 		PreScouting: submit2024Actions.PreScouting(), TeamNumber: string(submit2024Actions.TeamNumber()), MatchNumber: submit2024Actions.MatchNumber(), SetNumber: submit2024Actions.SetNumber(), CompLevel: string(submit2024Actions.CompLevel()),
 		StartingQuadrant: 0, SpeakerAuto: 0, AmpAuto: 0, NotesDroppedAuto: 0, MobilityAuto: false,
 		Speaker: 0, Amp: 0, SpeakerAmplified: 0, AmpAmplified: 0, NotesDropped: 0, Penalties: 0,
-		TrapNote: false, Spotlight: false, AvgCycle: 0, Park: false, OnStage: false, Harmony: false, CollectedBy: "",
+		TrapNote: false, Spotlight: false, AvgCycle: 0, Park: false, OnStage: false, Harmony: false, RobotDied: false, CollectedBy: "",
 	}
 	// Loop over all actions.
 	for i := 0; i < submit2024Actions.ActionsListLength(); i++ {
@@ -481,19 +481,15 @@
 			penaltyAction.Init(actionTable.Bytes, actionTable.Pos)
 			stat.Penalties += penaltyAction.Penalties()
 
+		} else if action_type == submit_2024_actions.ActionTypeRobotDeathAction {
+			var robotDeathAction submit_2024_actions.RobotDeathAction
+			robotDeathAction.Init(actionTable.Bytes, actionTable.Pos)
+			stat.RobotDied = true
+
 		} else if action_type == submit_2024_actions.ActionTypePickupNoteAction {
 			var pick_up_action submit_2024_actions.PickupNoteAction
 			pick_up_action.Init(actionTable.Bytes, actionTable.Pos)
-			if picked_up == true {
-				auto := pick_up_action.Auto()
-				if auto == false {
-					stat.NotesDropped += 1
-				} else {
-					stat.NotesDroppedAuto += 1
-				}
-			} else {
-				picked_up = true
-			}
+			picked_up = true
 		} else if action_type == submit_2024_actions.ActionTypePlaceNoteAction {
 			var place_action submit_2024_actions.PlaceNoteAction
 			place_action.Init(actionTable.Bytes, actionTable.Pos)
@@ -514,6 +510,10 @@
 				stat.SpeakerAuto += 1
 			} else if score_type == submit_2024_actions.ScoreTypekSPEAKER_AMPLIFIED && !auto {
 				stat.SpeakerAmplified += 1
+			} else if score_type == submit_2024_actions.ScoreTypekDROPPED && auto {
+				stat.NotesDroppedAuto += 1
+			} else if score_type == submit_2024_actions.ScoreTypekDROPPED && !auto {
+				stat.NotesDropped += 1
 			} else {
 				return db.Stats2024{}, errors.New(fmt.Sprintf("Got unknown ObjectType/ScoreLevel/Auto combination"))
 			}
@@ -595,6 +595,7 @@
 			Park:             stat.Park,
 			OnStage:          stat.OnStage,
 			Harmony:          stat.Harmony,
+			RobotDied:        stat.RobotDied,
 			CollectedBy:      stat.CollectedBy,
 		})
 	}