diff options
Diffstat (limited to 'entities/effects/m9k_effect_mad_ricochet_trace/init.lua')
| -rw-r--r-- | entities/effects/m9k_effect_mad_ricochet_trace/init.lua | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/entities/effects/m9k_effect_mad_ricochet_trace/init.lua b/entities/effects/m9k_effect_mad_ricochet_trace/init.lua new file mode 100644 index 0000000..1a9ebaf --- /dev/null +++ b/entities/effects/m9k_effect_mad_ricochet_trace/init.lua @@ -0,0 +1,100 @@ +EFFECT.Mat = Material("effects/yellowflare") + +/*--------------------------------------------------------- + EFFECT:Init(data) +---------------------------------------------------------*/ +function EFFECT:Init(data) + + self.StartPos = data:GetStart() + self.EndPos = data:GetOrigin() + self.Dir = self.EndPos - self.StartPos + self.Entity:SetRenderBoundsWS(self.StartPos, self.EndPos) + + self.TracerTime = 0.4 + + // Die when it reaches its target + self.DieTime = CurTime() + self.TracerTime + + // Play ricochet sound with random pitch + + local vGrav = Vector(0, 0, -450) + local Dir = self.Dir:GetNormalized() + + local emitter = ParticleEmitter(self.StartPos) + + for i = 1, 10 do + + local particle = emitter:Add("effects/yellowflare", self.StartPos) + + particle:SetVelocity((Dir + VectorRand() * 0.5) * math.Rand(50, 150)) + particle:SetDieTime(math.Rand(0.5, 2)) + particle:SetStartAlpha(255) + particle:SetStartSize(math.Rand(2, 4)) + particle:SetEndSize(0) + particle:SetRoll(0) + particle:SetGravity(vGrav * 0.4) + particle:SetCollide(true) + particle:SetBounce(0.8) + particle:SetAirResistance(50) + particle:SetStartLength(0.2) + particle:SetEndLength(0) + particle:SetVelocityScale(true) + particle:SetCollide(true) + end + + local particle = emitter:Add("effects/yellowflare", self.StartPos) + + particle:SetDieTime(0.1) + particle:SetStartAlpha(255) + particle:SetStartSize(128) + particle:SetEndSize(0) + particle:SetRoll(math.Rand(0, 360)) + + local particle = emitter:Add("effects/yellowflare", self.StartPos) + + particle:SetDieTime(0.4) + particle:SetStartAlpha(255) + particle:SetStartSize(32) + particle:SetEndSize(0) + particle:SetRoll(math.Rand(0, 360)) + + emitter:Finish() + + local dlight = DynamicLight(0) + if (dlight) then + dlight.Pos = self.StartPos + dlight.r = 255 + dlight.g = 255 + dlight.b = 255 + dlight.Brightness = 4 + dlight.size = 64 + dlight.DieTime = CurTime() + 0.1 + end +end + +/*--------------------------------------------------------- + THINK +---------------------------------------------------------*/ +function EFFECT:Think() + + if (CurTime() > self.DieTime) then return false end + + return true +end + +/*--------------------------------------------------------- + Draw the effect +---------------------------------------------------------*/ +function EFFECT:Render() + + local fDelta = (self.DieTime - CurTime()) / self.TracerTime + fDelta = math.Clamp(fDelta, 0, 1) + + render.SetMaterial(self.Mat) + + local sinWave = math.sin(fDelta * math.pi) + + local color = Color(255, 255, 255, 255 * fDelta) + + render.DrawBeam(self.StartPos, self.EndPos, 8 * fDelta, 0.5, 0.5, color) +end
\ No newline at end of file |
