summaryrefslogtreecommitdiff
path: root/entities/effects/m9k_effect_mad_ricochet_trace/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'entities/effects/m9k_effect_mad_ricochet_trace/init.lua')
-rw-r--r--entities/effects/m9k_effect_mad_ricochet_trace/init.lua100
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