Convert actions to event loops

The logic gets significantly simpler due to Watchers.  But we also get
to port all the users over as well.

Change-Id: Ib4e75951e65f7431acc6c1548b7f1d20da3da295
diff --git a/frc971/autonomous/auto.q b/frc971/autonomous/auto.q
index b72688e..a72514c 100644
--- a/frc971/autonomous/auto.q
+++ b/frc971/autonomous/auto.q
@@ -32,5 +32,3 @@
   queue Goal goal;
   queue aos.common.actions.Status status;
 };
-
-queue_group AutonomousActionQueueGroup autonomous_action;
diff --git a/frc971/autonomous/base_autonomous_actor.cc b/frc971/autonomous/base_autonomous_actor.cc
index 7d7e12e..40d65c3 100644
--- a/frc971/autonomous/base_autonomous_actor.cc
+++ b/frc971/autonomous/base_autonomous_actor.cc
@@ -21,9 +21,10 @@
 namespace autonomous {
 
 BaseAutonomousActor::BaseAutonomousActor(
-    ::aos::EventLoop *event_loop, AutonomousActionQueueGroup *s,
+    ::aos::EventLoop *event_loop,
     const control_loops::drivetrain::DrivetrainConfig<double> &dt_config)
-    : aos::common::actions::ActorBase<AutonomousActionQueueGroup>(s),
+    : aos::common::actions::ActorBase<AutonomousActionQueueGroup>(
+          event_loop, ".frc971.autonomous.autonomous_action"),
       dt_config_(dt_config),
       initial_drivetrain_({0.0, 0.0}),
       target_selector_hint_sender_(
@@ -500,11 +501,5 @@
   }
 }
 
-::std::unique_ptr<AutonomousAction> MakeAutonomousAction(
-    const AutonomousActionParams &params) {
-  return ::std::unique_ptr<AutonomousAction>(
-      new AutonomousAction(&autonomous_action, params));
-}
-
 }  // namespace autonomous
 }  // namespace frc971
diff --git a/frc971/autonomous/base_autonomous_actor.h b/frc971/autonomous/base_autonomous_actor.h
index 7636486..263ce73 100644
--- a/frc971/autonomous/base_autonomous_actor.h
+++ b/frc971/autonomous/base_autonomous_actor.h
@@ -17,10 +17,17 @@
 class BaseAutonomousActor
     : public ::aos::common::actions::ActorBase<AutonomousActionQueueGroup> {
  public:
+  typedef ::aos::common::actions::TypedActionFactory<AutonomousActionQueueGroup>
+      Factory;
+
   explicit BaseAutonomousActor(
-      ::aos::EventLoop *event_loop, AutonomousActionQueueGroup *s,
+      ::aos::EventLoop *event_loop,
       const control_loops::drivetrain::DrivetrainConfig<double> &dt_config);
 
+  static Factory MakeFactory(::aos::EventLoop *event_loop) {
+    return Factory(event_loop, ".frc971.autonomous.autonomous_action");
+  }
+
  protected:
   class SplineHandle {
    public:
@@ -119,13 +126,6 @@
   int32_t goal_spline_handle_ = 0;
 };
 
-using AutonomousAction =
-    ::aos::common::actions::TypedAction<AutonomousActionQueueGroup>;
-
-// Makes a new AutonomousActor action.
-::std::unique_ptr<AutonomousAction> MakeAutonomousAction(
-    const AutonomousActionParams &params);
-
 }  // namespace autonomous
 }  // namespace frc971