[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