summaryrefslogtreecommitdiff
path: root/digital/io-hub/src/guybrush/strat.c
diff options
context:
space:
mode:
authorNicolas Schodet2012-05-04 02:24:26 +0200
committerNicolas Schodet2012-05-07 16:31:46 +0200
commitf78d43b5767db1ef7e39c871202851fc5d5360c9 (patch)
treed7c8cb427b7ec15f138f21cf6f1a09ee86ad2efc /digital/io-hub/src/guybrush/strat.c
parent45af370d9be47e5d180ed172e780a36924519987 (diff)
digital/io-hub/src/guybrush: first unload implementation
Diffstat (limited to 'digital/io-hub/src/guybrush/strat.c')
-rw-r--r--digital/io-hub/src/guybrush/strat.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/digital/io-hub/src/guybrush/strat.c b/digital/io-hub/src/guybrush/strat.c
index fa1908e5..6ed38d01 100644
--- a/digital/io-hub/src/guybrush/strat.c
+++ b/digital/io-hub/src/guybrush/strat.c
@@ -79,6 +79,8 @@ struct strat_t
uint8_t last_decision;
/** Place of last decision. */
uint8_t last_place;
+ /** Robot content estimation. */
+ uint8_t load;
/** Places information. */
struct strat_place_dyn_t place[STRAT_PLACE_NB];
};
@@ -97,6 +99,13 @@ uint8_t
strat_decision (vect_t *pos)
{
uint8_t i;
+ if (strat.load > 1)
+ {
+ strat.last_decision = STRAT_DECISION_UNLOAD;
+ pos->x = PG_X (BOT_SIZE_RADIUS + 30);
+ pos->y = PG_Y (PG_LENGTH / 2);
+ return strat.last_decision;
+ }
for (i = 0; i < STRAT_PLACE_NB; i++)
{
if (strat.place[i].valid)
@@ -114,7 +123,17 @@ strat_decision (vect_t *pos)
void
strat_success (void)
{
- assert (strat.last_decision != (uint8_t) -1);
- strat.place[strat.last_place].valid = 0;
+ switch (strat.last_decision)
+ {
+ case STRAT_DECISION_TOTEM:
+ strat.place[strat.last_place].valid = 0;
+ strat.load++;
+ break;
+ case STRAT_DECISION_UNLOAD:
+ strat.load = 0;
+ break;
+ default:
+ assert (0);
+ }
}