]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Reduce stepwalk height when there's an obstacle (e.g. a very low ceiling) above curre...
authorterencehill <piuntn@gmail.com>
Mon, 24 Jul 2017 15:27:51 +0000 (17:27 +0200)
committerterencehill <piuntn@gmail.com>
Mon, 24 Jul 2017 15:27:51 +0000 (17:27 +0200)
qcsrc/server/bot/default/navigation.qc

index 8710c4c2a6a1f2828a17f2d5045d18a2ffbf05e3..cf7181dc505e54ffa90a640f050dbb73a8459b2f 100644 (file)
@@ -424,10 +424,27 @@ bool tracewalk(entity e, vector start, vector m1, vector m2, vector end, float e
                                tracebox(org + stepheightvec, m1, m2, move + stepheightvec, movemode, e);
                                if (trace_fraction < 1 || trace_startsolid)
                                {
-                                       tracebox(org + jumpstepheightvec, m1, m2, move + jumpstepheightvec, movemode, e);
-                                       if (trace_fraction < 1 || trace_startsolid)
+                                       if (trace_startsolid) // hit ceiling above org
                                        {
-                                               vector v = trace_endpos - jumpstepheightvec + jumpheight_vec;
+                                               // reduce stepwalk height
+                                               tracebox(org, m1, m2, org + stepheightvec, movemode, e);
+                                               tracebox(trace_endpos, m1, m2, move + eZ * (trace_endpos.z - move.z), movemode, e);
+                                       }
+                                       else //if (trace_fraction < 1)
+                                       {
+                                               tracebox(org + jumpstepheightvec, m1, m2, move + jumpstepheightvec, movemode, e);
+                                               if (trace_startsolid) // hit ceiling above org
+                                               {
+                                                       // reduce jumpstepwalk height
+                                                       tracebox(org, m1, m2, org + jumpstepheightvec, movemode, e);
+                                                       tracebox(trace_endpos, m1, m2, move + eZ * (trace_endpos.z - move.z), movemode, e);
+                                               }
+                                       }
+
+                                       if (trace_fraction < 1)
+                                       {
+                                               vector v = trace_endpos;
+                                               v.z = org.z + jumpheight_vec.z;
                                                if(navigation_checkladders(e, v, m1, m2, end, end2, movemode))
                                                {
                                                        if(autocvar_bot_debug_tracewalk)