From bafed15cdc647ab9ee9d81dbfd110b44cdb82a5d Mon Sep 17 00:00:00 2001
From: Allanis <allanis@saracraft.net>
Date: Thu, 29 May 2014 01:49:23 +0100
Subject: [PATCH] [Change] Some code cleanup.

---
 src/player.c | 43 ++++++++++++++++++++++++++++++++++---------
 1 file changed, 34 insertions(+), 9 deletions(-)

diff --git a/src/player.c b/src/player.c
index 5edfe74..ef10c74 100644
--- a/src/player.c
+++ b/src/player.c
@@ -33,6 +33,7 @@
 #include "comm.h"
 #include "intro.h"
 #include "perlin.h"
+#include "ai.h"
 #include "player.h"
 
 #define XML_GUI_ID    "GUIs"    /**< XML section identifier for GUI document. */
@@ -1801,6 +1802,9 @@ void player_abortAutonav(char* reason) {
  *    @param pplayer Player to think.
  */
 void player_think(Pilot* pplayer) {
+  Pilot* target;
+  double d;
+
   /* Last I checked, the dead didn't think.. */
   if(pilot_isFlag(pplayer, PILOT_DEAD)) {
     /* No point in accelerating or turning. */
@@ -1811,24 +1815,31 @@ void player_think(Pilot* pplayer) {
 
   /* Autonav takes over normal controls. */
   if(player_isFlag(PLAYER_AUTONAV)) {
+    /* Abort if lockons detected. */
     if(pplayer->lockons > 0)
       player_abortAutonav("Missile Lockon Detected");
 
-    if(space_canHyperspace(pplayer)) {
+    /* Try to jump. */
+    if(space_canHyperspace(pplayer))
       player_jump();
-    }	else {
-      pilot_face(pplayer, VANGLE(pplayer->solid->pos));
-      if(player_acc < 1.)
+    else { /* Keep on moving. */
+      /* Only accelerate if facing move dir. */
+      d = pilot_face(pplayer, VANGLE(pplayer->solid->pos));
+      if((player_acc < 1.) && (d < MIN_DIR_ERR))
         player_accel(1.);
   	}
   }
 
   /* PLAYER_FACE will take over navigation. */
   else if(player_isFlag(PLAYER_FACE)) {
-    if(player->target != PLAYER_ID)
-      pilot_face(pplayer,
-                 vect_angle(&player->solid->pos,
-                            &pilot_get(player->target)->solid->pos));
+    /* Try to face pilot target */
+    if(player->target != PLAYER_ID) {
+      target = pilot_get(player->target);
+      if(target != NULL)
+        pilot_face(pplayer,
+            vect_angle(&player->solid->pos, &target->solid->pos));
+    }
+    /* If not try to face planet target. */
     else if(planet_target != -1)
       pilot_face(pplayer,
           vect_angle(&player->solid->pos,
@@ -1836,8 +1847,22 @@ void player_think(Pilot* pplayer) {
   }
 
   /* PLAYER_REVERSE will take over navigation. */
-  else if(player_isFlag(PLAYER_REVERSE) && (VMOD(pplayer->solid->vel) > 0.))
+  else if(player_isFlag(PLAYER_REVERSE)) {
+    /* Check to see if already stopped. */
+#if 0
+    if(VMOD(pplayer->solid->vel) < MIN_VEL_ERR)
+      player_accel(0.);
+    else {
+      d = pilot_face(pplayer, VANGLE(player->solid->vel) + M_PI);
+      if((player_acc < 1.) && (d < MAX_DIR_ERR))
+        player_accel(1.);
+    }
+#endif
+    /*
+     * Hm, I don't think automatic braking is amy good.
+     */
     pilot_face(pplayer, VANGLE(player->solid->vel) + M_PI);
+  }
 
   /* Normal navigation sheme. */
   else {