]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Add a function for turrets to tell how close they are to their target
authorMario <mario@smbclan.net>
Tue, 12 Jun 2018 05:24:03 +0000 (15:24 +1000)
committerMario <mario@smbclan.net>
Tue, 12 Jun 2018 05:24:03 +0000 (15:24 +1000)
qcsrc/common/turrets/sv_turrets.qc
qcsrc/common/turrets/sv_turrets.qh
qcsrc/common/turrets/turret/ewheel.qc
qcsrc/common/turrets/turret/walker.qc

index 2a7c41c98c9a8a7175a5b9b5af8acc07d31f6cff..06f8bab9c92a1543b953245fe22af8a1ff3dde62 100644 (file)
@@ -1239,6 +1239,12 @@ void turret_initparams(entity tur)
        #undef TRY
 }
 
+bool turret_closetotarget(entity this, vector targ)
+{
+       vector path_extra_size = '64 64 64';
+       return boxesoverlap(targ - path_extra_size, targ + path_extra_size, this.absmin - path_extra_size, this.absmax + path_extra_size);
+}
+
 void turret_findtarget(entity this)
 {
        entity e = find(NULL, classname, "turret_manager");
index 41a7bd962dc6e8a19ffcef03eb4291db7e55ed29..deee313ab109204ce7e1acbba2cb1aaaa6921aac 100644 (file)
@@ -89,6 +89,9 @@ void turrets_setframe(entity this, float _frame, float client_only);
 
 bool turret_initialize(entity this, Turret tur);
 
+// returns true when box overlaps with a given location
+bool turret_closetotarget(entity this, vector targ);
+
 /// Function to use for target evaluation. usualy turret_targetscore_generic
 .float(entity _turret, entity _target) turret_score_target;
 
index 5625d23fc935e8be8453afb9517ef40e333243a8..9a9001c42d39a99c14434ae662ef4602e3835536 100644 (file)
@@ -17,7 +17,7 @@ const int ewheel_anim_bck_fast = 4;
 void ewheel_move_path(entity this)
 {
     // Are we close enough to a path node to switch to the next?
-    if(vdist(this.origin - this.pathcurrent.origin, <, 64))
+    if(turret_closetotarget(this, this.pathcurrent.origin))
     {
 #ifdef EWHEEL_FANCYPATH
         if (this.pathcurrent.path_next == NULL)
@@ -49,7 +49,6 @@ void ewheel_move_path(entity this)
 
     if (this.pathcurrent)
     {
-
         this.moveto = this.pathcurrent.origin;
         this.steerto = steerlib_attract2(this, this.moveto, 0.5, 500, 0.95);
 
index 8cf795a93895887139b2b014543af8c1623a6d97..499e64d0cce4a32c553300e7935f82af83c473ee 100644 (file)
@@ -281,7 +281,8 @@ void walker_move_path(entity this)
 {
 #ifdef WALKER_FANCYPATHING
     // Are we close enougth to a path node to switch to the next?
-    if(vdist(this.origin - this.pathcurrent.origin, <, 64))
+    if(turret_closetotarget(this, this.pathcurrent.origin))
+    {
         if (this.pathcurrent.path_next == NULL)
         {
             // Path endpoint reached
@@ -304,13 +305,14 @@ void walker_move_path(entity this)
         }
         else
             this.pathcurrent = this.pathcurrent.path_next;
+    }
 
     this.moveto = this.pathcurrent.origin;
     this.steerto = steerlib_attract2(this, this.moveto,0.5,500,0.95);
     walker_move_to(this, this.moveto, 0);
 
 #else
-    if(vdist(this.origin - this.pathcurrent.origin, <, 64))
+    if(turret_closetotarget(this, this.pathcurrent.origin))
         this.pathcurrent = this.pathcurrent.enemy;
 
     if(!this.pathcurrent)