]> rtime.felk.cvut.cz Git - eurobot/public.git/commitdiff
robofsm: add forgotten strategy_six_oranges.cc file
authorFilip Jares <filipjares@post.cz>
Wed, 26 May 2010 15:01:03 +0000 (17:01 +0200)
committerFilip Jares <filipjares@post.cz>
Wed, 26 May 2010 15:01:03 +0000 (17:01 +0200)
i forgot it in previous commit

src/robofsm/strategy_six_oranges.cc [new file with mode: 0644]

diff --git a/src/robofsm/strategy_six_oranges.cc b/src/robofsm/strategy_six_oranges.cc
new file mode 100644 (file)
index 0000000..7edbdf3
--- /dev/null
@@ -0,0 +1,88 @@
+#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_opp_corn);
+                       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;
+       /* FIXME: do something more meaningfull the next time */
+       case EV_RETURN: FSM_TRANSITION(pick_opp_oranges); break;
+       default: break;
+       }
+}
+
+FSM_STATE(pick_opp_oranges)
+{
+       switch (FSM_EVENT) {
+       case EV_ENTRY:  SUBFSM_TRANSITION(approach_the_slope, new slope_approach_style(OPPONENTS, NEAR_PLAYGROUND_BOUNDARY)); break;
+       case EV_RETURN: FSM_TRANSITION(unload_oranges); 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;
+       }
+}