]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/triggers/func/conveyor.qc
Merge branch 'master' into Lyberta/RandomItems
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / triggers / func / conveyor.qc
index 95f9ebc697a36932390a1856791be8adaa5134ad..6adbcc65f4fa4d7dc2564b466f473008f8d90042 100644 (file)
@@ -1,3 +1,4 @@
+#include "conveyor.qh"
 REGISTER_NET_LINKED(ENT_CLIENT_CONVEYOR)
 
 void conveyor_think(entity this)
@@ -9,10 +10,11 @@ void conveyor_think(entity this)
        if(dt <= 0) { return; }
 #endif
 
-       // set mythis as current conveyor where possible
-       FOREACH_ENTITY_ENT(conveyor, this,
+       // set myself as current conveyor where possible
+       IL_EACH(g_conveyed, it.conveyor == this,
        {
                it.conveyor = NULL;
+               IL_REMOVE(g_conveyed, it);
        });
 
        if(this.state)
@@ -28,10 +30,14 @@ void conveyor_think(entity this)
                        }
                        if(boxesoverlap(emin, emax, this.absmin, this.absmax)) // quick
                                if(WarpZoneLib_BoxTouchesBrush(emin, emax, this, it)) // accurate
+                               {
+                                       if(!it.conveyor)
+                                               IL_PUSH(g_conveyed, it);
                                        it.conveyor = this;
+                               }
                });
 
-               FOREACH_ENTITY_ENT(conveyor, this,
+               IL_EACH(g_conveyed, it.conveyor == this,
                {
                        if(IS_CLIENT(it)) // doing it via velocity has quite some advantages
                                continue; // done in SV_PlayerPhysics   continue;
@@ -148,12 +154,14 @@ spawnfunc(func_conveyor)
 
 void conveyor_draw(entity this) { conveyor_think(this); }
 
-void conveyor_init(entity this)
+void conveyor_init(entity this, bool isnew)
 {
+       if(isnew)
+               IL_PUSH(g_drawables, this);
        this.draw = conveyor_draw;
        this.drawmask = MASK_NORMAL;
 
-       this.move_movetype = MOVETYPE_NONE;
+       set_movetype(this, MOVETYPE_NONE);
        this.model = "";
        this.solid = SOLID_TRIGGER;
        this.move_time = time;
@@ -189,7 +197,7 @@ NET_HANDLE(ENT_CLIENT_CONVEYOR, bool isnew)
                this.targetname = strzone(ReadString());
                this.target = strzone(ReadString());
 
-               conveyor_init(this);
+               conveyor_init(this, isnew);
        }
 
        if(sf & 2)