14 acc.warpzone_transform =
'0 0 0';
15 acc.warpzone_shift =
'0 0 0';
22 acc.warpzone_transform = tr;
23 acc.warpzone_shift = st;
68 e.warpzone_origin = my_org;
69 e.warpzone_targetorigin = other_org;
70 e.warpzone_angles = my_ang;
71 e.warpzone_targetangles = other_ang;
74 e.warpzone_forward = forward;
76 e.warpzone_targetforward = forward;
95 e.warpzone_origin = my_org;
96 e.warpzone_angles = my_ang;
111 LOG_TRACE(
"hit a network ent, cannot continue WarpZoneLib_BoxTouchesBrush");
125 setorigin(se, se.origin);
128 setorigin(se, se.origin);
140 if(!e.modelindex || e.warpzone_isboxy)
146 ig.dphitcontentsmask |= 128;
152 setorigin(e, e.origin);
158 setorigin(e, e.origin);
162 ig.dphitcontentsmask &= ~128;
214 float nomonsters_adjusted;
254 nomonsters_adjusted = nomonsters;
266 if(zone && wz != zone)
286 LOG_TRACE(
"Too many warpzones in sequence, aborting trace.");
299 if(
trace_ent.classname !=
"trigger_warpzone")
322 if(zone && wz != zone)
356 vector vf, vr, vu, v0, o0;
361 g =
cvar(
"sv_gravity") * e.gravity;
373 dt =
vlen(e.origin - o0) /
vlen(e.velocity);
375 e.velocity_z -= dt * g;
391 if(zone && wz != zone)
410 LOG_TRACE(
"Too many warpzones in sequence, aborting trace.");
420 e.velocity_z -= dt * g;
423 if(
trace_ent.classname !=
"trigger_warpzone")
428 LOG_TRACE(
"I transformed into the same zone again, wtf, aborting the trace");
436 if(zone && wz != zone)
444 e.velocity = -e.velocity;
449 e.velocity = -e.velocity;
501 return (v - wz.warpzone_origin) * wz.warpzone_forward;
506 return (v - wz.warpzone_targetorigin) * wz.warpzone_targetforward;
584 nearest.x =
bound(mi.x,
org.x, ma.x);
585 nearest.y =
bound(mi.y,
org.y, ma.y);
586 nearest.z =
bound(mi.z,
org.z, ma.z);
594 string s = e.classname;
599 case "exteriorweaponentity":
600 case "sprite_waypoint":
604 case "chatbubbleentity":
629 bool needlineofsight)
631 if (rad <= 0)
return;
640 if (!it.WarpZone_findradius_hit ||
vlen2(it.WarpZone_findradius_dist) >
vlen2(org0 - p))
642 it.WarpZone_findradius_nearest = p;
643 it.WarpZone_findradius_dist = org0 - p;
644 it.WarpZone_findradius_findorigin =
org;
645 it.WarpZone_findradius_findradius = rad;
646 if (it.classname ==
"warpzone_refsys")
650 else if (it.classname ==
"trigger_warpzone")
652 it.WarpZone_findradius_next = wz;
654 it.WarpZone_findradius_hit = 1;
655 it.enemy.WarpZone_findradius_dist =
'0 0 0';
656 it.enemy.WarpZone_findradius_hit = 1;
660 it.warpzone_transform = transform;
661 it.warpzone_shift = shift;
662 it.WarpZone_findradius_hit = 1;
666 for(
entity e = wz; e; e = e.WarpZone_findradius_next)
678 bound(0, rad -
vlen(org_new - org0_new), rad - 8),
680 transform_new, shift_new,
682 e.WarpZone_findradius_hit = 0;
683 e.enemy.WarpZone_findradius_hit = 0;
701 if(this.
owner.WarpZone_refsys !=
this)
706 if(me.WarpZone_refsys.owner != me)
708 me.WarpZone_refsys =
new(warpzone_refsys);
709 me.WarpZone_refsys.owner = me;
711 me.WarpZone_refsys.nextthink =
time + 1;
717 if(me.WarpZone_refsys)
719 delete(me.WarpZone_refsys);
720 me.WarpZone_refsys =
NULL;
725 if(t !=
'0 0 0' || s !=
'0 0 0')
737 if(t !=
'0 0 0' || s !=
'0 0 0')
752 if(me.WarpZone_refsys_incremental_transform == ref.WarpZone_refsys.warpzone_transform)
753 if(me.WarpZone_refsys_incremental_shift == ref.WarpZone_refsys.warpzone_shift)
757 me.WarpZone_refsys_incremental_shift = ref.WarpZone_refsys.warpzone_shift;
758 me.WarpZone_refsys_incremental_transform = ref.WarpZone_refsys.warpzone_transform;
762 me.WarpZone_refsys_incremental_shift = ref.WarpZone_refsys.warpzone_shift;
763 me.WarpZone_refsys_incremental_transform = ref.WarpZone_refsys.warpzone_transform;
767 if(from.WarpZone_refsys)
769 if(to.WarpZone_refsys)
775 if(from.WarpZone_refsys)
777 if(to.WarpZone_refsys)
783 if(from.WarpZone_refsys)
785 if(to.WarpZone_refsys)
791 if(from.WarpZone_refsys)
793 if(to.WarpZone_refsys)
799 if(from.WarpZone_refsys)
802 me.WarpZone_refsys.warpzone_shift = from.WarpZone_refsys.warpzone_shift;
803 me.WarpZone_refsys.warpzone_transform = from.WarpZone_refsys.warpzone_transform;
836 const float eps = 0.0625;
837 tracebox(e.origin, e.mins -
'1 1 1' * eps, e.maxs +
'1 1 1' * eps, e.origin + by,
MOVE_WORLDONLY, e);
869 setorigin(e, e.origin);
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
const float MOVE_NOMONSTERS
float trace_dphitcontents
const float SOLID_TRIGGER
float trace_networkentity
float PARTICLES_DRAWASTRAIL
#define IL_EACH(this, cond, body)
#define FOREACH_LIST(list, next, cond, body)
#define FOREACH_ENTITY_RADIUS(org, dist, cond, body)
void WarpZone_RefSys_AddInverseTransform(entity me, vector t, vector s)
vector WarpZone_UnTransformVelocity(entity wz, vector v)
void WarpZone_SetUp(entity e, vector my_org, vector my_ang, vector other_org, vector other_ang)
vector WarpZone_Camera_camera_transform(entity this, vector org, vector ang)
void WarpZone_RefSys_Add(entity me, entity wz)
entity WarpZone_findradius_next
void WarpZone_TraceToss_ThroughZone(entity e, entity forent, entity zone, WarpZone_trace_callback_t cb)
void WarpZone_RefSys_Clear(entity me)
vector WarpZone_RefSys_TransformVelocity(entity from, entity to, vector vel)
void WarpZone_TraceToss(entity e, entity forent)
void WarpZone_FindRadius_Recurse(vector org, float rad, vector org0, vector transform, vector shift, bool needlineofsight)
entity WarpZone_Find(vector mi, vector ma)
float WarpZoneLib_BoxTouchesBrush(vector mi, vector ma, entity e, entity ig)
vector WarpZone_UnTransformVAngles(entity wz, vector ang)
float WarpZoneLib_BoxTouchesBrush_Recurse(vector mi, vector ma, entity e, entity ig)
bool WarpZoneLib_ExactTrigger_Touch(entity this, entity toucher, bool touchfunc)
void WarpZone_Accumulator_Clear(entity acc)
float WarpZone_PlaneDist(entity wz, vector v)
void WarpZone_Trace_InitTransform()
void WarpZone_Camera_SetUp(entity e, vector my_org, vector my_ang)
void WarpZone_Accumulator_AddTransform(entity acc, vector t, vector s)
float WarpZone_findradius_hit
entity WarpZone_FindRadius(vector org, float rad, bool needlineofsight)
vector WarpZone_refsys_incremental_transform
void WarpZone_TraceBox_ThroughZone(vector org, vector mi, vector ma, vector end, float nomonsters, entity forent, entity zone, WarpZone_trace_callback_t cb)
void WarpZone_TraceLine(vector org, vector end, float nomonsters, entity forent)
vector WarpZone_TransformVAngles(entity wz, vector ang)
vector WarpZone_TransformVelocity(entity wz, vector v)
void WarpZone_RefSys_GC(entity this)
void WarpZone_TrailParticles_WithMultiplier(entity own, float eff, vector org, vector end, float f, int boxflags)
void WarpZone_RefSys_CheckCreate(entity me)
void WarpZone_RefSys_BeginAddingIncrementally(entity me, entity ref)
bool WarpZoneLib_BadEntity(entity e)
float WarpZone_TrailParticles_trace_callback_flags
vector WarpZone_TransformAngles(entity wz, vector v)
void WarpZone_TrailParticles(entity own, float eff, vector org, vector end)
void WarpZone_MakeAllOther()
vector WarpZone_UnTransformOrigin(entity wz, vector v)
entity WarpZone_TrailParticles_trace_callback_own
void WarpZone_RefSys_AddIncrementally(entity me, entity ref)
vector WarpZone_TransformOrigin(entity wz, vector v)
entity WarpZone_RefSys_SpawnSameRefSys(entity me)
vector WarpZoneLib_NearestPointOnBox(vector mi, vector ma, vector org)
vector WarpZone_refsys_incremental_shift
void WarpZone_RefSys_AddTransform(entity me, vector t, vector s)
void WarpZone_TraceBox(vector org, vector mi, vector ma, vector end, float nomonsters, entity forent)
float WarpZone_TargetPlaneDist(entity wz, vector v)
void WarpZone_MakeAllSolid()
vector WarpZone_camera_transform(entity this, vector org, vector ang)
void WarpZone_TrailParticles_WithMultiplier_trace_callback(vector from, vector endpos, vector to)
void WarpZone_Accumulator_AddInverse(entity acc, entity wz)
void WarpZone_RefSys_AddInverse(entity me, entity wz)
vector WarpZone_RefSys_TransformOrigin(entity from, entity to, vector org)
float WarpZone_TrailParticles_trace_callback_f
void WarpZone_RefSys_Copy(entity me, entity from)
vector WarpZone_UnTransformAngles(entity wz, vector v)
void WarpZone_Accumulator_AddInverseTransform(entity acc, vector t, vector s)
void WarpZone_TrailParticles_trace_callback(vector from, vector endpos, vector to)
void WarpZone_Trace_AddTransform(entity wz)
void WarpZoneLib_MoveOutOfSolid_Expand(entity e, vector by)
float WarpZone_TrailParticles_trace_callback_eff
vector WarpZone_RefSys_TransformVAngles(entity from, entity to, vector ang)
vector WarpZone_RefSys_TransformAngles(entity from, entity to, vector ang)
void WarpZone_Accumulator_Add(entity acc, entity wz)
int WarpZoneLib_MoveOutOfSolid(entity e)
var WarpZone_trace_callback_t WarpZone_trace_callback_t_null
entity WarpZone_trace_firstzone
#define BITSET_ASSIGN(a, b)
vector warpzone_targetorigin
#define BITCLR_ASSIGN(a, b)
entity WarpZone_trace_lastzone
vector WarpZone_tracetoss_velocity
entity WarpZone_trace_transform
void(vector start, vector hit, vector end) WarpZone_trace_callback_t
IntrusiveList g_warpzones
float warpzone_warpzones_exist
float WarpZone_tracetoss_time
entity WarpZone_trace_forent
#define new_pure(class)
purely logical entities (not linked to the area grid)
#define setcamera_transform(e, f)
#define startsWith(haystack, needle)
#define vdist(v, cmp, f)
Vector distance comparison, avoids sqrt()
ERASEABLE float boxesoverlap(vector m1, vector m2, vector m3, vector m4)
requires that m2>m1 in all coordinates, and that m4>m3