diff --git a/lua/effects/arccw_tracer.lua b/lua/effects/arccw_tracer.lua index 90ae08f6..84ce4c77 100644 --- a/lua/effects/arccw_tracer.lua +++ b/lua/effects/arccw_tracer.lua @@ -5,10 +5,10 @@ EFFECT.LifeTime = 0.2 EFFECT.LifeTime2 = 0.2 EFFECT.DieTime = 0 EFFECT.Color = Color(255, 255, 255) -EFFECT.Speed = 5000 +EFFECT.Speed = 15000 --- local head = Material("effects/whiteflare") -local tracer = Material("effects/smoke_trail") +local head = Material("effects/whiteflare") +local tracer = Material("arccw/tracer") local smoke = Material("trails/smoke") function EFFECT:Init(data) @@ -29,9 +29,11 @@ function EFFECT:Init(data) fx:SetScale(4000) util.Effect("tracer", fx) self:Remove() - return + return -- was it ever really necessary? yes, to not use the dog-shit tracers that used to ship with this end + local diff = hit - start + if speed > 0 then self.Speed = speed end @@ -46,6 +48,7 @@ function EFFECT:Init(data) self.StartTime = UnPredictedCurTime() self.DieTime = UnPredictedCurTime() + math.max(self.LifeTime, self.LifeTime2) + self.Dir = diff:GetNormalized() self.StartPos = start self.EndPos = hit @@ -69,17 +72,22 @@ function EFFECT:Render() local d2 = (UnPredictedCurTime() - self.StartTime) / self.LifeTime2 local startpos = self.StartPos + (d * 0.1 * (self.EndPos - self.StartPos)) local endpos = self.StartPos + (d * (self.EndPos - self.StartPos)) - local size = 1 + local size = math.Clamp(math.log(EyePos():DistToSqr(endpos) - math.pow(256, 2)), 0, math.huge) - local col = LerpColor(d, self.Color, Color(0, 0, 0, 0)) - local col2 = LerpColor(d2, Color(255, 255, 255, 255), Color(0, 0, 0, 0)) + local col = self.Color --LerpColor(d, self.Color, Color(0, 0, 0, 0)) + local col2 = LerpColor(d2, Color(155, 155, 155, 155), Color(0, 0, 0, 0)) - -- render.SetMaterial(head) - -- render.DrawSprite(endpos, size * 3, size * 3, col) + local vel = self.Dir * self.Speed - LocalPlayer():GetVelocity() + local dot = math.abs(EyeAngles():Forward():Dot(vel:GetNormalized())) + --dot = math.Clamp(((dot * dot) - 0.25) * 5, 0, 1) + local headsize = size * dot * 2 + render.SetMaterial(head) + render.DrawSprite(endpos, headsize, headsize, col) + local tail = (self.Dir * math.min(self.Speed / 25, 512, (endpos - startpos):Length() - 64)) render.SetMaterial(tracer) - render.DrawBeam(endpos, startpos, size, 0, 1, col) + render.DrawBeam(endpos, endpos - tail, size * 0.75, 0, 1, col) render.SetMaterial(smoke) - render.DrawBeam(self.EndPos, self.StartPos, size * 0.5 * d2, 0, 1, col2) + render.DrawBeam( endpos - tail, startpos, size * d2, 0, 1, col2) end diff --git a/materials/arccw/tracer.vmt b/materials/arccw/tracer.vmt new file mode 100644 index 00000000..1cbb181c --- /dev/null +++ b/materials/arccw/tracer.vmt @@ -0,0 +1,8 @@ +"UnlitGeneric" +{ + "$basetexture" "arc9/tracer" + "$vertexcolor" 1 + "$vertexalpha" 1 + "$translucent" 1 + "$additive" 1 +} diff --git a/materials/arccw/tracer.vtf b/materials/arccw/tracer.vtf new file mode 100644 index 00000000..34331836 Binary files /dev/null and b/materials/arccw/tracer.vtf differ