13 acc.warpzone_transform =
'0 0 0';
14 acc.warpzone_shift =
'0 0 0';
20 acc.warpzone_transform = tr;
21 acc.warpzone_shift = st;
64 e.warpzone_origin = my_org;
65 e.warpzone_targetorigin = other_org;
66 e.warpzone_angles = my_ang;
67 e.warpzone_targetangles = other_ang;
70 e.warpzone_forward = forward;
72 e.warpzone_targetforward = forward;
91 e.warpzone_origin = my_org;
92 e.warpzone_angles = my_ang;
104 LOG_TRACE(
"hit a network ent, cannot continue WarpZoneLib_BoxTouchesBrush");
118 setorigin(se, se.origin);
121 setorigin(se, se.origin);
131 if (!e.modelindex || e.warpzone_isboxy)
137 ig.dphitcontentsmask |= 128;
143 setorigin(e, e.origin);
149 setorigin(e, e.origin);
153 ig.dphitcontentsmask &= ~128;
194 float nomonsters_adjusted;
232 nomonsters_adjusted = nomonsters;
244 if (zone && wz != zone)
264 LOG_TRACE(
"Too many warpzones in sequence, aborting trace.");
277 if (
trace_ent.classname !=
"trigger_warpzone")
302 if (zone && wz != zone)
350 dt =
vlen(e.origin - o0) /
vlen(e.velocity);
352 e.velocity_z -= dt * g;
368 if (zone && wz != zone)
387 LOG_TRACE(
"Too many warpzones in sequence, aborting trace.");
397 e.velocity_z -= dt * g;
400 if (
trace_ent.classname !=
"trigger_warpzone")
405 LOG_TRACE(
"I transformed into the same zone again, wtf, aborting the trace");
413 if (zone && wz != zone)
421 e.velocity = -e.velocity;
426 e.velocity = -e.velocity;
478 return (v - wz.warpzone_origin) * wz.warpzone_forward;
483 return (v - wz.warpzone_targetorigin) * wz.warpzone_targetforward;
557 string s = e.classname;
562 case "exteriorweaponentity":
563 case "sprite_waypoint":
567 case "chatbubbleentity":
592 bool needlineofsight)
606 if (!it.WarpZone_findradius_hit ||
vlen2(it.WarpZone_findradius_dist) >
vlen2(org0 - p))
608 it.WarpZone_findradius_nearest = p;
609 it.WarpZone_findradius_dist = org0 - p;
610 it.WarpZone_findradius_findorigin =
org;
611 it.WarpZone_findradius_findradius = rad;
612 if (it.classname ==
"warpzone_refsys")
614 else if (it.classname ==
"trigger_warpzone")
616 it.WarpZone_findradius_next = wz;
618 it.WarpZone_findradius_hit = 1;
619 it.enemy.WarpZone_findradius_dist =
'0 0 0';
620 it.enemy.WarpZone_findradius_hit = 1;
624 it.warpzone_transform = transform;
625 it.warpzone_shift = shift;
626 it.WarpZone_findradius_hit = 1;
630 for (
entity e = wz; e; e = e.WarpZone_findradius_next)
643 bound(0, rad -
vlen(org_new - org0_new), rad - 8),
645 transform_new, shift_new,
647 e.WarpZone_findradius_hit = 0;
648 e.enemy.WarpZone_findradius_hit = 0;
653 bool simple_findradius =
true;
662 simple_findradius = false;
667 if (simple_findradius)
670 entity list_first = findradius(
org, rad);
677 list_first = list_first.chain;
679 prev_good_ent.chain = it.chain;
690 list_first = list_first.chain;
692 prev_good_ent.chain = it.chain;
697 it.WarpZone_findradius_nearest = p;
698 it.WarpZone_findradius_dist =
org - p;
717 if (this.
owner.WarpZone_refsys !=
this)
722 if (me.WarpZone_refsys.owner != me)
724 me.WarpZone_refsys =
new(warpzone_refsys);
725 me.WarpZone_refsys.owner = me;
727 me.WarpZone_refsys.nextthink =
time + 1;
733 if (me.WarpZone_refsys)
735 delete(me.WarpZone_refsys);
736 me.WarpZone_refsys =
NULL;
741 if (t !=
'0 0 0' || s !=
'0 0 0')
753 if (t !=
'0 0 0' || s !=
'0 0 0')
768 if (me.WarpZone_refsys_incremental_transform == ref.WarpZone_refsys.warpzone_transform)
769 if (me.WarpZone_refsys_incremental_shift == ref.WarpZone_refsys.warpzone_shift)
773 me.WarpZone_refsys_incremental_shift = ref.WarpZone_refsys.warpzone_shift;
774 me.WarpZone_refsys_incremental_transform = ref.WarpZone_refsys.warpzone_transform;
778 me.WarpZone_refsys_incremental_shift = ref.WarpZone_refsys.warpzone_shift;
779 me.WarpZone_refsys_incremental_transform = ref.WarpZone_refsys.warpzone_transform;
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)
801 if (to.WarpZone_refsys)
807 if (from.WarpZone_refsys)
809 if (to.WarpZone_refsys)
815 if (from.WarpZone_refsys)
818 me.WarpZone_refsys.warpzone_shift = from.WarpZone_refsys.warpzone_shift;
819 me.WarpZone_refsys.warpzone_transform = from.WarpZone_refsys.warpzone_transform;
852 const float eps = 0.0625;
853 tracebox(e.origin, e.mins -
'1 1 1' * eps, e.maxs +
'1 1 1' * eps, e.origin + by,
MOVE_WORLDONLY, e);
885 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 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
void(vector start, vector hit, vector end) WarpZone_trace_callback_t
#define BITCLR_ASSIGN(a, b)
entity WarpZone_trace_lastzone
vector WarpZone_tracetoss_velocity
entity WarpZone_trace_transform
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 vector NearestPointOnBoundingBox(vector mi, vector ma, vector org)
ERASEABLE float boxesoverlap(vector m1, vector m2, vector m3, vector m4)
Requires that m2>m1 in all coordinates, and that m4>m3.