From 8eb24128edcc6ab4eaa0d6966408929988b80f91 Mon Sep 17 00:00:00 2001 From: div0 Date: Sun, 28 Feb 2010 19:45:54 +0000 Subject: [PATCH] fix some angles mess :P git-svn-id: svn://svn.icculus.org/nexuiz/trunk@8723 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/client/projectile.qc | 7 +++-- data/qcsrc/server/miscfunctions.qc | 12 ++++++-- data/qcsrc/server/w_porto.qc | 2 +- data/qcsrc/warpzonelib/anglestransform.qc | 36 +++++++++++++++++++++++ data/qcsrc/warpzonelib/anglestransform.qh | 4 +++ 5 files changed, 55 insertions(+), 6 deletions(-) diff --git a/data/qcsrc/client/projectile.qc b/data/qcsrc/client/projectile.qc index 34299ea31..2730a322d 100644 --- a/data/qcsrc/client/projectile.qc +++ b/data/qcsrc/client/projectile.qc @@ -88,10 +88,13 @@ void Projectile_Draw() default: break; } - self.angles = AnglesTransform_ApplyToAngles(self.angles, rot * (t - self.spawntime)); + self.angles = AnglesTransform_ToAngles(AnglesTransform_Multiply(AnglesTransform_FromAngles(self.angles), rot * (t - self.spawntime))); } - fixedmakevectors(self.angles); + vector ang; + ang = self.angles; + ang_x = -ang_x; + makevectors(ang); a = 1 - (time - self.fade_time) * self.fade_rate; if(a <= 0) diff --git a/data/qcsrc/server/miscfunctions.qc b/data/qcsrc/server/miscfunctions.qc index 123d39a86..266849cae 100644 --- a/data/qcsrc/server/miscfunctions.qc +++ b/data/qcsrc/server/miscfunctions.qc @@ -2423,7 +2423,9 @@ void attach_sameorigin(entity e, entity to, string tag) // current forward and up directions if (substring(e.model, 0, 1) == "*") // bmodels have their own rules - e.angles_x = -e.angles_x; + e.angles = AnglesTransform_FromVAngles(e.angles); + else + e.angles = AnglesTransform_FromAngles(e.angles); fixedmakevectors(e.angles); // untransform forward, up! @@ -2436,7 +2438,9 @@ void attach_sameorigin(entity e, entity to, string tag) e.angles = fixedvectoangles2(e_forward, e_up); if (substring(e.model, 0, 1) == "*") // bmodels have their own rules - e.angles_x = -e.angles_x; + e.angles = AnglesTransform_ToVAngles(e.angles); + else + e.angles = AnglesTransform_ToAngles(e.angles); setattachment(e, to, tag); setorigin(e, e.origin); @@ -2448,7 +2452,9 @@ void detach_sameorigin(entity e) org = gettaginfo(e, 0); e.angles = fixedvectoangles2(v_forward, v_up); if (substring(e.model, 0, 1) == "*") // bmodels have their own rules - e.angles_x = -e.angles_x; + e.angles = AnglesTransform_ToVAngles(e.angles); + else + e.angles = AnglesTransform_ToAngles(e.angles); setorigin(e, org); setattachment(e, world, ""); setorigin(e, e.origin); diff --git a/data/qcsrc/server/w_porto.qc b/data/qcsrc/server/w_porto.qc index 63695c0bc..55872df4f 100644 --- a/data/qcsrc/server/w_porto.qc +++ b/data/qcsrc/server/w_porto.qc @@ -193,7 +193,7 @@ void W_Porto_Attack (void) gren.portal_id = time; self.porto_current = gren; gren.playerid = self.playerid; - fixedmakevectors(vectoangles(gren.velocity)); + fixedmakevectors(fixedvectoangles(gren.velocity)); gren.right_vector = v_right; gren.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_PLAYERCLIP; diff --git a/data/qcsrc/warpzonelib/anglestransform.qc b/data/qcsrc/warpzonelib/anglestransform.qc index 3bc749add..56f72bfd7 100644 --- a/data/qcsrc/warpzonelib/anglestransform.qc +++ b/data/qcsrc/warpzonelib/anglestransform.qc @@ -154,6 +154,24 @@ vector AnglesTransform_ApplyToVAngles(vector transform, vector v) v = AnglesTransform_Multiply(transform, v); return v; } +vector AnglesTransform_FromAngles(vector v) +{ + v_x = -v_x; + return v; +} +vector AnglesTransform_ToAngles(vector v) +{ + v_x = -v_x; + return v; +} +vector AnglesTransform_FromVAngles(vector v) +{ + return v; +} +vector AnglesTransform_ToVAngles(vector v) +{ + return v; +} #else vector AnglesTransform_ApplyToAngles(vector transform, vector v) { @@ -167,6 +185,24 @@ vector AnglesTransform_ApplyToVAngles(vector transform, vector v) v_x = -v_x; return v; } +vector AnglesTransform_FromAngles(vector v) +{ + return v; +} +vector AnglesTransform_ToAngles(vector v) +{ + return v; +} +vector AnglesTransform_FromVAngles(vector v) +{ + v_x = -v_x; + return v; +} +vector AnglesTransform_ToVAngles(vector v) +{ + v_x = -v_x; + return v; +} #endif vector AnglesTransform_Multiply_GetPostShift(vector t0, vector st0, vector t1, vector st1) diff --git a/data/qcsrc/warpzonelib/anglestransform.qh b/data/qcsrc/warpzonelib/anglestransform.qh index 6c7166de7..045fb24b3 100644 --- a/data/qcsrc/warpzonelib/anglestransform.qh +++ b/data/qcsrc/warpzonelib/anglestransform.qh @@ -21,6 +21,10 @@ vector AnglesTransform_Normalize(vector t, float minimize_roll); // makes sure a vector AnglesTransform_ApplyToAngles(vector transform, vector v); vector AnglesTransform_ApplyToVAngles(vector transform, vector v); +vector AnglesTransform_FromAngles(vector v); +vector AnglesTransform_ToAngles(vector v); +vector AnglesTransform_FromVAngles(vector v); +vector AnglesTransform_ToVAngles(vector v); // transformed = original * transform + postshift vector AnglesTransform_Multiply_GetPostShift(vector sf0, vector st0, vector t1, vector st1); -- 2.39.2