X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fwarpzonelib%2Fclient.qc;h=a44b3797451b73453fcbe482546827c2d071d0e6;hp=f02fa4a30266d097b9c595d413829300999eeb4d;hb=63616e9884bee2592d61b70d313b8f269278fe23;hpb=fc7c59755079219daf58463ba14c5d7dcdb51da3 diff --git a/qcsrc/warpzonelib/client.qc b/qcsrc/warpzonelib/client.qc index f02fa4a30..a44b37974 100644 --- a/qcsrc/warpzonelib/client.qc +++ b/qcsrc/warpzonelib/client.qc @@ -1,7 +1,11 @@ void WarpZone_Fade_PreDraw() { if(self.warpzone_fadestart) - self.alpha = bound(0, (self.warpzone_fadeend - vlen(view_origin - self.origin - 0.5 * (self.mins + self.maxs))) / (self.warpzone_fadeend - self.warpzone_fadestart), 1); + { + vector org; + org = getpropertyvec(VF_ORIGIN); + self.alpha = bound(0, (self.warpzone_fadeend - vlen(org - self.origin - 0.5 * (self.mins + self.maxs))) / (self.warpzone_fadeend - self.warpzone_fadestart), 1); + } else self.alpha = 1; //print(sprintf("%v <-> %v\n", view_origin, self.origin + 0.5 * (self.mins + self.maxs))); @@ -141,31 +145,47 @@ void WarpZone_Camera_Read(float isnew) self.drawmask = MASK_NORMAL; } -float warpzone_fixingview; -float warpzone_fixingview_drawexteriormodel; -//float warpzone_fixingview_sidespeed; -//float warpzone_fixingview_forwardspeed; -void WarpZone_Inside() +void CL_RotateMoves(vector ang) = #638; +void WarpZone_Teleported_Read(float isnew) { - if(warpzone_fixingview) + vector v; + self.classname = "warpzone_teleported"; + v_x = ReadCoord(); + v_y = ReadCoord(); + v_z = ReadCoord(); + if(!isnew) return; - warpzone_fixingview = 1; - warpzone_fixingview_drawexteriormodel = cvar("r_drawexteriormodel"); - //warpzone_fixingview_sidespeed = cvar("cl_sidespeed"); - //warpzone_fixingview_forwardspeed = cvar("cl_forwardspeed"); - cvar_set("r_drawexteriormodel", "0"); - //cvar_set("cl_sidespeed", ftos(warpzone_fixingview_sidespeed / 100)); // just keep a bit of it in case player gets stuck - //cvar_set("cl_forwardspeed", ftos(warpzone_fixingview_forwardspeed / 100)); // just keep a bit of it in case player gets stuck + self.warpzone_transform = v; + setproperty(VF_CL_VIEWANGLES, WarpZone_TransformVAngles(self, getpropertyvec(VF_CL_VIEWANGLES))); + if(checkextension("DP_CSQC_ROTATEMOVES")) + CL_RotateMoves(v); + //CL_RotateMoves('0 90 0'); } -void WarpZone_Outside() +float warpzone_fixingview; +float warpzone_fixingview_drawexteriormodel; +float autocvar_chase_active; + +void WarpZone_View_Outside() { if(!warpzone_fixingview) return; warpzone_fixingview = 0; cvar_set("r_drawexteriormodel", ftos(warpzone_fixingview_drawexteriormodel)); - //cvar_set("cl_sidespeed", ftos(warpzone_fixingview_sidespeed)); - //cvar_set("cl_forwardspeed", ftos(warpzone_fixingview_forwardspeed)); +} + +void WarpZone_View_Inside() +{ + if(autocvar_chase_active) + { + WarpZone_View_Outside(); + return; + } + if(warpzone_fixingview) + return; + warpzone_fixingview = 1; + warpzone_fixingview_drawexteriormodel = cvar("r_drawexteriormodel"); + cvar_set("r_drawexteriormodel", "0"); } vector WarpZone_FixNearClip(vector o, vector c0, vector c1, vector c2, vector c3) @@ -174,12 +194,12 @@ vector WarpZone_FixNearClip(vector o, vector c0, vector c1, vector c2, vector c3 entity e; float pd; - mi_x = min5(o_x, c0_x, c1_x, c2_x, c3_x); - ma_x = max5(o_x, c0_x, c1_x, c2_x, c3_x); - mi_y = min5(o_y, c0_y, c1_y, c2_y, c3_y); - ma_y = max5(o_y, c0_y, c1_y, c2_y, c3_y); - mi_z = min5(o_z, c0_z, c1_z, c2_z, c3_z); - ma_z = max5(o_z, c0_z, c1_z, c2_z, c3_z); + mi_x = min(o_x, c0_x, c1_x, c2_x, c3_x); + ma_x = max(o_x, c0_x, c1_x, c2_x, c3_x); + mi_y = min(o_y, c0_y, c1_y, c2_y, c3_y); + ma_y = max(o_y, c0_y, c1_y, c2_y, c3_y); + mi_z = min(o_z, c0_z, c1_z, c2_z, c3_z); + ma_z = max(o_z, c0_z, c1_z, c2_z, c3_z); e = WarpZone_Find(mi, ma); if(e) @@ -187,7 +207,7 @@ vector WarpZone_FixNearClip(vector o, vector c0, vector c1, vector c2, vector c3 if(WarpZone_PlaneDist(e, o) < 0) return '0 0 0'; // can't really be, though, but if it is, this is not my warpzone, but a random different one in the same mins/maxs - pd = min4( + pd = min( WarpZone_PlaneDist(e, c0), WarpZone_PlaneDist(e, c1), WarpZone_PlaneDist(e, c2), @@ -200,88 +220,82 @@ vector WarpZone_FixNearClip(vector o, vector c0, vector c1, vector c2, vector c3 return '0 0 0'; } -float warpzone_saved; -vector warpzone_saved_origin; -vector warpzone_saved_angles; -vector warpzone_saved_cl_viewangles; +void WarpZone_FixPMove() +{ + entity e; + e = WarpZone_Find(pmove_org, pmove_org); + if(e) + { + pmove_org = WarpZone_TransformOrigin(e, pmove_org); + input_angles = WarpZone_TransformVAngles(e, input_angles); + } +} + #ifndef KEEP_ROLL var float autocvar_cl_rollkillspeed = 10; #endif void WarpZone_FixView() { - float f; - vector o; entity e; - vector corner0, corner1, corner2, corner3, nearclip; - - warpzone_saved = 0; - warpzone_saved_origin = warpzone_fixview_origin; - warpzone_saved_angles = warpzone_fixview_angles; - warpzone_saved_cl_viewangles = warpzone_fixview_cl_viewangles; - - nearclip = '0 0 1' * (cvar("r_nearclip") * 1.125); - corner0 = cs_unproject('0 0 0' + nearclip); - corner1 = cs_unproject('1 0 0' * cvar("vid_conwidth") + nearclip); - corner2 = cs_unproject('0 1 0' * cvar("vid_conheight") + nearclip); - corner3 = cs_unproject('1 0 0' * cvar("vid_conwidth") + '0 1 0' * cvar("vid_conheight") + nearclip); + vector org, ang, nearclip, corner0, corner1, corner2, corner3, o; + float f; -#ifndef KEEP_ROLL - if(warpzone_fixview_angles_z != 0 || warpzone_fixview_cl_viewangles_z != 0) - { - if(autocvar_cl_rollkillspeed) - f = max(0, (1 - frametime * autocvar_cl_rollkillspeed)); - else - f = 0; - warpzone_fixview_angles_z *= f; - warpzone_fixview_cl_viewangles_z *= f; - warpzone_saved_angles_z *= f; // PERMANENTLY apply that change! - warpzone_saved_cl_viewangles_z *= f; // PERMANENTLY apply that change! - warpzone_saved = 2; - R_SetView(VF_CL_VIEWANGLES_Z, warpzone_fixview_angles_z); - } + org = getpropertyvec(VF_ORIGIN); + ang = getpropertyvec(VF_ANGLES); +#ifdef WORKAROUND_XON010 + float dirty; + dirty = checkextension("DP_CSQC_ROTATEMOVES"); #endif - e = WarpZone_Find(warpzone_fixview_origin, warpzone_fixview_origin); + e = WarpZone_Find(org, org); if(e) { - warpzone_saved = 1; - warpzone_fixview_origin = WarpZone_TransformOrigin(e, warpzone_fixview_origin); - corner0 = WarpZone_TransformOrigin(e, corner0); - corner1 = WarpZone_TransformOrigin(e, corner1); - corner2 = WarpZone_TransformOrigin(e, corner2); - corner3 = WarpZone_TransformOrigin(e, corner3); - warpzone_fixview_angles = WarpZone_TransformVAngles(e, warpzone_fixview_angles); - warpzone_fixview_cl_viewangles = WarpZone_TransformVAngles(e, warpzone_fixview_cl_viewangles); - WarpZone_Inside(); + org = WarpZone_TransformOrigin(e, org); + ang = WarpZone_TransformVAngles(e, ang); +#ifdef WORKAROUND_XON010 + dirty = 1; +#endif + WarpZone_View_Inside(); } else - WarpZone_Outside(); + WarpZone_View_Outside(); - // if we are near any warpzone planes - MOVE AWAY (work around nearclip) - o = WarpZone_FixNearClip(warpzone_fixview_origin, corner0, corner1, corner2, corner3); - if(o != '0 0 0') - { - warpzone_saved = 1; - warpzone_fixview_origin += o; - } +#ifndef KEEP_ROLL + float rick; + if(autocvar_cl_rollkillspeed) + f = max(0, (1 - frametime * autocvar_cl_rollkillspeed)); + else + f = 0; - if(warpzone_saved == 1) - { - R_SetView(VF_ORIGIN, warpzone_fixview_origin); - R_SetView(VF_ANGLES, warpzone_fixview_cl_viewangles); - } -} -void WarpZone_UnFixView() -{ - if(warpzone_saved) + rick = getproperty(VF_CL_VIEWANGLES_Z); + rick *= f; + setproperty(VF_CL_VIEWANGLES_Z, rick); + +#ifdef WORKAROUND_XON010 + if(ang_z > 1 || ang_z < -1) + dirty = 1; +#endif + ang_z *= f; +#endif + +#ifdef WORKAROUND_XON010 + if(dirty) { - warpzone_fixview_origin = warpzone_saved_origin; - warpzone_fixview_angles = warpzone_saved_angles; - warpzone_fixview_cl_viewangles = warpzone_saved_cl_viewangles; - R_SetView(VF_ORIGIN, warpzone_fixview_origin); - R_SetView(VF_ANGLES, warpzone_fixview_angles); - R_SetView(VF_CL_VIEWANGLES, warpzone_fixview_cl_viewangles); +#endif + setproperty(VF_ORIGIN, org); + setproperty(VF_ANGLES, ang); +#ifdef WORKAROUND_XON010 } +#endif + + nearclip = '0 0 1' * (cvar("r_nearclip") * 1.125); + corner0 = cs_unproject('0 0 0' + nearclip); + corner1 = cs_unproject('1 0 0' * cvar("vid_conwidth") + nearclip); + corner2 = cs_unproject('0 1 0' * cvar("vid_conheight") + nearclip); + corner3 = cs_unproject('1 0 0' * cvar("vid_conwidth") + '0 1 0' * cvar("vid_conheight") + nearclip); + o = WarpZone_FixNearClip(org, corner0, corner1, corner2, corner3); + if(o != '0 0 0') + setproperty(VF_ORIGIN, org + o); } void WarpZone_Init() @@ -290,5 +304,5 @@ void WarpZone_Init() void WarpZone_Shutdown() { - WarpZone_Outside(); + WarpZone_View_Outside(); }