Add target selection based on buttons + mode

This makes ball vs hatch mode discriminate among targets on the rocket,
and adds buttons to control which target on the cargo ship we go for.

Also, add new color to indicate that we have a target (purple flashing).

Change-Id: Ifc734c8168a1814511dea95abc361eb13383f597
diff --git a/y2019/control_loops/drivetrain/camera.h b/y2019/control_loops/drivetrain/camera.h
index 73079c9..e21bf87 100644
--- a/y2019/control_loops/drivetrain/camera.h
+++ b/y2019/control_loops/drivetrain/camera.h
@@ -48,9 +48,24 @@
     // Spots for both (cargo ship, human loading).
     kBoth,
   };
+  // Which target this is within a given field quadrant:
+  enum class TargetType {
+    kHPSlot,
+    kFaceCargoBay,
+    kNearSideCargoBay,
+    kMidSideCargoBay,
+    kFarSideCargoBay,
+    kNearRocket,
+    kFarRocket,
+    kRocketPortal,
+  };
   TypedTarget(const Pose &pose, double radius = 0,
+              TargetType target_type = TargetType::kHPSlot,
               GoalType goal_type = GoalType::kBoth)
-      : pose_(pose), radius_(radius), goal_type_(goal_type) {}
+      : pose_(pose),
+        radius_(radius),
+        target_type_(target_type),
+        goal_type_(goal_type) {}
   TypedTarget() {}
   Pose pose() const { return pose_; }
   Pose *mutable_pose() { return &pose_; }
@@ -60,6 +75,8 @@
   double radius() const { return radius_; }
   GoalType goal_type() const { return goal_type_; }
   void set_goal_type(GoalType goal_type) { goal_type_ = goal_type; }
+  TargetType target_type() const { return target_type_; }
+  void set_target_type(TargetType target_type) { target_type_ = target_type; }
 
   // Get a list of points for plotting. These points should be plotted on
   // an x/y plane in the global frame with lines connecting the points.
@@ -89,6 +106,7 @@
   // TODO(james): We may actually want a non-zero (possibly negative?) number
   // here for balls.
   double radius_ = 0.0;
+  TargetType target_type_ = TargetType::kHPSlot;
   GoalType goal_type_ = GoalType::kBoth;
 };  // class TypedTarget