]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'Juhu/velocity_pads_cleanup2' into 'master'
authorbones_was_here <bones_was_here@xonotic.au>
Thu, 9 Nov 2023 05:44:23 +0000 (05:44 +0000)
committerbones_was_here <bones_was_here@xonotic.au>
Thu, 9 Nov 2023 05:44:23 +0000 (05:44 +0000)
Move trigger_push_velocity last_pushed code out of StartFrame()

See merge request xonotic/xonotic-data.pk3dir!1251

qcsrc/common/mapobjects/trigger/jumppads.qc
qcsrc/server/main.qc

index 82f7088e57c54245fb2c0b9f0cda1ef39cf01b96..94422b3bb397d58e42b079204bf17ef14429657b 100644 (file)
@@ -242,6 +242,25 @@ vector trigger_push_velocity_calculatevelocity(entity this, vector org, entity t
        return vs + '0 0 1' * vz;
 }
 
+#ifdef SVQC
+void trigger_push_velocity_think(entity this)
+{
+       bool found = false;
+       IL_EACH(g_moveables, it.last_pushed == this,
+       {
+               if(!WarpZoneLib_ExactTrigger_Touch(this, it, false))
+                       it.last_pushed = NULL;
+               else
+                       found = true;
+       });
+
+       if(found)
+               this.nextthink = time;
+       else
+               setthink(this, func_null);
+}
+#endif
+
 bool jumppad_push(entity this, entity targ, bool is_velocity_pad)
 {
        if (!isPushable(targ))
@@ -262,6 +281,11 @@ bool jumppad_push(entity this, entity targ, bool is_velocity_pad)
                else
                {
                        targ.last_pushed = this; // may be briefly out of sync between client and server if client prediction is toggled
+
+                       #ifdef SVQC
+                       setthink(this, trigger_push_velocity_think);
+                       this.nextthink = time;
+                       #endif
                }
        }
 
index 7c010ad86ad29214bf6f377411339b5b463dbde6..f22347e8411632de37f40794976e87ad8b66ffbb 100644 (file)
@@ -294,12 +294,6 @@ void systems_update();
 void sys_phys_update(entity this, float dt);
 void StartFrame()
 {
-       IL_EACH(g_moveables, it.last_pushed,
-       {
-               if(!WarpZoneLib_ExactTrigger_Touch(it.last_pushed, it, false))
-                       it.last_pushed = NULL;
-       });
-
        // TODO: if move is more than 50ms, split it into two moves (this matches QWSV behavior and the client prediction)
        IL_EACH(g_players, IS_FAKE_CLIENT(it), sys_phys_update(it, frametime));
        IL_EACH(g_players, IS_FAKE_CLIENT(it), PlayerPreThink(it));