51 lines
1.5 KiB
Lua
51 lines
1.5 KiB
Lua
|
function EFFECT:Think()
|
||
|
return false
|
||
|
end
|
||
|
|
||
|
function EFFECT:Render()
|
||
|
end
|
||
|
|
||
|
local function CollideCallback(particle, hitpos, hitnormal)
|
||
|
if particle:GetDieTime() == 0 then return end
|
||
|
particle:SetDieTime(0)
|
||
|
|
||
|
if math.random(3) == 3 then
|
||
|
sound.Play("physics/flesh/flesh_squishy_impact_hard"..math.random(4)..".wav", hitpos, 50, math.Rand(95, 105))
|
||
|
end
|
||
|
|
||
|
if math.random(3) == 3 then
|
||
|
util.Decal("Impact.AlienFlesh", hitpos + hitnormal, hitpos - hitnormal)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function EFFECT:Init(data)
|
||
|
local pos = data:GetOrigin()
|
||
|
local hitnormal = data:GetNormal() * -1
|
||
|
|
||
|
local emitter = ParticleEmitter(pos)
|
||
|
emitter:SetNearClip(24, 48)
|
||
|
|
||
|
local grav = Vector(0, 0, -500)
|
||
|
for i = 1, math.random(60, 85) do
|
||
|
local particle = emitter:Add("particles/smokey", pos)
|
||
|
particle:SetVelocity(VectorRand():GetNormalized() * math.Rand(32, 72) + hitnormal * math.Rand(48, 198))
|
||
|
particle:SetDieTime(math.Rand(0.9, 2))
|
||
|
particle:SetStartAlpha(200)
|
||
|
particle:SetEndAlpha(0)
|
||
|
particle:SetStartSize(math.Rand(1, 5))
|
||
|
particle:SetEndSize(0)
|
||
|
particle:SetRoll(math.Rand(0, 360))
|
||
|
particle:SetRollDelta(math.Rand(-15, 15))
|
||
|
particle:SetColor(math.Rand(25, 30), math.Rand(200, 240), math.Rand(25, 30))
|
||
|
particle:SetLighting(true)
|
||
|
particle:SetGravity(grav)
|
||
|
particle:SetCollide(true)
|
||
|
particle:SetCollideCallback(CollideCallback)
|
||
|
end
|
||
|
emitter:Finish()
|
||
|
|
||
|
util.Decal("Impact.AlienFlesh", pos + hitnormal, pos - hitnormal)
|
||
|
|
||
|
sound.Play("npc/antlion_grub/squashed.wav", pos, 74, math.random(95, 110))
|
||
|
end
|