X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Flib%2Fwarpzone%2Fcommon.qc;h=5a3929e1e92d58ecd6520f0bbb05d68499e61f73;hb=34e7f534e2015466228eb3a78c9857741b736dca;hp=7309ff79b8c16b4e7280f79600a3a0f1e9f77ed6;hpb=109c5785a22fb4336ac5e91d5f1fa91678582164;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/lib/warpzone/common.qc b/qcsrc/lib/warpzone/common.qc index 7309ff79b..5a3929e1e 100644 --- a/qcsrc/lib/warpzone/common.qc +++ b/qcsrc/lib/warpzone/common.qc @@ -4,7 +4,7 @@ #include #elif defined(MENUQC) #elif defined(SVQC) - #include + #include #endif void WarpZone_Accumulator_Clear(entity acc) @@ -37,27 +37,26 @@ void WarpZone_Accumulator_AddInverse(entity acc, entity wz) WarpZone_Accumulator_AddInverseTransform(acc, wz.warpzone_transform, wz.warpzone_shift); } -.vector(vector, vector) camera_transform; float autocvar_cl_warpzone_usetrace = 1; -vector WarpZone_camera_transform(vector org, vector ang) -{SELFPARAM(); +vector WarpZone_camera_transform(entity this, vector org, vector ang) +{ vector vf, vr, vu; - if(self.warpzone_fadestart) - if(vdist(org - self.origin - 0.5 * (self.mins + self.maxs), >, self.warpzone_fadeend + 400)) + if(this.warpzone_fadestart) + if(vdist(org - this.origin - 0.5 * (this.mins + this.maxs), >, this.warpzone_fadeend + 400)) return org; // don't transform if zone faded out (plus 400qu safety margin for typical speeds and latencies) // unneeded on client, on server this helps a lot vf = v_forward; vr = v_right; vu = v_up; - org = WarpZone_TransformOrigin(self, org); - vf = WarpZone_TransformVelocity(self, vf); - vr = WarpZone_TransformVelocity(self, vr); - vu = WarpZone_TransformVelocity(self, vu); + org = WarpZone_TransformOrigin(this, org); + vf = WarpZone_TransformVelocity(this, vf); + vr = WarpZone_TransformVelocity(this, vr); + vu = WarpZone_TransformVelocity(this, vu); if(autocvar_cl_warpzone_usetrace) - traceline(self.warpzone_targetorigin, org, MOVE_NOMONSTERS, world); + traceline(this.warpzone_targetorigin, org, MOVE_NOMONSTERS, NULL); else - trace_endpos = self.warpzone_targetorigin; + trace_endpos = this.warpzone_targetorigin; v_forward = vf; v_right = vr; v_up = vu; @@ -74,27 +73,27 @@ void WarpZone_SetUp(entity e, vector my_org, vector my_ang, vector other_org, ve e.warpzone_targetangles = other_ang; fixedmakevectors(my_ang); e.warpzone_forward = v_forward; fixedmakevectors(other_ang); e.warpzone_targetforward = v_forward; - e.camera_transform = WarpZone_camera_transform; + setcamera_transform(e, WarpZone_camera_transform); } -vector WarpZone_Camera_camera_transform(vector org, vector ang) -{SELFPARAM(); +vector WarpZone_Camera_camera_transform(entity this, vector org, vector ang) +{ // a fixed camera view - if(self.warpzone_fadestart) - if(vdist(org - self.origin - 0.5 * (self.mins + self.maxs), >, self.warpzone_fadeend + 400)) + if(this.warpzone_fadestart) + if(vdist(org - this.origin - 0.5 * (this.mins + this.maxs), >, this.warpzone_fadeend + 400)) return org; // don't transform if zone faded out (plus 400qu safety margin for typical speeds and latencies) // unneeded on client, on server this helps a lot - trace_endpos = self.warpzone_origin; - makevectors(self.warpzone_angles); - return self.warpzone_origin; + trace_endpos = this.warpzone_origin; + makevectors(this.warpzone_angles); + return this.warpzone_origin; } void WarpZone_Camera_SetUp(entity e, vector my_org, vector my_ang) // we assume that e.oldorigin and e.avelocity point to view origin and direction { e.warpzone_origin = my_org; e.warpzone_angles = my_ang; - e.camera_transform = WarpZone_Camera_camera_transform; + setcamera_transform(e, WarpZone_Camera_camera_transform); } .entity enemy; @@ -113,7 +112,7 @@ float WarpZoneLib_BoxTouchesBrush_Recurse() #ifdef CSQC if (trace_networkentity) { - LOG_TRACE("hit a network ent, cannot continue WarpZoneLib_BoxTouchesBrush\n"); + LOG_TRACE("hit a network ent, cannot continue WarpZoneLib_BoxTouchesBrush"); // we cannot continue, as a player blocks us... // so, abort return 0; @@ -155,31 +154,33 @@ float WarpZoneLib_BoxTouchesBrush(vector mi, vector ma, entity e, entity ig) entity WarpZone_Find(vector mi, vector ma) { // if we are near any warpzone planes - MOVE AWAY (work around nearclip) - entity e; if(!warpzone_warpzones_exist) - return world; - for(e = world; (e = find(e, classname, "trigger_warpzone")); ) - if(WarpZoneLib_BoxTouchesBrush(mi, ma, e, world)) - return e; - return world; + return NULL; + IL_EACH(g_warpzones, WarpZoneLib_BoxTouchesBrush(mi, ma, it, NULL), + { + return it; + }); + return NULL; } void WarpZone_MakeAllSolid() { - entity e; if(!warpzone_warpzones_exist) return; - for(e = world; (e = find(e, classname, "trigger_warpzone")); ) - e.solid = SOLID_BSP; + IL_EACH(g_warpzones, true, + { + it.solid = SOLID_BSP; + }); } void WarpZone_MakeAllOther() { - entity e; if(!warpzone_warpzones_exist) return; - for(e = world; (e = find(e, classname, "trigger_warpzone")); ) - e.solid = SOLID_TRIGGER; + IL_EACH(g_warpzones, true, + { + it.solid = SOLID_TRIGGER; + }); } void WarpZone_Trace_InitTransform() @@ -205,8 +206,8 @@ void WarpZone_TraceBox_ThroughZone(vector org, vector mi, vector ma, vector end, vector vf, vr, vu; WarpZone_trace_forent = forent; - WarpZone_trace_firstzone = world; - WarpZone_trace_lastzone = world; + WarpZone_trace_firstzone = NULL; + WarpZone_trace_lastzone = NULL; WarpZone_Trace_InitTransform(); if(!warpzone_warpzones_exist) { @@ -272,8 +273,8 @@ void WarpZone_TraceBox_ThroughZone(vector org, vector mi, vector ma, vector end, { if(--i < 1) { - LOG_TRACE("Too many warpzones in sequence, aborting trace.\n"); - trace_ent = world; + LOG_TRACE("Too many warpzones in sequence, aborting trace."); + trace_ent = NULL; break; } tracebox(org, mi, ma, end, nomonsters_adjusted, WarpZone_trace_forent); @@ -300,8 +301,8 @@ void WarpZone_TraceBox_ThroughZone(vector org, vector mi, vector ma, vector end, if(trace_ent == wz) { // FIXME can this check be removed? Do we really need it? - LOG_TRACE("I transformed into the same zone again, wtf, aborting the trace\n"); - trace_ent = world; + LOG_TRACE("I transformed into the same zone again, wtf, aborting the trace"); + trace_ent = NULL; break; } wz = trace_ent; @@ -331,7 +332,7 @@ LABEL(fail) void WarpZone_TraceBox(vector org, vector mi, vector ma, vector end, float nomonsters, entity forent) { - WarpZone_TraceBox_ThroughZone(org, mi, ma, end, nomonsters, forent, world, WarpZone_trace_callback_t_null); + WarpZone_TraceBox_ThroughZone(org, mi, ma, end, nomonsters, forent, NULL, WarpZone_trace_callback_t_null); } void WarpZone_TraceLine(vector org, vector end, float nomonsters, entity forent) @@ -350,8 +351,8 @@ void WarpZone_TraceToss_ThroughZone(entity e, entity forent, entity zone, WarpZo g = cvar("sv_gravity") * e.gravity; WarpZone_trace_forent = forent; - WarpZone_trace_firstzone = world; - WarpZone_trace_lastzone = world; + WarpZone_trace_firstzone = NULL; + WarpZone_trace_lastzone = NULL; WarpZone_Trace_InitTransform(); WarpZone_tracetoss_time = 0; if(!warpzone_warpzones_exist) @@ -396,8 +397,8 @@ void WarpZone_TraceToss_ThroughZone(entity e, entity forent, entity zone, WarpZo { if(--i < 1) { - LOG_TRACE("Too many warpzones in sequence, aborting trace.\n"); - trace_ent = world; + LOG_TRACE("Too many warpzones in sequence, aborting trace."); + trace_ent = NULL; break; } tracetoss(e, WarpZone_trace_forent); @@ -414,8 +415,8 @@ void WarpZone_TraceToss_ThroughZone(entity e, entity forent, entity zone, WarpZo if(trace_ent == wz) { // FIXME can this check be removed? Do we really need it? - LOG_TRACE("I transformed into the same zone again, wtf, aborting the trace\n"); - trace_ent = world; + LOG_TRACE("I transformed into the same zone again, wtf, aborting the trace"); + trace_ent = NULL; break; } wz = trace_ent; @@ -450,7 +451,7 @@ LABEL(fail) void WarpZone_TraceToss(entity e, entity forent) { - WarpZone_TraceToss_ThroughZone(e, forent, world, WarpZone_trace_callback_t_null); + WarpZone_TraceToss_ThroughZone(e, forent, NULL, WarpZone_trace_callback_t_null); } entity WarpZone_TrailParticles_trace_callback_own; @@ -464,7 +465,7 @@ void WarpZone_TrailParticles(entity own, float eff, vector org, vector end) { WarpZone_TrailParticles_trace_callback_own = own; WarpZone_TrailParticles_trace_callback_eff = eff; - WarpZone_TraceBox_ThroughZone(org, '0 0 0', '0 0 0', end, MOVE_NOMONSTERS, world, world, WarpZone_TrailParticles_trace_callback); + WarpZone_TraceBox_ThroughZone(org, '0 0 0', '0 0 0', end, MOVE_NOMONSTERS, NULL, NULL, WarpZone_TrailParticles_trace_callback); } #ifdef CSQC @@ -481,7 +482,7 @@ void WarpZone_TrailParticles_WithMultiplier(entity own, float eff, vector org, v WarpZone_TrailParticles_trace_callback_eff = eff; WarpZone_TrailParticles_trace_callback_f = f; WarpZone_TrailParticles_trace_callback_flags = boxflags | PARTICLES_DRAWASTRAIL; - WarpZone_TraceBox_ThroughZone(org, '0 0 0', '0 0 0', end, MOVE_NOMONSTERS, world, world, WarpZone_TrailParticles_WithMultiplier_trace_callback); + WarpZone_TraceBox_ThroughZone(org, '0 0 0', '0 0 0', end, MOVE_NOMONSTERS, NULL, NULL, WarpZone_TrailParticles_WithMultiplier_trace_callback); } #endif @@ -667,12 +668,12 @@ entity WarpZone_FindRadius(vector org, float rad, bool needlineofsight) } .entity WarpZone_refsys; -void WarpZone_RefSys_GC() -{SELFPARAM(); +void WarpZone_RefSys_GC(entity this) +{ // garbage collect unused reference systems - self.nextthink = time + 1; - if(self.owner.WarpZone_refsys != self) - remove(self); + this.nextthink = time + 1; + if(this.owner.WarpZone_refsys != this) + delete(this); } void WarpZone_RefSys_CheckCreate(entity me) { @@ -680,7 +681,7 @@ void WarpZone_RefSys_CheckCreate(entity me) { me.WarpZone_refsys = new(warpzone_refsys); me.WarpZone_refsys.owner = me; - me.WarpZone_refsys.think = WarpZone_RefSys_GC; + setthink(me.WarpZone_refsys, WarpZone_RefSys_GC); me.WarpZone_refsys.nextthink = time + 1; WarpZone_Accumulator_Clear(me.WarpZone_refsys); } @@ -689,8 +690,8 @@ void WarpZone_RefSys_Clear(entity me) { if(me.WarpZone_refsys) { - remove(me.WarpZone_refsys); - me.WarpZone_refsys = world; + delete(me.WarpZone_refsys); + me.WarpZone_refsys = NULL; } } void WarpZone_RefSys_AddTransform(entity me, vector t, vector s) @@ -786,9 +787,9 @@ entity WarpZone_RefSys_SpawnSameRefSys(entity me) return e; } -float WarpZoneLib_ExactTrigger_Touch() -{SELFPARAM(); - return !WarpZoneLib_BoxTouchesBrush(other.absmin, other.absmax, self, other); +float WarpZoneLib_ExactTrigger_Touch(entity this, entity toucher) +{ + return !WarpZoneLib_BoxTouchesBrush(toucher.absmin, toucher.absmax, this, toucher); } @@ -802,7 +803,7 @@ void WarpZoneLib_MoveOutOfSolid_Expand(entity e, vector by) { // hit something // adjust origin in the other direction... - setorigin(e,e.origin - by * (1 - trace_fraction)); + setorigin(e, e.origin - by * (1 - trace_fraction)); } }