4 #include "../dpdefs/progsdefs.qh"
5 #include "../dpdefs/dpextensions.qh"
7 #include "util_server.qh"
8 #include "../csqcmodellib/sv_model.qh"
11 void WarpZoneLib_MoveOutOfSolid_Expand(entity e, vector by)
14 tracebox(e.origin, e.mins - '1 1 1' * eps, e.maxs + '1 1 1' * eps, e.origin + by, MOVE_WORLDONLY, e);
17 if (trace_fraction < 1)
20 // adjust origin in the other direction...
21 setorigin(e,e.origin - by * (1 - trace_fraction));
25 float WarpZoneLib_MoveOutOfSolid(entity e)
30 traceline(o, o, MOVE_WORLDONLY, e);
34 tracebox(o, e.mins, e.maxs, o, MOVE_WORLDONLY, e);
35 if (!trace_startsolid)
42 WarpZoneLib_MoveOutOfSolid_Expand(e, '1 0 0' * m0_x);
44 WarpZoneLib_MoveOutOfSolid_Expand(e, '1 0 0' * m1_x);
46 WarpZoneLib_MoveOutOfSolid_Expand(e, '0 1 0' * m0_y);
48 WarpZoneLib_MoveOutOfSolid_Expand(e, '0 1 0' * m1_y);
50 WarpZoneLib_MoveOutOfSolid_Expand(e, '0 0 1' * m0_z);
52 WarpZoneLib_MoveOutOfSolid_Expand(e, '0 0 1' * m1_z);
54 setorigin(e, e.origin);
56 tracebox(e.origin, e.mins, e.maxs, e.origin, MOVE_WORLDONLY, e);
66 float WarpZoneLib_ExactTrigger_Touch()
68 return !WarpZoneLib_BoxTouchesBrush(other.absmin, other.absmax, self, other);
71 void WarpZoneLib_ExactTrigger_Init()
74 if (self.movedir == '0 0 0')
75 if (self.angles != '0 0 0')
77 makevectors (self.angles);
78 self.movedir = v_forward;
82 // It's a box! No need to match with exacttriggers.
83 self.warpzone_isboxy = 1;
89 precache_model(self.model);
90 setmodel(self, self.model);
91 // let mapper-set mins/maxs override the model's bounds if set
92 if(mi != '0 0 0' || ma != '0 0 0')
94 // It's a box! No need to match with exacttriggers.
97 self.warpzone_isboxy = 1;
100 setorigin(self, self.origin);
102 setsize(self, self.mins * self.scale, self.maxs * self.scale);
104 setsize(self, self.mins, self.maxs);
105 self.movetype = MOVETYPE_NONE;
106 self.solid = SOLID_TRIGGER;