summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--digital/io-hub/src/guybrush/strat.c12
-rw-r--r--digital/io-hub/src/guybrush/strat.h4
-rw-r--r--digital/io-hub/src/guybrush/top.c6
3 files changed, 19 insertions, 3 deletions
diff --git a/digital/io-hub/src/guybrush/strat.c b/digital/io-hub/src/guybrush/strat.c
index 257e9b5a..d4742d4c 100644
--- a/digital/io-hub/src/guybrush/strat.c
+++ b/digital/io-hub/src/guybrush/strat.c
@@ -240,3 +240,15 @@ strat_failure (void)
}
}
+void
+strat_giveup (void)
+{
+ switch (strat.last_decision)
+ {
+ default:
+ strat.place[strat.last_place].valid = 0;
+ break;
+ case STRAT_DECISION_UNLOAD:
+ assert (0);
+ }
+}
diff --git a/digital/io-hub/src/guybrush/strat.h b/digital/io-hub/src/guybrush/strat.h
index 36bed598..7dd24e1d 100644
--- a/digital/io-hub/src/guybrush/strat.h
+++ b/digital/io-hub/src/guybrush/strat.h
@@ -57,4 +57,8 @@ strat_success (void);
void
strat_failure (void);
+/** Report a failure of last decision, never try again. */
+void
+strat_giveup (void);
+
#endif /* strat_h */
diff --git a/digital/io-hub/src/guybrush/top.c b/digital/io-hub/src/guybrush/top.c
index 8f80e174..75d157d9 100644
--- a/digital/io-hub/src/guybrush/top.c
+++ b/digital/io-hub/src/guybrush/top.c
@@ -351,7 +351,7 @@ FSM_TRANS (TOP_TOTEM_GOING, move_failure, TOP_DECISION)
FSM_TRANS (TOP_TOTEM_APPROACHING, robot_move_failure,
TOP_TOTEM_ERROR_GOING_BACK)
{
- strat_failure ();
+ strat_giveup ();
move_start_noangle (top.decision_pos, ASSERV_BACKWARD, 0);
return FSM_NEXT (TOP_TOTEM_APPROACHING, robot_move_failure);
}
@@ -359,14 +359,14 @@ FSM_TRANS (TOP_TOTEM_APPROACHING, robot_move_failure,
FSM_TRANS (TOP_TOTEM_PUSHING, robot_move_failure,
TOP_TOTEM_ERROR_GOING_BACK)
{
- strat_failure ();
+ strat_giveup ();
move_start_noangle (top.decision_pos, ASSERV_BACKWARD, 0);
return FSM_NEXT (TOP_TOTEM_PUSHING, robot_move_failure);
}
FSM_TRANS (TOP_TOTEM_GOING_BACK, move_failure, TOP_TOTEM_ERROR_RELEASE)
{
- strat_failure ();
+ strat_giveup ();
FSM_HANDLE (AI, stop_tree_approach);
return FSM_NEXT (TOP_TOTEM_GOING_BACK, move_failure);
}