r4377 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sat Sep 6 11:17:15 EDT 2008


Author: div0
Date: 2008-09-06 11:17:14 -0400 (Sat, 06 Sep 2008)
New Revision: 4377

Modified:
   trunk/data/qcsrc/server/portals.qc
Log:
better fix for the portal math


Modified: trunk/data/qcsrc/server/portals.qc
===================================================================
--- trunk/data/qcsrc/server/portals.qc	2008-09-06 15:00:48 UTC (rev 4376)
+++ trunk/data/qcsrc/server/portals.qc	2008-09-06 15:17:14 UTC (rev 4377)
@@ -78,6 +78,7 @@
 float Portal_TeleportPlayer(entity teleporter, entity player)
 {
 	vector from, to, safe, step, transform, ang, newvel;
+	vector old_forward, new_forward;
 	float planeshift, s, t;
 	from = teleporter.origin;
 	transform = teleporter.portal_transform;
@@ -126,8 +127,42 @@
 	if(player.classname == "player")
 	{
 		ang = player.v_angle;
+		/*
 		ang_x = bound(-89, mod(-ang_x + 180, 360) - 180, 89);
 		ang = Portal_Transform_Multiply(transform, ang);
+		*/
+
+		// PLAYERS use different math
+		ang_x = -ang_x;
+		makevectors(ang);
+		old_forward = v_forward;
+		old_up = v_up;
+
+		// their forward aiming direction is portalled...
+		new_forward = Portal_Transform_Multiply(transform, old_forward);
+		new_up = Portal_Transform_Multiply(transform, old_up);
+
+		// but their "up" direction is difficult
+		// it must always go up...
+		// but if I used vectoangles2 on these now, it'd put part of it in the "roll" component
+		// DO NOT WANT
+		
+		if(new_forward_z > 0.9) // far up; in this case, the "up" vector points backwards
+		{
+			ang = fixedvectoangles(new_forward); // this still gets us a nice pitch value...
+			ang_y = vectoyaw(-1 * new_up); // this vector is the yaw we want
+		}
+		else if(new_forward_z < -0.9) // far down; in this case, the "up" vector points forward
+		{
+			ang = fixedvectoangles(new_forward); // this still gets us a nice pitch value...
+			ang_y = vectoyaw(new_up); // this vector is the yaw we want
+		}
+		else
+		{
+			// good angles
+			ang = fixedvectoangles2(new_forward, new_up);
+		}
+
 		ang_z = player.angles_z;
 	}
 	else




More information about the nexuiz-commits mailing list