[nexuiz-commits] r8711 - trunk/data/qcsrc/warpzonelib
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Sun Feb 28 14:44:20 EST 2010
Author: div0
Date: 2010-02-28 14:44:20 -0500 (Sun, 28 Feb 2010)
New Revision: 8711
Modified:
trunk/data/qcsrc/warpzonelib/anglestransform.qc
trunk/data/qcsrc/warpzonelib/anglestransform.qh
trunk/data/qcsrc/warpzonelib/common.qc
trunk/data/qcsrc/warpzonelib/common.qh
Log:
we don't need preshift, all transforms can be represented as one angles and one shift
Modified: trunk/data/qcsrc/warpzonelib/anglestransform.qc
===================================================================
--- trunk/data/qcsrc/warpzonelib/anglestransform.qc 2010-02-28 19:44:16 UTC (rev 8710)
+++ trunk/data/qcsrc/warpzonelib/anglestransform.qc 2010-02-28 19:44:20 UTC (rev 8711)
@@ -169,17 +169,14 @@
}
#endif
-vector AnglesTransform_Multiply_GetPreShift(vector sf0, vector t0, vector st0, vector sf1, vector t1, vector st1)
+vector AnglesTransform_Multiply_GetPostShift(vector t0, vector st0, vector t1, vector st1)
{
// we want the result of:
- // t0 * (t1 * (p - sf1) + st1 - sf0) + st0
- // t0 * t1 * (p - sf1) + t0 * (st1 - sf0) + st0
- return sf1;
+ // t0 * (t1 * p + st1) + st0
+ // t0 * t1 * p + t0 * st1 + st0
+ return st0 + AnglesTransform_Apply(t0, st1);
}
-vector AnglesTransform_Multiply_GetPostShift(vector sf0, vector t0, vector st0, vector sf1, vector t1, vector st1)
+vector AnglesTransform_PrePostShift_GetPostShift(vector sf, vector t, vector st)
{
- // we want the result of:
- // t0 * (t1 * (p - sf1) + st1 - sf0) + st0
- // t0 * t1 * (p - sf1) + t0 * (st1 - sf0) + st0
- return AnglesTransform_Apply(t0, st1 - sf0) + st0;
+ return st - AnglesTransform_Apply(t, sf);
}
Modified: trunk/data/qcsrc/warpzonelib/anglestransform.qh
===================================================================
--- trunk/data/qcsrc/warpzonelib/anglestransform.qh 2010-02-28 19:44:16 UTC (rev 8710)
+++ trunk/data/qcsrc/warpzonelib/anglestransform.qh 2010-02-28 19:44:20 UTC (rev 8711)
@@ -22,6 +22,6 @@
vector AnglesTransform_ApplyToAngles(vector transform, vector v);
vector AnglesTransform_ApplyToVAngles(vector transform, vector v);
-// transformed = (original - preshift) * transform + postshift
-vector AnglesTransform_Multiply_GetPreShift(vector sf0, vector t0, vector st0, vector sf1, vector t1, vector st1);
-vector AnglesTransform_Multiply_GetPostShift(vector sf0, vector t0, vector st0, vector sf1, vector t1, vector st1);
+// transformed = original * transform + postshift
+vector AnglesTransform_Multiply_GetPostShift(vector sf0, vector st0, vector t1, vector st1);
+vector AnglesTransform_PrePostShift_GetPostShift(vector sf, vector t, vector st);
Modified: trunk/data/qcsrc/warpzonelib/common.qc
===================================================================
--- trunk/data/qcsrc/warpzonelib/common.qc 2010-02-28 19:44:16 UTC (rev 8710)
+++ trunk/data/qcsrc/warpzonelib/common.qc 2010-02-28 19:44:20 UTC (rev 8711)
@@ -1,6 +1,7 @@
void WarpZone_SetUp(entity e, vector my_org, vector my_ang, vector other_org, vector other_ang)
{
e.warpzone_transform = AnglesTransform_Divide(other_ang, AnglesTransform_TurnDirectionFR(my_ang));
+ e.warpzone_shift = AnglesTransform_PrePostShift_GetPostShift(my_org, e.warpzone_transform, other_org);
e.warpzone_origin = my_org;
e.warpzone_targetorigin = other_org;
e.warpzone_angles = my_ang;
@@ -36,8 +37,6 @@
if (trace_ent == WarpZoneLib_BoxTouchesBrush_ent)
return 1;
-
-
se = trace_ent;
s = se.solid;
se.solid = SOLID_NOT;
@@ -279,7 +278,7 @@
vector WarpZone_TransformOrigin(entity wz, vector v)
{
- return wz.warpzone_targetorigin + AnglesTransform_Apply(wz.warpzone_transform, v - wz.warpzone_origin);
+ return wz.warpzone_shift + AnglesTransform_Apply(wz.warpzone_transform, v);
}
vector WarpZone_TransformVelocity(entity wz, vector v)
@@ -309,7 +308,7 @@
vector WarpZone_UnTransformOrigin(entity wz, vector v)
{
- return wz.warpzone_origin + AnglesTransform_Apply(AnglesTransform_Invert(wz.warpzone_transform), v - wz.warpzone_targetorigin);
+ return AnglesTransform_Apply(AnglesTransform_Invert(wz.warpzone_transform), v - wz.warpzone_shift);
}
vector WarpZone_UnTransformVelocity(entity wz, vector v)
@@ -348,13 +347,13 @@
.float WarpZone_findradius_hit;
.entity WarpZone_findradius_next;
-void WarpZone_FindRadius_Recurse(vector org, float rad, vector org0, vector shift0, vector transform, vector shift1, float needlineofsight)
+void WarpZone_FindRadius_Recurse(vector org, float rad, vector org0, vector transform, vector shift, float needlineofsight)
// blast origin of current search original blast origin how to untransform (victim to blast system)
{
vector org_new;
vector org0_new;
- vector shift0_new, transform_new, shift1_new;
- vector transform_second;
+ vector shift_new, transform_new;
+ vector shift_second, transform_second;
vector p;
entity e, e0;
entity wz;
@@ -390,8 +389,7 @@
else
{
e.warpzone_transform = transform;
- e.warpzone_origin = shift0;
- e.warpzone_targetorigin = shift1;
+ e.warpzone_shift = shift;
e.WarpZone_findradius_hit = 1;
}
@@ -404,14 +402,14 @@
org_new = trace_endpos;
transform_second = AnglesTransform_Invert(e.warpzone_transform);
+ shift_second = AnglesTransform_PrePostShift_GetPostShift(e.warpzone_shift, transform_second, '0 0 0'); // invert the shift
transform_new = AnglesTransform_Multiply(transform, transform_second);
- shift0_new = AnglesTransform_Multiply_GetPreShift(shift0, transform, shift1, e.warpzone_targetorigin, transform_second, e.warpzone_origin);
- shift1_new = AnglesTransform_Multiply_GetPostShift(shift0, transform, shift1, e.warpzone_targetorigin, transform_second, e.warpzone_origin);
+ shift_new = AnglesTransform_Multiply_GetPostShift(transform, shift, transform_second, shift_second);
WarpZone_FindRadius_Recurse(
org_new,
bound(0, rad - vlen(org_new - org0_new), rad - 8),
org0_new,
- shift0_new, transform_new, shift1_new,
+ transform_new, shift_new,
needlineofsight);
e.WarpZone_findradius_hit = 0;
e.enemy.WarpZone_findradius_hit = 0;
@@ -420,7 +418,7 @@
entity WarpZone_FindRadius(vector org, float rad, float needlineofsight)
{
entity e0, e;
- WarpZone_FindRadius_Recurse(org, rad, org, '0 0 0', '0 0 0', '0 0 0', needlineofsight);
+ WarpZone_FindRadius_Recurse(org, rad, org, '0 0 0', '0 0 0', needlineofsight);
e0 = findchainfloat(WarpZone_findradius_hit, 1);
for(e = e0; e; e = e.chain)
e.WarpZone_findradius_hit = 0;
@@ -430,18 +428,15 @@
void WarpZone_Accumulator_Clear(entity acc)
{
acc.warpzone_transform = '0 0 0';
- acc.warpzone_origin = '0 0 0';
- acc.warpzone_targetorigin = '0 0 0';
+ acc.warpzone_shift = '0 0 0';
}
void WarpZone_Accumulator_Add(entity acc, entity wz)
{
- vector sf, t, st;
- sf = AnglesTransform_Multiply_GetPreShift(wz.warpzone_origin, wz.warpzone_transform, wz.warpzone_targetorigin, acc.warpzone_origin, acc.warpzone_transform, acc.warpzone_targetorigin);
+ vector t, st;
t = AnglesTransform_Multiply(wz.warpzone_transform, acc.warpzone_transform);
- st = AnglesTransform_Multiply_GetPostShift(wz.warpzone_origin, wz.warpzone_transform, wz.warpzone_targetorigin, acc.warpzone_origin, acc.warpzone_transform, acc.warpzone_targetorigin);
- acc.warpzone_origin = sf;
+ st = AnglesTransform_Multiply_GetPostShift(wz.warpzone_transform, wz.warpzone_shift, acc.warpzone_transform, acc.warpzone_shift);
acc.warpzone_transform = t;
- acc.warpzone_targetorigin = st;
+ acc.warpzone_shift = st;
}
.entity WarpZone_refsys;
Modified: trunk/data/qcsrc/warpzonelib/common.qh
===================================================================
--- trunk/data/qcsrc/warpzonelib/common.qh 2010-02-28 19:44:16 UTC (rev 8710)
+++ trunk/data/qcsrc/warpzonelib/common.qh 2010-02-28 19:44:20 UTC (rev 8711)
@@ -1,3 +1,4 @@
+.vector warpzone_shift;
.vector warpzone_origin;
.vector warpzone_angles;
.vector warpzone_forward;
More information about the nexuiz-commits
mailing list