]> rtime.felk.cvut.cz Git - eurobot/public.git/blob - src/robofsm/strategy_six_oranges.cc
robofsm: add jerky motion when unloading oranges
[eurobot/public.git] / src / robofsm / strategy_six_oranges.cc
1 #include "common-states.h"
2 #include "robot.h"
3 #include "eb2010misc.h"
4
5 static FSM_STATE_DECL(pick_our_oranges);
6
7 FSM_STATE(start_six_oranges)
8 {
9         switch (FSM_EVENT) {
10                 case EV_ENTRY:
11                         start_entry();
12 #ifdef COMPETITION
13                         printf("waiting for start\n");
14                         FSM_TIMER(1000);
15                         break;
16 #endif
17                 case EV_START:
18                         start_go();
19                         FSM_TRANSITION(pick_our_oranges);
20                         break;
21                 case EV_TIMER:
22                         FSM_TIMER(1000);
23                         start_timer();
24                         break;
25                 case EV_EXIT:
26                         start_exit();
27                         break;
28                 case EV_SWITCH_STRATEGY:
29                         FSM_TRANSITION(start_12_oranges);
30                         break;
31                 default:;
32         }
33 }
34
35
36 #undef FSM_STATE_VISIBILITY
37 #define FSM_STATE_VISIBILITY static
38
39 FSM_STATE_DECL(pick_rest_of_our_oranges);
40 FSM_STATE_DECL(unload_oranges);
41 FSM_STATE_DECL(opp_corns);
42
43 FSM_STATE(pick_our_oranges)
44 {
45         switch (FSM_EVENT) {
46         case EV_ENTRY:  SUBFSM_TRANSITION(approach_the_slope, new slope_approach_style(MINE, NEAR_PLAYGROUND_BOUNDARY)); break;
47         case EV_RETURN: FSM_TRANSITION(pick_rest_of_our_oranges); break;
48         default: break;
49         }
50 }
51
52 FSM_STATE(pick_rest_of_our_oranges)
53 {
54         switch (FSM_EVENT) {
55         case EV_ENTRY:  SUBFSM_TRANSITION(approach_the_slope, new slope_approach_style(MINE, NEAR_PLAYGROUND_CENTER)); break;
56         case EV_RETURN: FSM_TRANSITION(unload_oranges); break;
57         default: break;
58         }
59 }
60
61 FSM_STATE(unload_oranges)
62 {
63         switch (FSM_EVENT) {
64         case EV_ENTRY:  SUBFSM_TRANSITION(to_cntainer_and_unld, NULL); break;
65         case EV_RETURN: FSM_TRANSITION(opp_corns); break;
66         default: break;
67         }
68 }
69
70 FSM_STATE(opp_corns)
71 {
72         switch (FSM_EVENT) {
73         case EV_ENTRY:  SUBFSM_TRANSITION(approach_next_corn, NULL); break;
74         case EV_RETURN: FSM_TRANSITION(opp_corns); break;
75         default: break;
76         }
77 }