X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Ftriggers%2Ffunc%2Fconveyor.qc;h=1802a75db4a96a74ab2b56eb9531a748923bfa91;hp=95f9ebc697a36932390a1856791be8adaa5134ad;hb=1b0decb9afb829407eae763b3053a122e2ae3de6;hpb=83aad9e1a69d8e924df17cdbad05b015c6c6f0fc diff --git a/qcsrc/common/triggers/func/conveyor.qc b/qcsrc/common/triggers/func/conveyor.qc index 95f9ebc69..1802a75db 100644 --- a/qcsrc/common/triggers/func/conveyor.qc +++ b/qcsrc/common/triggers/func/conveyor.qc @@ -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; @@ -79,20 +85,12 @@ bool conveyor_send(entity this, entity to, int sf) if(sf & 1) { WriteByte(MSG_ENTITY, this.warpzone_isboxy); - WriteCoord(MSG_ENTITY, this.origin_x); - WriteCoord(MSG_ENTITY, this.origin_y); - WriteCoord(MSG_ENTITY, this.origin_z); + WriteVector(MSG_ENTITY, this.origin); - WriteCoord(MSG_ENTITY, this.mins_x); - WriteCoord(MSG_ENTITY, this.mins_y); - WriteCoord(MSG_ENTITY, this.mins_z); - WriteCoord(MSG_ENTITY, this.maxs_x); - WriteCoord(MSG_ENTITY, this.maxs_y); - WriteCoord(MSG_ENTITY, this.maxs_z); + WriteVector(MSG_ENTITY, this.mins); + WriteVector(MSG_ENTITY, this.maxs); - WriteCoord(MSG_ENTITY, this.movedir_x); - WriteCoord(MSG_ENTITY, this.movedir_y); - WriteCoord(MSG_ENTITY, this.movedir_z); + WriteVector(MSG_ENTITY, this.movedir); WriteByte(MSG_ENTITY, this.speed); WriteByte(MSG_ENTITY, this.state); @@ -148,12 +146,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; @@ -166,22 +166,14 @@ NET_HANDLE(ENT_CLIENT_CONVEYOR, bool isnew) if(sf & 1) { this.warpzone_isboxy = ReadByte(); - this.origin_x = ReadCoord(); - this.origin_y = ReadCoord(); - this.origin_z = ReadCoord(); + this.origin = ReadVector(); setorigin(this, this.origin); - this.mins_x = ReadCoord(); - this.mins_y = ReadCoord(); - this.mins_z = ReadCoord(); - this.maxs_x = ReadCoord(); - this.maxs_y = ReadCoord(); - this.maxs_z = ReadCoord(); + this.mins = ReadVector(); + this.maxs = ReadVector(); setsize(this, this.mins, this.maxs); - this.movedir_x = ReadCoord(); - this.movedir_y = ReadCoord(); - this.movedir_z = ReadCoord(); + this.movedir = ReadVector(); this.speed = ReadByte(); this.state = ReadByte(); @@ -189,7 +181,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)