+#include "common-states.h"
+#include "robot.h"
+#include "eb2010misc.h"
+
+static FSM_STATE_DECL(pick_our_oranges);
+
+FSM_STATE(start_six_oranges)
+{
+ switch (FSM_EVENT) {
+ case EV_ENTRY:
+ start_entry();
+#ifdef COMPETITION
+ printf("waiting for start\n");
+ FSM_TIMER(1000);
+ break;
+#endif
+ case EV_START:
+ start_go();
+ FSM_TRANSITION(pick_our_oranges);
+ break;
+ case EV_TIMER:
+ FSM_TIMER(1000);
+ start_timer();
+ break;
+ case EV_EXIT:
+ start_exit();
+ break;
+ case EV_SWITCH_STRATEGY:
+ FSM_TRANSITION(start_12_oranges);
+ break;
+ default:;
+ }
+}
+
+
+#undef FSM_STATE_VISIBILITY
+#define FSM_STATE_VISIBILITY static
+
+FSM_STATE_DECL(pick_rest_of_our_oranges);
+FSM_STATE_DECL(unload_oranges);
+FSM_STATE_DECL(pick_opp_oranges);
+FSM_STATE_DECL(opp_corns);
+
+FSM_STATE(pick_our_oranges)
+{
+ switch (FSM_EVENT) {
+ case EV_ENTRY: SUBFSM_TRANSITION(approach_the_slope, new slope_approach_style(MINE, NEAR_PLAYGROUND_BOUNDARY)); break;
+ case EV_RETURN: FSM_TRANSITION(pick_rest_of_our_oranges); break;
+ default: break;
+ }
+}
+
+FSM_STATE(pick_rest_of_our_oranges)
+{
+ switch (FSM_EVENT) {
+ case EV_ENTRY: SUBFSM_TRANSITION(approach_the_slope, new slope_approach_style(MINE, NEAR_PLAYGROUND_CENTER)); break;
+ case EV_RETURN: FSM_TRANSITION(unload_oranges); break;
+ default: break;
+ }
+}
+
+FSM_STATE(unload_oranges)
+{
+ switch (FSM_EVENT) {
+ case EV_ENTRY: SUBFSM_TRANSITION(to_cntainer_and_unld, NULL); break;
+ case EV_RETURN: FSM_TRANSITION(opp_corns); break;
+ default: break;
+ }
+}
+
+FSM_STATE(opp_corns)
+{
+ switch (FSM_EVENT) {
+ case EV_ENTRY: SUBFSM_TRANSITION(approach_next_corn, NULL); break;
+ case EV_RETURN: FSM_TRANSITION(opp_corns); break;
+ default: break;
+ }
+}