[nexuiz-commits] r8699 - in trunk/data/qcsrc: client server warpzonelib
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Sun Feb 28 14:43:23 EST 2010
Author: div0
Date: 2010-02-28 14:43:22 -0500 (Sun, 28 Feb 2010)
New Revision: 8699
Modified:
trunk/data/qcsrc/client/particles.qc
trunk/data/qcsrc/server/w_nex.qc
trunk/data/qcsrc/warpzonelib/client.qc
trunk/data/qcsrc/warpzonelib/common.qc
trunk/data/qcsrc/warpzonelib/common.qh
trunk/data/qcsrc/warpzonelib/server.qc
trunk/data/qcsrc/warpzonelib/server.qh
Log:
nex also supports warpzones now
Modified: trunk/data/qcsrc/client/particles.qc
===================================================================
--- trunk/data/qcsrc/client/particles.qc 2010-02-28 19:43:17 UTC (rev 8698)
+++ trunk/data/qcsrc/client/particles.qc 2010-02-28 19:43:22 UTC (rev 8699)
@@ -293,7 +293,7 @@
//draw either the old v2.3 beam or the new beam
if (cvar("cl_particles_oldnexbeam") && (getstati(STAT_ALLOW_OLDNEXBEAM) || isdemo()))
- trailparticles(world, particleeffectnum("TE_TEI_G3"), shotorg, endpos);
+ WarpZone_TrailParticles(world, particleeffectnum("TE_TEI_G3"), shotorg, endpos);
else
- trailparticles(world, particleeffectnum("nex_beam"), shotorg, endpos);
+ WarpZone_TrailParticles(world, particleeffectnum("nex_beam"), shotorg, endpos);
}
Modified: trunk/data/qcsrc/server/w_nex.qc
===================================================================
--- trunk/data/qcsrc/server/w_nex.qc 2010-02-28 19:43:17 UTC (rev 8698)
+++ trunk/data/qcsrc/server/w_nex.qc 2010-02-28 19:43:22 UTC (rev 8699)
@@ -8,9 +8,9 @@
WriteCoord(MSG_BROADCAST, w_shotorg_x);
WriteCoord(MSG_BROADCAST, w_shotorg_y);
WriteCoord(MSG_BROADCAST, w_shotorg_z);
- WriteCoord(MSG_BROADCAST, trace_endpos_x);
- WriteCoord(MSG_BROADCAST, trace_endpos_y);
- WriteCoord(MSG_BROADCAST, trace_endpos_z);
+ WriteCoord(MSG_BROADCAST, WarpZone_trace_endpos_x);
+ WriteCoord(MSG_BROADCAST, WarpZone_trace_endpos_y);
+ WriteCoord(MSG_BROADCAST, WarpZone_trace_endpos_z);
}
void W_Nex_Attack (void)
Modified: trunk/data/qcsrc/warpzonelib/client.qc
===================================================================
--- trunk/data/qcsrc/warpzonelib/client.qc 2010-02-28 19:43:17 UTC (rev 8698)
+++ trunk/data/qcsrc/warpzonelib/client.qc 2010-02-28 19:43:22 UTC (rev 8699)
@@ -1,4 +1,3 @@
-.vector warpzone_transform;
void WarpZone_Read(float isnew)
{
if not(self.enemy)
@@ -31,6 +30,10 @@
self.avelocity_z = ReadCoord();
self.avelocity = AnglesTransform_TurnDirectionFR(self.avelocity);
+
+ // for common code
+ self.warpzone_origin = self.enemy.oldorigin;
+ self.enemy.warpzone_origin = self.oldorigin;
self.warpzone_transform = AnglesTransform_Divide(self.avelocity, self.enemy.avelocity);
self.flags = FL_CAMERA;
@@ -57,9 +60,8 @@
if(e)
{
warpzone_saved = 1;
- warpzone_fixview_origin = AnglesTransform_Apply(e.warpzone_transform, warpzone_fixview_origin - e.enemy.oldorigin) + e.oldorigin;
- warpzone_fixview_angles = WarpZone_TransformVAngles(e.warpzone_transform, warpzone_fixview_angles);
- break;
+ warpzone_fixview_origin = WarpZone_TransformOrigin(e, warpzone_fixview_origin);
+ warpzone_fixview_angles = WarpZone_TransformVAngles(e, warpzone_fixview_angles);
}
// if we are near any warpzone planes - MOVE AWAY (work around nearclip)
Modified: trunk/data/qcsrc/warpzonelib/common.qc
===================================================================
--- trunk/data/qcsrc/warpzonelib/common.qc 2010-02-28 19:43:17 UTC (rev 8698)
+++ trunk/data/qcsrc/warpzonelib/common.qc 2010-02-28 19:43:22 UTC (rev 8699)
@@ -1,45 +1,7 @@
-vector WarpZone_TransformVAngles(vector t, vector ang)
-{
- float roll;
+.vector warpzone_origin;
+.vector warpzone_transform;
+.entity enemy;
- roll = ang_z;
- ang_z = 0;
-
- /*
- vector vf, vr, vu;
- print(vtos(ang), " input\n");
- makevectors(ang);
- vf = v_forward;
- vr = v_right;
- vu = v_up;
- print(vtos(vf), " -> ", vtos(AnglesTransform_Apply(t, vf)), "\n");
- print(vtos(vr), " -> ", vtos(AnglesTransform_Apply(t, vr)), "\n");
- print(vtos(vu), " -> ", vtos(AnglesTransform_Apply(t, vu)), "\n");
- */
-
- ang = AnglesTransform_ApplyToVAngles(t, ang);
- // FIXME when a roll comes out and angle is near +/-90 degrees
- // then roll can be incorporated into yaw and cancelled out
-
- /*
- print(vtos(ang), " output\n");
- makevectors(ang);
- print(vtos(vf), " -> ", vtos(v_forward), "\n");
- print(vtos(vr), " -> ", vtos(v_right), "\n");
- print(vtos(vu), " -> ", vtos(v_up), "\n");
- */
-
- ang = AnglesTransform_Normalize(ang, TRUE);
- ang = AnglesTransform_CancelRoll(ang);
-
- /*
- print(vtos(ang), " output\n");
- */
-
- ang_z = roll;
- return ang;
-}
-
vector WarpZoneLib_BoxTouchesBrush_mins;
vector WarpZoneLib_BoxTouchesBrush_maxs;
entity WarpZoneLib_BoxTouchesBrush_ent;
@@ -118,3 +80,89 @@
for(e = world; (e = find(e, classname, "trigger_warpzone")); )
e.solid = SOLID_TRIGGER;
}
+
+void WarpZone_TraceBox(vector org, vector mi, vector ma, vector end, float nomonsters, entity forent)
+{
+ float frac, sol;
+ vector o0, e0;
+ o0 = org;
+ e0 = end;
+ WarpZone_MakeAllSolid();
+ sol = -1;
+ frac = 0;
+ for(;;)
+ {
+ tracebox(org, mi, ma, end, nomonsters, forent);
+ if(sol < 0)
+ sol = trace_startsolid;
+ if(trace_fraction >= 1)
+ break;
+ frac = trace_fraction = frac + (1 - frac) * trace_fraction;
+ if(trace_ent.classname != "trigger_warpzone")
+ break;
+ // we hit a warpzone... so, let's perform the trace after the warp again
+ org = WarpZone_TransformOrigin(trace_ent, trace_endpos);
+ end = WarpZone_TransformOrigin(trace_ent, end);
+ }
+ WarpZone_MakeAllOther();
+ WarpZone_trace_endpos = o0 + (e0 - o0) * trace_fraction;
+}
+
+void WarpZone_TraceLine(vector org, vector end, float nomonsters, entity forent)
+{
+ WarpZone_TraceBox(org, '0 0 0', '0 0 0', end, nomonsters, forent);
+}
+
+void WarpZone_TrailParticles(entity own, float eff, vector org, vector end)
+{
+ float frac, sol;
+ WarpZone_MakeAllSolid();
+ sol = -1;
+ frac = 0;
+ for(;;)
+ {
+ traceline(org, end, MOVE_NOMONSTERS, world);
+ if(sol < 0)
+ sol = trace_startsolid;
+ //print(vtos(org), " to ", vtos(trace_endpos), "\n");
+ trailparticles(own, eff, org, trace_endpos);
+ if(trace_fraction >= 1)
+ break;
+ if(trace_ent.classname != "trigger_warpzone")
+ break;
+ // we hit a warpzone... so, let's perform the trace after the warp again
+ org = WarpZone_TransformOrigin(trace_ent, trace_endpos);
+ end = WarpZone_TransformOrigin(trace_ent, end);
+ }
+ WarpZone_MakeAllOther();
+}
+
+vector WarpZone_TransformOrigin(entity wz, vector v)
+{
+ return wz.enemy.warpzone_origin + AnglesTransform_Apply(wz.warpzone_transform, v - wz.warpzone_origin);
+}
+
+vector WarpZone_TransformVelocity(entity wz, vector v)
+{
+ return AnglesTransform_Apply(wz.warpzone_transform, v);
+}
+
+vector WarpZone_TransformAngles(entity wz, vector v)
+{
+ return AnglesTransform_ApplyToAngles(wz.warpzone_transform, v);
+}
+
+vector WarpZone_TransformVAngles(entity wz, vector ang)
+{
+ float roll;
+
+ roll = ang_z;
+ ang_z = 0;
+
+ ang = AnglesTransform_ApplyToVAngles(wz.warpzone_transform, ang);
+ ang = AnglesTransform_Normalize(ang, TRUE);
+ ang = AnglesTransform_CancelRoll(ang);
+
+ ang_z = roll;
+ return ang;
+}
Modified: trunk/data/qcsrc/warpzonelib/common.qh
===================================================================
--- trunk/data/qcsrc/warpzonelib/common.qh 2010-02-28 19:43:17 UTC (rev 8698)
+++ trunk/data/qcsrc/warpzonelib/common.qh 2010-02-28 19:43:22 UTC (rev 8699)
@@ -1,8 +1,17 @@
float FL_CAMERA = 8192;
-vector WarpZone_TransformVAngles(vector t, vector ang);
float WarpZoneLib_BoxTouchesBrush(vector mi, vector ma, entity e, entity ig);
entity WarpZone_Find(vector mi, vector ma);
void WarpZone_MakeAllSolid();
void WarpZone_MakeAllOther();
+
+vector WarpZone_trace_endpos; // UNtransformed endpos
+void WarpZone_TraceBox(vector org, vector min, vector max, vector end, float nomonsters, entity forent);
+void WarpZone_TraceLine(vector org, vector end, float nomonsters, entity forent);
+void WarpZone_TrailParticles(entity own, float eff, vector org, vector end);
+
+vector WarpZone_TransformOrigin(entity wz, vector v);
+vector WarpZone_TransformVelocity(entity wz, vector v);
+vector WarpZone_TransformAngles(entity wz, vector v);
+vector WarpZone_TransformVAngles(entity wz, vector v);
Modified: trunk/data/qcsrc/warpzonelib/server.qc
===================================================================
--- trunk/data/qcsrc/warpzonelib/server.qc 2010-02-28 19:43:17 UTC (rev 8698)
+++ trunk/data/qcsrc/warpzonelib/server.qc 2010-02-28 19:43:22 UTC (rev 8699)
@@ -23,9 +23,8 @@
}
// the transform
-.vector warpzone_origin, warpzone_angles;
+.vector warpzone_angles;
.vector warpzone_forward;
-.vector warpzone_transform;
float WarpZone_Teleport(entity player)
{
@@ -41,12 +40,12 @@
// this situation we may want to create a temporary clone
// entity of the player to fix graphics glitch
- o1 = AnglesTransform_Apply(self.warpzone_transform, o0 - self.warpzone_origin) + self.enemy.warpzone_origin;
- v1 = AnglesTransform_Apply(self.warpzone_transform, v0);
+ o1 = WarpZone_TransformOrigin(self, o0);
+ v1 = WarpZone_TransformVelocity(self, v0);
if(player.classname == "player")
- a1 = WarpZone_TransformVAngles(self.warpzone_transform, player.v_angle);
+ a1 = WarpZone_TransformVAngles(self, player.v_angle);
else
- a1 = AnglesTransform_ApplyToAngles(self.warpzone_transform, a0);
+ a1 = WarpZone_TransformAngles(self, a0);
// put him inside solid
tracebox(o1 - player.view_ofs, player.mins, player.maxs, o1 - player.view_ofs, MOVE_NOMONSTERS, player);
@@ -225,59 +224,3 @@
self.flags |= FL_CAMERA;
self.view_ofs = self.enemy.warpzone_origin;
}
-
-void WarpZone_TraceBox(vector org, vector mi, vector ma, vector end, float nomonsters, entity forent)
-{
- float frac, sol;
- vector o0, e0;
- o0 = org;
- e0 = end;
- WarpZone_MakeAllSolid();
- sol = -1;
- frac = 0;
- for(;;)
- {
- tracebox(org, mi, ma, end, nomonsters, forent);
- if(sol < 0)
- sol = trace_startsolid;
- if(trace_fraction >= 1)
- break;
- frac = trace_fraction = frac + (1 - frac) * trace_fraction;
- if(trace_ent.classname != "trigger_warpzone")
- break;
- // we hit a warpzone... so, let's perform the trace after the warp again
- org = AnglesTransform_Apply(trace_ent.warpzone_transform, trace_endpos - trace_ent.warpzone_origin) + trace_ent.enemy.warpzone_origin;
- end = AnglesTransform_Apply(trace_ent.warpzone_transform, end - trace_ent.warpzone_origin) + trace_ent.enemy.warpzone_origin;
- }
- WarpZone_MakeAllOther();
- WarpZone_trace_endpos = o0 + (e0 - o0) * trace_fraction;
-}
-
-void WarpZone_TraceLine(vector org, vector end, float nomonsters, entity forent)
-{
- WarpZone_TraceBox(org, '0 0 0', '0 0 0', end, nomonsters, forent);
-}
-
-void WarpZone_TrailParticles(entity own, float eff, vector org, vector end)
-{
- float frac, sol;
- WarpZone_MakeAllSolid();
- sol = -1;
- frac = 0;
- for(;;)
- {
- traceline(org, end, MOVE_NOMONSTERS, world);
- if(sol < 0)
- sol = trace_startsolid;
- //print(vtos(org), " to ", vtos(trace_endpos), "\n");
- trailparticles(own, eff, org, trace_endpos);
- if(trace_fraction >= 1)
- break;
- if(trace_ent.classname != "trigger_warpzone")
- break;
- // we hit a warpzone... so, let's perform the trace after the warp again
- org = AnglesTransform_Apply(trace_ent.warpzone_transform, trace_endpos - trace_ent.warpzone_origin) + trace_ent.enemy.warpzone_origin;
- end = AnglesTransform_Apply(trace_ent.warpzone_transform, end - trace_ent.warpzone_origin) + trace_ent.enemy.warpzone_origin;
- }
- WarpZone_MakeAllOther();
-}
Modified: trunk/data/qcsrc/warpzonelib/server.qh
===================================================================
--- trunk/data/qcsrc/warpzonelib/server.qh 2010-02-28 19:43:17 UTC (rev 8698)
+++ trunk/data/qcsrc/warpzonelib/server.qh 2010-02-28 19:43:22 UTC (rev 8699)
@@ -8,8 +8,3 @@
// server must also define a float called ENT_CLIENT_WARPZONE for the initial byte of WarpZone entities
const float ENT_CLIENT_WARPZONE;
-
-vector WarpZone_trace_endpos; // UNtransformed endpos
-void WarpZone_TraceBox(vector org, vector min, vector max, vector end, float nomonsters, entity forent);
-void WarpZone_TraceLine(vector org, vector end, float nomonsters, entity forent);
-void WarpZone_TrailParticles(entity own, float eff, vector org, vector end);
More information about the nexuiz-commits
mailing list