From 3f58557173893c474616750c717fef595d0d3c17 Mon Sep 17 00:00:00 2001
From: Jakob MG <jakob_mg@hotmail.com>
Date: Tue, 14 Jun 2011 22:09:46 +0200
Subject: [PATCH] Make walker go to last known enemy location when loosing
 target

---
 qcsrc/server/tturrets/units/unit_walker.qc | 34 ++++++++++++++++++++--
 1 file changed, 32 insertions(+), 2 deletions(-)

diff --git a/qcsrc/server/tturrets/units/unit_walker.qc b/qcsrc/server/tturrets/units/unit_walker.qc
index ff5512c9f..de6a0d2fd 100644
--- a/qcsrc/server/tturrets/units/unit_walker.qc
+++ b/qcsrc/server/tturrets/units/unit_walker.qc
@@ -436,6 +436,7 @@ void walker_move_path()
 }
 
 .vector enemy_last_loc;
+.float enemy_last_time;
 void walker_move_enemy()
 {
     switch (self.waterlevel)
@@ -459,9 +460,31 @@ void walker_move_enemy()
     self.moveto = self.enemy.origin;
     self.steerto = steerlib_attract2(self.moveto, 0.5, 500, 0.95);
     self.enemy_last_loc = self.enemy.origin;
-    
+    self.enemy_last_time = time;
+}
+
+void walker_move_enemy_last_loc()
+{
+    switch (self.waterlevel)
+    {
+    case 0:
+        self.animflag = ANIM_WALK;
+    case 1:
+    case 2:
+        if (self.animflag != ANIM_SWIM)
+            self.animflag = ANIM_WALK;
+        else
+            self.animflag = ANIM_SWIM;
+        break;
+    case 3:
+        self.animflag = ANIM_SWIM;
+    }
+
+    self.moveto = self.enemy_last_loc;
+    self.steerto = steerlib_attract2(self.moveto, 0.5, 500, 0.95);
 }
 
+
 void walker_move_idle_pause()
 {
     self.moveto   = self.origin;
@@ -531,7 +554,14 @@ void walker_postthink()
         walker_move_path();
     else if (self.enemy == world)
     {
-        if(self.pathcurrent)
+        if(self.enemy_last_loc != '0 0 0')
+        {
+            if(vlen(self.origin - self.enemy_last_loc) < 128 || time - self.enemy_last_time > 10)                    
+                self.enemy_last_loc = '0 0 0';
+            else
+                walker_move_enemy_last_loc();
+        }
+        else if(self.pathcurrent)
             walker_move_path();
         else
             walker_move_idle_pause();
-- 
2.39.5