[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