]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Make walker go to last known enemy location when loosing target
authorJakob MG <jakob_mg@hotmail.com>
Tue, 14 Jun 2011 20:09:46 +0000 (22:09 +0200)
committerJakob MG <jakob_mg@hotmail.com>
Tue, 14 Jun 2011 20:09:46 +0000 (22:09 +0200)
qcsrc/server/tturrets/units/unit_walker.qc

index ff5512c9f08f380e35b2b9e5cf21d008e901618b..de6a0d2fd396fc0a66b5a8a35c971f9705bed0ef 100644 (file)
@@ -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();