From 88a2286fdf310648e14fed9e14d053d26773634a Mon Sep 17 00:00:00 2001 From: div0 Date: Sun, 28 Feb 2010 19:46:06 +0000 Subject: [PATCH] optional better warpzone culling: cl_warpzone_usetrace git-svn-id: svn://svn.icculus.org/nexuiz/trunk@8725 f962a42d-fe04-0410-a3ab-8c8b0445ebaa ::stable-branch::merge=6ee529575d1b7b8d11f12269194f74b8e219da90 --- data/qcsrc/warpzonelib/client.qc | 2 -- data/qcsrc/warpzonelib/common.qc | 23 +++++++++++++++++++++++ data/qcsrc/warpzonelib/common.qh | 2 -- data/qcsrc/warpzonelib/server.qc | 4 ---- data/scripts/common.shader | 3 ++- 5 files changed, 25 insertions(+), 9 deletions(-) diff --git a/data/qcsrc/warpzonelib/client.qc b/data/qcsrc/warpzonelib/client.qc index c7683808d..d4144d699 100644 --- a/data/qcsrc/warpzonelib/client.qc +++ b/data/qcsrc/warpzonelib/client.qc @@ -34,8 +34,6 @@ void WarpZone_Read(float isnew) // engine currently wants this self.avelocity = AnglesTransform_TurnDirectionFR(self.avelocity); - - self.flags = FL_CAMERA; self.drawmask = MASK_NORMAL; // link me diff --git a/data/qcsrc/warpzonelib/common.qc b/data/qcsrc/warpzonelib/common.qc index 39813d10b..4aaef971d 100644 --- a/data/qcsrc/warpzonelib/common.qc +++ b/data/qcsrc/warpzonelib/common.qc @@ -20,6 +20,28 @@ void WarpZone_Accumulator_Add(entity acc, entity wz) acc.warpzone_shift = st; } +.vector(vector, vector) camera_transform; +var float autocvar_cl_warpzone_usetrace = 1; +vector WarpZone_camera_transform(vector org, vector ang) +{ + vector vf, vr, vu; + vf = v_forward; + vr = v_right; + vu = v_up; + org = WarpZone_TransformOrigin(self, org); + vf = WarpZone_TransformVelocity(self, vf); + vr = WarpZone_TransformVelocity(self, vr); + vu = WarpZone_TransformVelocity(self, vu); + if(autocvar_cl_warpzone_usetrace) + traceline(self.warpzone_targetorigin, org, MOVE_NOMONSTERS, world); + else + trace_endpos = self.warpzone_targetorigin; + v_forward = vf; + v_right = vr; + v_up = vu; + return org; +} + 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)); @@ -30,6 +52,7 @@ void WarpZone_SetUp(entity e, vector my_org, vector my_ang, vector other_org, ve e.warpzone_targetangles = other_ang; fixedmakevectors(my_ang); e.warpzone_forward = v_forward; fixedmakevectors(other_ang); e.warpzone_targetforward = v_forward; + e.camera_transform = WarpZone_camera_transform; } .entity enemy; diff --git a/data/qcsrc/warpzonelib/common.qh b/data/qcsrc/warpzonelib/common.qh index eb46def71..c58571eef 100644 --- a/data/qcsrc/warpzonelib/common.qh +++ b/data/qcsrc/warpzonelib/common.qh @@ -13,8 +13,6 @@ const void func_null(void); // never assign to this one please .vector warpzone_transform; void WarpZone_SetUp(entity e, vector my_org, vector my_ang, vector other_org, vector other_ang); -float FL_CAMERA = 8192; - float WarpZoneLib_BoxTouchesBrush(vector mi, vector ma, entity e, entity ig); vector WarpZoneLib_NearestPointOnBox(vector mi, vector ma, vector org); diff --git a/data/qcsrc/warpzonelib/server.qc b/data/qcsrc/warpzonelib/server.qc index f8e7661e1..1eba3570f 100644 --- a/data/qcsrc/warpzonelib/server.qc +++ b/data/qcsrc/warpzonelib/server.qc @@ -219,10 +219,6 @@ void WarpZone_InitStep_UpdateTransform() // now enable touch self.touch = WarpZone_Touch; - - // our mins/maxs are set to the warpzone... so all we need: - self.flags |= FL_CAMERA; - self.view_ofs = self.warpzone_targetorigin; } float WarpZone_CheckProjectileImpact() diff --git a/data/scripts/common.shader b/data/scripts/common.shader index 27c3b2618..11d6ea0b6 100644 --- a/data/scripts/common.shader +++ b/data/scripts/common.shader @@ -359,5 +359,6 @@ textures/common/warpzone map textures/common/mirror1.tga // fully transparent blendfunc blend } - dp_refract 1 1 1 1 + dp_camera + dp_refract 1 1 1 1 // makes the camera render like a refraction } -- 2.39.2