[nexuiz-commits] r8696 - in trunk/data/qcsrc: client server warpzonelib
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Sun Feb 28 14:43:08 EST 2010
Author: div0
Date: 2010-02-28 14:43:08 -0500 (Sun, 28 Feb 2010)
New Revision: 8696
Modified:
trunk/data/qcsrc/client/projectile.qc
trunk/data/qcsrc/server/cheats.qc
trunk/data/qcsrc/server/portals.qc
trunk/data/qcsrc/warpzonelib/anglestransform.qc
trunk/data/qcsrc/warpzonelib/anglestransform.qh
trunk/data/qcsrc/warpzonelib/common.qc
Log:
turn the angles the other way for consistency
Modified: trunk/data/qcsrc/client/projectile.qc
===================================================================
--- trunk/data/qcsrc/client/projectile.qc 2010-02-28 19:43:03 UTC (rev 8695)
+++ trunk/data/qcsrc/client/projectile.qc 2010-02-28 19:43:08 UTC (rev 8696)
@@ -88,7 +88,7 @@
default:
break;
}
- self.angles = AnglesTransform_Multiply(self.angles, rot * (t - self.spawntime));
+ self.angles = AnglesTransform_ApplyToAngles(self.angles, rot * (t - self.spawntime));
}
fixedmakevectors(self.angles);
Modified: trunk/data/qcsrc/server/cheats.qc
===================================================================
--- trunk/data/qcsrc/server/cheats.qc 2010-02-28 19:43:03 UTC (rev 8695)
+++ trunk/data/qcsrc/server/cheats.qc 2010-02-28 19:43:08 UTC (rev 8696)
@@ -339,7 +339,7 @@
if(f == 1)
{
e.angles = fixedvectoangles2(trace_plane_normal, v_forward);
- e.angles = AnglesTransform_Multiply(e.angles, '-90 0 0'); // so unrotated models work
+ e.angles = AnglesTransform_ApplyToAngles(e.angles, '-90 0 0'); // so unrotated models work
}
oldself = self;
self = e;
Modified: trunk/data/qcsrc/server/portals.qc
===================================================================
--- trunk/data/qcsrc/server/portals.qc 2010-02-28 19:43:03 UTC (rev 8695)
+++ trunk/data/qcsrc/server/portals.qc 2010-02-28 19:43:08 UTC (rev 8696)
@@ -30,13 +30,13 @@
ang = vangle;
/*
ang_x = bound(-89, mod(-ang_x + 180, 360) - 180, 89);
- ang = AnglesTransform_Multiply(transform, ang);
+ ang = AnglesTransform_ApplyToVAngles(transform, ang);
*/
// PLAYERS use different math
ang_x = -ang_x;
- //print("reference: ", vtos(AnglesTransform_Multiply(transform, ang)), "\n");
+ //print("reference: ", vtos(AnglesTransform_ApplyToVAngles(transform, ang)), "\n");
fixedmakevectors(ang);
old_forward = v_forward;
@@ -144,7 +144,7 @@
if(player.classname == "player")
ang = Portal_ApplyTransformToPlayerAngle(transform, player.v_angle);
else
- ang = AnglesTransform_Multiply(transform, player.angles);
+ ang = AnglesTransform_ApplyToAngles(transform, player.angles);
// factor -1 allows chaining portals, but may be weird
player.right_vector = -1 * AnglesTransform_Apply(transform, player.right_vector);
Modified: trunk/data/qcsrc/warpzonelib/anglestransform.qc
===================================================================
--- trunk/data/qcsrc/warpzonelib/anglestransform.qc 2010-02-28 19:43:03 UTC (rev 8695)
+++ trunk/data/qcsrc/warpzonelib/anglestransform.qc 2010-02-28 19:43:08 UTC (rev 8696)
@@ -1,10 +1,26 @@
-// helper function
+#ifdef POSITIVE_PITCH_IS_DOWN
+vector fixedvectoangles(vector a)
+{
+ vector ang;
+ ang = vectoangles(a);
+ ang_x = -ang_x;
+ return ang;
+}
+vector fixedvectoangles2(vector a, vector b)
+{
+ vector ang;
+ ang = vectoangles2(a, b);
+ ang_x = -ang_x;
+ return ang;
+}
+#else
void fixedmakevectors(vector a)
{
// a makevectors that actually inverts vectoangles
a_x = -a_x;
makevectors(a);
}
+#endif
// angles transforms
// angles in fixedmakevectors/fixedvectoangles space
@@ -12,8 +28,8 @@
{
fixedmakevectors(transform);
return v_forward * v_x
- + v_right * (-v_y)
- + v_up * v_z;
+ + v_right * (-v_y)
+ + v_up * v_z;
}
vector AnglesTransform_Multiply(vector t1, vector t2)
@@ -93,18 +109,62 @@
return t;
}
+vector AnglesTransform_CancelRoll(vector t)
+{
+ const float epsilon = 30;
+ float f;
+
+ // constraints:
+ // forward vector (NOT SO important)
+ // right vector, up vector: screen rotation (MORE important)
+ // choose best match among all pitch-yaw only rotations
+
+ // FIXME find a better method
+
+ f = fabs(t_x - (-90)) / epsilon;
+ if(f < 1)
+ {
+ //t_x = -90;
+ t_y += t_z;
+ t_z = 0;
+ }
+ else
+ {
+ f = fabs(t_x - 90) / epsilon;
+ if(f < 1)
+ {
+ //t_x = 90;
+ t_y -= t_z;
+ t_z = 0;
+ }
+ }
+ return t;
+}
+
+#ifdef POSITIVE_PITCH_IS_DOWN
vector AnglesTransform_ApplyToAngles(vector transform, vector v)
{
- //v_x = -v_x;
+ v_x = -v_x;
v = AnglesTransform_Multiply(transform, v);
- //v_x = -v_x;
+ v_x = -v_x;
return v;
}
-
vector AnglesTransform_ApplyToVAngles(vector transform, vector v)
{
+ v = AnglesTransform_Multiply(transform, v);
+ return v;
+}
+#else
+vector AnglesTransform_ApplyToAngles(vector transform, vector v)
+{
+ v = AnglesTransform_Multiply(transform, v);
+ return v;
+}
+vector AnglesTransform_ApplyToVAngles(vector transform, vector v)
+{
v_x = -v_x;
v = AnglesTransform_Multiply(transform, v);
v_x = -v_x;
return v;
}
+#endif
Modified: trunk/data/qcsrc/warpzonelib/anglestransform.qh
===================================================================
--- trunk/data/qcsrc/warpzonelib/anglestransform.qh 2010-02-28 19:43:03 UTC (rev 8695)
+++ trunk/data/qcsrc/warpzonelib/anglestransform.qh 2010-02-28 19:43:08 UTC (rev 8696)
@@ -1,6 +1,14 @@
+#define POSITIVE_PITCH_IS_DOWN
+
+#ifdef POSITIVE_PITCH_IS_DOWN
+#define fixedmakevectors makevectors
+vector fixedvectoangles(vector a);
+vector fixedvectoangles2(vector a, vector b);
+#else
void fixedmakevectors(vector a);
#define fixedvectoangles2 vectoangles2
#define fixedvectoangles vectoangles
+#endif
vector AnglesTransform_Apply(vector transform, vector v);
vector AnglesTransform_Multiply(vector t1, vector t2);
Modified: trunk/data/qcsrc/warpzonelib/common.qc
===================================================================
--- trunk/data/qcsrc/warpzonelib/common.qc 2010-02-28 19:43:03 UTC (rev 8695)
+++ trunk/data/qcsrc/warpzonelib/common.qc 2010-02-28 19:43:08 UTC (rev 8696)
@@ -30,6 +30,7 @@
*/
ang = AnglesTransform_Normalize(ang, TRUE);
+ ang = AnglesTransform_CancelRoll(ang);
/*
print(vtos(ang), " output\n");
More information about the nexuiz-commits
mailing list