From: Rudolf Polzer Date: Thu, 29 Dec 2011 14:11:46 +0000 (+0100) Subject: func_conveyor (very simple, not totally good yet) X-Git-Tag: xonotic-v0.6.0~74^2~25 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=f5aa2ad8b10ccdfe59e427ea88f058a936fc708c;p=xonotic%2Fxonotic-data.pk3dir.git func_conveyor (very simple, not totally good yet) --- diff --git a/qcsrc/server/t_plats.qc b/qcsrc/server/t_plats.qc index f44dcb7b9..0f9d14cf7 100644 --- a/qcsrc/server/t_plats.qc +++ b/qcsrc/server/t_plats.qc @@ -2055,3 +2055,40 @@ void spawnfunc_func_vectormamamam() InitializeEntity(self, func_vectormamamam_findtarget, INITPRIO_FINDTARGET); } + +void conveyor_think() +{ + for(other = world; (other = findentity(other, groundentity, self)); ) + { + if(!WarpZoneLib_BoxTouchesBrush(other.absmin + '0 0 -1', other.absmax + '0 0 -1', self, other)) + { + other.flags &~= FL_ONGROUND; + continue; + } + tracebox(other.origin, other.mins, other.maxs, other.origin + self.movedir * (self.speed * sys_frametime), MOVE_NORMAL, other); + if(trace_fraction > 0) + { + if(other.flags & FL_CLIENT) // doing it via velocity has quite some advantages + { + float f = 1 - frametime * autocvar_sv_friction; + if(f > 0) + other.velocity += self.movedir * self.speed * (1 / f - 1); + } + else + setorigin(other, trace_endpos); + } + } + self.nextthink = time; +} + +void spawnfunc_func_conveyor() +{ + SetMovedir (); + if not(InitMovingBrushTrigger()) + return; + self.movetype = MOVETYPE_NONE; + if (!self.speed) + self.speed = 100; + self.think = conveyor_think; + self.nextthink = time; +}