X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fhook.qc;h=c1e8383aa6daf415356034b8b2bda1bc13193e7c;hb=d0642be2e21e2a63ec63437fea3f6b37e6af70d4;hp=412d4a44e02890c3e46e830f8430c9c2671563a9;hpb=a5dcc1361726a5d7fcb73407d716e3201d4e764c;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/hook.qc b/qcsrc/client/hook.qc index 412d4a44e..c1e8383aa 100644 --- a/qcsrc/client/hook.qc +++ b/qcsrc/client/hook.qc @@ -5,7 +5,7 @@ .float HookSilent; .float HookRange; -void Draw_CylindricLine(vector from, vector to, float thickness, string texture, float aspect, float shift, vector rgb, float alpha, float drawflag) +void Draw_CylindricLine(vector from, vector to, float thickness, string texture, float aspect, float shift, vector rgb, float alpha, float drawflag, vector vieworg) { // I want to draw a quad... // from and to are MIDPOINTS. @@ -17,7 +17,7 @@ void Draw_CylindricLine(vector from, vector to, float thickness, string texture, length_tex = aspect * vlen(to - from) / thickness; // direction is perpendicular to the view normal, and perpendicular to the axis - thickdir = normalize(cross(axis, view_origin - from)); + thickdir = normalize(cross(axis, vieworg - from)); /* print("from ", vtos(from), "\n"); @@ -46,11 +46,14 @@ float Draw_GrapplingHook_trace_callback_a; void Draw_GrapplingHook_trace_callback(vector start, vector hit, vector end) { float i; + vector vorg; + vorg = WarpZone_TransformOrigin(WarpZone_trace_transform, view_origin); for(i = 0; i < Draw_GrapplingHook_trace_callback_a; ++i) - Draw_CylindricLine(hit, start, 8, Draw_GrapplingHook_trace_callback_tex, 0.25, Draw_GrapplingHook_trace_callback_rnd, Draw_GrapplingHook_trace_callback_rgb, min(1, Draw_GrapplingHook_trace_callback_a - i), DRAWFLAG_NORMAL); + Draw_CylindricLine(hit, start, 8, Draw_GrapplingHook_trace_callback_tex, 0.25, Draw_GrapplingHook_trace_callback_rnd, Draw_GrapplingHook_trace_callback_rgb, min(1, Draw_GrapplingHook_trace_callback_a - i), DRAWFLAG_NORMAL, vorg); Draw_GrapplingHook_trace_callback_rnd += 0.25 * vlen(hit - start) / 8; } +.float teleport_time; void Draw_GrapplingHook() { vector a, b, atrans; @@ -61,6 +64,13 @@ void Draw_GrapplingHook() vector vs; float intensity, offset; + if(self.teleport_time) + if(time > self.teleport_time) + { + sound (self, CHAN_PROJECTILE, "misc/null.wav", VOL_BASE, ATTN_NORM); // safeguard + self.teleport_time = 0; + } + InterpolateOrigin_Do(); s = cvar("cl_gunalign"); @@ -126,7 +136,7 @@ void Draw_GrapplingHook() default: case ENT_CLIENT_HOOK: intensity = 1; - offset = Noise_White(self, frametime); + offset = 0; if(t == COLOR_TEAM1) { tex = "particles/hook_red"; @@ -251,7 +261,7 @@ void Ent_ReadHook(float bIsNew, float type) InterpolateOrigin_Note(); - if(bIsNew) + if(bIsNew || !self.teleport_time) { self.draw = Draw_GrapplingHook; self.entremove = Remove_GrapplingHook; @@ -272,6 +282,8 @@ void Ent_ReadHook(float bIsNew, float type) break; } } + + self.teleport_time = time + 10; } void Hook_Precache()