[nexuiz-commits] r8692 - in trunk/data: qcsrc/warpzonelib scripts

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sun Feb 28 14:42:51 EST 2010


Author: div0
Date: 2010-02-28 14:42:50 -0500 (Sun, 28 Feb 2010)
New Revision: 8692

Modified:
   trunk/data/qcsrc/warpzonelib/anglestransform.qc
   trunk/data/qcsrc/warpzonelib/anglestransform.qh
   trunk/data/qcsrc/warpzonelib/client.qc
   trunk/data/qcsrc/warpzonelib/common.qc
   trunk/data/qcsrc/warpzonelib/server.qc
   trunk/data/scripts/common.shader
Log:
more warpzone fixes - now angled warpzones work too

Modified: trunk/data/qcsrc/warpzonelib/anglestransform.qc
===================================================================
--- trunk/data/qcsrc/warpzonelib/anglestransform.qc	2010-02-28 19:42:46 UTC (rev 8691)
+++ trunk/data/qcsrc/warpzonelib/anglestransform.qc	2010-02-28 19:42:50 UTC (rev 8692)
@@ -93,10 +93,18 @@
 	return t;
 }
 
+vector AnglesTransform_ApplyToAngles(vector transform, vector v)
+{
+	//v_x = -v_x;
+	v = AnglesTransform_Multiply(transform, v);
+	//v_x = -v_x;
+	return v;
+}
+
 vector AnglesTransform_ApplyToVAngles(vector transform, vector v)
 {
 	v_x = -v_x;
-	v = AnglesTransform_ApplyToAngles(transform, v);
+	v = AnglesTransform_Multiply(transform, v);
 	v_x = -v_x;
 	return v;
 }

Modified: trunk/data/qcsrc/warpzonelib/anglestransform.qh
===================================================================
--- trunk/data/qcsrc/warpzonelib/anglestransform.qh	2010-02-28 19:42:46 UTC (rev 8691)
+++ trunk/data/qcsrc/warpzonelib/anglestransform.qh	2010-02-28 19:42:50 UTC (rev 8692)
@@ -11,5 +11,5 @@
 
 vector AnglesTransform_Normalize(vector t, float minimize_roll); // makes sure all angles are in their range: yaw in -180..180, pitch in -90..90, roll in -180..180 (or if minimize_roll is set, pitch in -180..180, roll in -90..90)
 
-#define AnglesTransform_ApplyToAngles(t,v) AnglesTransform_Multiply(t, v)
+vector AnglesTransform_ApplyToAngles(vector transform, vector v);
 vector AnglesTransform_ApplyToVAngles(vector transform, vector v);

Modified: trunk/data/qcsrc/warpzonelib/client.qc
===================================================================
--- trunk/data/qcsrc/warpzonelib/client.qc	2010-02-28 19:42:46 UTC (rev 8691)
+++ trunk/data/qcsrc/warpzonelib/client.qc	2010-02-28 19:42:50 UTC (rev 8692)
@@ -48,27 +48,45 @@
 vector warpzone_saved_angles;
 void WarpZone_FixView()
 {
+	float pd;
 	entity e;
-	float roll;
 	warpzone_saved = 0;
+	warpzone_saved_origin = warpzone_fixview_origin;
+	warpzone_saved_angles = warpzone_fixview_angles;
+
 	for(e = world; (e = find(e, classname, "warpzone_to")); )
 	{
-		//print(sprintf("does %s (%s to %s) touch %s?\n", e.model, vtos(e.absmin), vtos(e.absmax), vtos(pmove_org)));
-		if(WarpZoneLib_BoxTouchesBrush(pmove_org, pmove_org, e, world))
+		if(WarpZoneLib_BoxTouchesBrush(warpzone_fixview_origin, warpzone_fixview_origin, e, world))
 		{
-			warpzone_saved_origin = warpzone_fixview_origin;
-			warpzone_saved_angles = warpzone_fixview_angles;
 			warpzone_saved = 1;
-			roll = warpzone_fixview_angles_z;
-			warpzone_fixview_angles_z = 0;
 			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);
-			warpzone_fixview_angles_z = roll;
-			R_SetView(VF_ORIGIN, warpzone_fixview_origin);
-			R_SetView(VF_ANGLES, warpzone_fixview_angles);
 			break;
 		}
 	}
+
+	// if we are near any warpzone planes - MOVE AWAY (work around nearclip)
+	float nearclip = 2;
+	for(e = world; (e = find(e, classname, "warpzone_to")); )
+	{
+		if(WarpZoneLib_BoxTouchesBrush(warpzone_fixview_origin - '1 1 1' * nearclip, warpzone_fixview_origin + '1 1 1' * nearclip, e, world))
+		{
+			fixedmakevectors(e.enemy.avelocity);
+			pd = (warpzone_fixview_origin - e.enemy.oldorigin) * v_forward;
+			if(pd >= 0 && pd < nearclip)
+			{
+				warpzone_saved = 1;
+				warpzone_fixview_origin = warpzone_fixview_origin + v_forward * (nearclip - pd);
+				pd = (warpzone_fixview_origin - e.enemy.oldorigin) * v_forward;
+			}
+		}
+	}
+
+	if(warpzone_saved)
+	{
+		R_SetView(VF_ORIGIN, warpzone_fixview_origin);
+		R_SetView(VF_ANGLES, warpzone_fixview_angles);
+	}
 }
 void WarpZone_UnFixView()
 {

Modified: trunk/data/qcsrc/warpzonelib/common.qc
===================================================================
--- trunk/data/qcsrc/warpzonelib/common.qc	2010-02-28 19:42:46 UTC (rev 8691)
+++ trunk/data/qcsrc/warpzonelib/common.qc	2010-02-28 19:42:50 UTC (rev 8692)
@@ -1,9 +1,38 @@
 vector WarpZone_TransformVAngles(vector t, vector ang)
 {
 	float roll;
+
 	roll = ang_z;
 	ang_z = 0;
-	ang = AnglesTransform_Normalize(AnglesTransform_ApplyToVAngles(t, ang), TRUE);
+
+	/*
+	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);
+
+	/*
+	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);
+
+	/*
+	print(vtos(ang), " output\n");
+	*/
+
 	ang_z = roll;
 	return ang;
 }

Modified: trunk/data/qcsrc/warpzonelib/server.qc
===================================================================
--- trunk/data/qcsrc/warpzonelib/server.qc	2010-02-28 19:42:46 UTC (rev 8691)
+++ trunk/data/qcsrc/warpzonelib/server.qc	2010-02-28 19:42:50 UTC (rev 8692)
@@ -52,14 +52,21 @@
 	tracebox(o1 - player.view_ofs, player.mins, player.maxs, o1 - player.view_ofs, MOVE_NOMONSTERS, player);
 	if(trace_startsolid)
 	{
-		setorigin(player, o1 - player.view_ofs);
+		vector mi, ma;
+		mi = player.mins;
+		ma = player.maxs;
+		setsize(player, mi - player.view_ofs, ma - player.view_ofs);
+		setorigin(player, o1);
 		if(WarpZoneLib_MoveOutOfSolid(player))
 		{
+			o1 = player.origin;
+			setsize(player, mi, ma);
 			setorigin(player, o0);
-			o1 = player.origin + player.view_ofs;
 		}
 		else
 		{
+			print("would have to put player in solid, won't do that\n");
+			setsize(player, mi, ma);
 			setorigin(player, o0 - player.view_ofs);
 			return 0; // cannot fix
 		}
@@ -87,7 +94,8 @@
 	if(other.movetype == MOVETYPE_NONE)
 		return;
 
-	EXACTTRIGGER_TOUCH;
+	if(WarpZoneLib_ExactTrigger_Touch())
+		return;
 
 	e = self.enemy;
 	if(WarpZone_Teleport(other))
@@ -186,9 +194,6 @@
 			self.enemy.enemy = self;
 		}
 	}
-
-	// now enable touch
-	self.touch = WarpZone_Touch;
 }
 
 void WarpZone_InitStep_UpdateTransform()
@@ -212,4 +217,7 @@
 	// 3. store off a saved forward vector for plane hit decisions
 	fixedmakevectors(self.warpzone_angles);
 	self.warpzone_forward = v_forward;
+
+	// now enable touch
+	self.touch = WarpZone_Touch;
 }

Modified: trunk/data/scripts/common.shader
===================================================================
--- trunk/data/scripts/common.shader	2010-02-28 19:42:46 UTC (rev 8691)
+++ trunk/data/scripts/common.shader	2010-02-28 19:42:50 UTC (rev 8692)
@@ -352,7 +352,7 @@
 textures/common/warpzone
 {
 	surfaceparm nolightmap
-	surfaceparm nonsolid
+	// surfaceparm nonsolid // no, it must be solid like trigger
 	surfaceparm trans
 	surfaceparm nomarks
 	{



More information about the nexuiz-commits mailing list