87 lines
2.6 KiB
Lua
87 lines
2.6 KiB
Lua
|
EFFECT.LifeTime = 0.45
|
||
|
|
||
|
function EFFECT:Init(effectdata)
|
||
|
local pos = effectdata:GetOrigin()
|
||
|
local normal = effectdata:GetNormal()
|
||
|
|
||
|
pos = pos + normal
|
||
|
|
||
|
self.Pos = pos
|
||
|
self.Normal = normal
|
||
|
self.DieTime = CurTime() + self.LifeTime
|
||
|
|
||
|
local particle
|
||
|
|
||
|
sound.Play("weapons/physcannon/energy_disintegrate"..math.random(4, 5)..".wav", pos, 80, math.random(70, 90))
|
||
|
sound.Play("weapons/physcannon/energy_sing_explosion2.wav", pos, 80, math.random(105, 120))
|
||
|
|
||
|
local emitter = ParticleEmitter(pos)
|
||
|
local emitter2 = ParticleEmitter(pos, true)
|
||
|
emitter:SetNearClip(24, 32)
|
||
|
emitter2:SetNearClip(24, 32)
|
||
|
|
||
|
for i=1, 100 do
|
||
|
particle = emitter:Add("effects/splash2", pos)
|
||
|
particle:SetDieTime(0.4)
|
||
|
particle:SetColor(75, 110, 255)
|
||
|
particle:SetStartAlpha(185)
|
||
|
particle:SetEndAlpha(0)
|
||
|
particle:SetStartSize(6)
|
||
|
particle:SetEndSize(6)
|
||
|
particle:SetStartLength(0)
|
||
|
particle:SetEndLength(90)
|
||
|
particle:SetVelocity(VectorRand():GetNormal() * 220)
|
||
|
end
|
||
|
local ringstart = pos + normal * -3
|
||
|
for i=1, 3 do
|
||
|
particle = emitter2:Add("effects/select_ring", ringstart)
|
||
|
particle:SetDieTime(0.1 + i * 0.1)
|
||
|
particle:SetColor(75, 115, 255)
|
||
|
particle:SetStartAlpha(185)
|
||
|
particle:SetEndAlpha(0)
|
||
|
particle:SetStartSize(0)
|
||
|
particle:SetEndSize(110)
|
||
|
particle:SetAngles(normal:Angle())
|
||
|
particle = emitter2:Add("effects/select_ring", ringstart)
|
||
|
particle:SetDieTime(0.2 + i * 0.1)
|
||
|
particle:SetColor(75, 115, 255)
|
||
|
particle:SetStartAlpha(185)
|
||
|
particle:SetEndAlpha(0)
|
||
|
particle:SetStartSize(0)
|
||
|
particle:SetEndSize(120)
|
||
|
particle:SetAngles(normal:Angle())
|
||
|
end
|
||
|
|
||
|
emitter:Finish()
|
||
|
emitter2:Finish()
|
||
|
end
|
||
|
|
||
|
function EFFECT:Think()
|
||
|
return CurTime() < self.DieTime
|
||
|
end
|
||
|
|
||
|
local matRefract = Material("refract_ring")
|
||
|
local matGlow = Material("sprites/glow04_noz")
|
||
|
local colGlow = Color(75, 115, 255)
|
||
|
function EFFECT:Render()
|
||
|
local delta = (self.DieTime - CurTime()) / self.LifeTime
|
||
|
local basesize = 48
|
||
|
basesize = basesize + basesize ^ (1.5 - delta)
|
||
|
|
||
|
local pos = self.Pos
|
||
|
matRefract:SetFloat("$refractamount", (10.75 + math.abs(math.sin(CurTime() * 5)) * math.pi * 0.25) * delta)
|
||
|
render.SetMaterial(matRefract)
|
||
|
render.UpdateRefractTexture()
|
||
|
render.DrawSprite(pos, basesize, basesize)
|
||
|
render.DrawQuadEasy(pos, self.Normal, basesize, basesize, colGlow, 0)
|
||
|
render.DrawQuadEasy(pos, self.Normal, basesize, basesize, colGlow, 0)
|
||
|
|
||
|
basesize = basesize * 0.75
|
||
|
|
||
|
colGlow.a = delta * 255
|
||
|
render.SetMaterial(matGlow)
|
||
|
render.DrawSprite(pos, basesize, basesize, colGlow)
|
||
|
render.DrawQuadEasy(pos, self.Normal, basesize, basesize, colGlow, 0)
|
||
|
render.DrawQuadEasy(pos, self.Normal, basesize, basesize, colGlow, 0)
|
||
|
end
|