From 87494530981ea734cc5b47a9df4bb39d2d75d588 Mon Sep 17 00:00:00 2001 From: Allanis Date: Fri, 14 Mar 2014 19:53:12 +0000 Subject: [PATCH] [Add] Provide reasons for aborting autonavigation. --- src/input.c | 22 +++++++++++----------- src/pilot.c | 4 ++-- src/player.c | 15 ++++++++++----- src/player.h | 2 +- 4 files changed, 24 insertions(+), 19 deletions(-) diff --git a/src/input.c b/src/input.c index 1521365..527c590 100644 --- a/src/input.c +++ b/src/input.c @@ -208,13 +208,13 @@ static void input_key(int keynum, double value, int kabs) { /* Accelerating. */ if(KEY("accel")) { if(kabs) { - player_abortAutonav(); + player_abortAutonav(NULL); player_accel(value); } else { /* Prevent it from getting stuck. */ if(value == KEY_PRESS) { - player_abortAutonav(); + player_abortAutonav(NULL); player_accel(1.); } else if(value == KEY_RELEASE) player_accelOver(); @@ -238,7 +238,7 @@ static void input_key(int keynum, double value, int kabs) { else if(KEY("left")) { /* Set flags for facing correction. */ if(value == KEY_PRESS) { - player_abortAutonav(); + player_abortAutonav(NULL); player_setFlag(PLAYER_TURN_LEFT); } else if(value == KEY_RELEASE) { player_rmFlag(PLAYER_TURN_LEFT); } @@ -251,7 +251,7 @@ static void input_key(int keynum, double value, int kabs) { else if(KEY("right")) { /* Set flags for facing correction. */ if(value == KEY_PRESS) { - player_abortAutonav(); + player_abortAutonav(NULL); player_setFlag(PLAYER_TURN_RIGHT); } else if(value == KEY_RELEASE) { player_rmFlag(PLAYER_TURN_RIGHT); } @@ -264,7 +264,7 @@ static void input_key(int keynum, double value, int kabs) { /* Turn around to face vel. */ else if(KEY("reverse")) { if(value == KEY_PRESS) { - player_abortAutonav(); + player_abortAutonav(NULL); player_setFlag(PLAYER_REVERSE); } else if(value == KEY_RELEASE) { @@ -277,7 +277,7 @@ static void input_key(int keynum, double value, int kabs) { /* Shoot primary weapon. BOOM BOOM. */ else if(KEY("primary")) { if(value == KEY_PRESS) { - player_abortAutonav(); + player_abortAutonav(NULL); player_setFlag(PLAYER_PRIMARY); } else if(value == KEY_RELEASE) { player_rmFlag(PLAYER_PRIMARY); } @@ -298,7 +298,7 @@ static void input_key(int keynum, double value, int kabs) { /* Face the target. */ else if(KEY("face")) { if(value == KEY_PRESS) { - player_abortAutonav(); + player_abortAutonav(NULL); player_setFlag(PLAYER_FACE); } else if(value == KEY_RELEASE) { @@ -313,7 +313,7 @@ static void input_key(int keynum, double value, int kabs) { /* Board those ships. */ else if(KEY("board") && INGAME() && NOHYP()) { if(value == KEY_PRESS) { - player_abortAutonav(); + player_abortAutonav(NULL); player_board(); } } @@ -350,13 +350,13 @@ static void input_key(int keynum, double value, int kabs) { /* Target nearest planet or attempt to land. */ else if(KEY("land") && INGAME() && NOHYP()) { if(value == KEY_PRESS) { - player_abortAutonav(); + player_abortAutonav(NULL); player_land(); } } else if(KEY("thyperspace") && NOHYP() && NOLAND() && NODEAD()) { if(value == KEY_PRESS) { - player_abortAutonav(); + player_abortAutonav(NULL); player_targetHyperspace(); } } @@ -365,7 +365,7 @@ static void input_key(int keynum, double value, int kabs) { } else if(KEY("jump") && INGAME()) { if(value == KEY_PRESS) { - player_abortAutonav(); + player_abortAutonav(NULL); player_jump(); } } diff --git a/src/pilot.c b/src/pilot.c index e704fc5..1a0c348 100644 --- a/src/pilot.c +++ b/src/pilot.c @@ -39,7 +39,7 @@ static int pilot_mstack = 0; /** Memory allocated for pilot_stack. */ extern Pilot* player; extern double player_crating; /**< Players combat rating. */ -extern void player_abortAutonav(void); +extern void player_abortAutonav(char* reason); /* Stack of fleets. */ static Fleet* fleet_stack = NULL; /** Fleet stack. */ @@ -428,7 +428,7 @@ void pilot_hit(Pilot* p, const Solid* w, const unsigned int shooter, outfit_calcDamage(&damage_shield, &damage_armour, &knockback, dtype, damage); if(p->id == PLAYER_ID) - player_abortAutonav(); + player_abortAutonav("Sustaining Damage"); if(p->shield - damage_shield > 0.) { /* Shields take the whole blow. */ p->shield -= damage_shield; diff --git a/src/player.c b/src/player.c index cff1665..508ea89 100644 --- a/src/player.c +++ b/src/player.c @@ -1535,13 +1535,18 @@ void player_startAutonav(void) { } /** - * @fn void player_abortAutonav(void) - * * @brief Aborts autonav */ -void player_abortAutonav(void) { +void player_abortAutonav(char* reason) { + /* No point if player is beyond aborting. */ + if(pilot_isFlag(player, PILOT_HYPERSPACE)) + return; + if(player_isFlag(PLAYER_AUTONAV)) { - player_message("Autonav aborted!"); + if(reason != NULL) + player_message("Autonav aborting: %s!", reason); + else + player_message("Autonav aborted!"); player_rmFlag(PLAYER_AUTONAV); /* Get rid of acceleration. */ @@ -1573,7 +1578,7 @@ void player_think(Pilot* pplayer) { /* Autonav takes over normal controls. */ if(player_isFlag(PLAYER_AUTONAV)) { if(pplayer->lockons > 0) - player_abortAutonav(); + player_abortAutonav("Missile Lockon Detected"); if(space_canHyperspace(pplayer)) { player_jump(); diff --git a/src/player.h b/src/player.h index 958554b..d44f496 100644 --- a/src/player.h +++ b/src/player.h @@ -88,6 +88,6 @@ void player_afterburnOver(void); void player_accel(double acc); void player_accelOver(void); void player_startAutonav(void); -void player_abortAutonav(void); +void player_abortAutonav(char* reason); void player_hail(void);