zombiesurvival-evolved/gamemodes/zombiesurvival/entities/effects/hit_ice.lua

91 lines
2.9 KiB
Lua
Raw Normal View History

function EFFECT:Init(data)
local pos = data:GetOrigin()
local norm = data:GetNormal() * -1
sound.Play("physics/concrete/concrete_break"..math.random(2,3)..".wav", pos, 75, math.Rand(130, 140))
sound.Play("physics/glass/glass_largesheet_break"..math.random(1, 3)..".wav", pos, 75, math.Rand(160, 180))
local emitter = ParticleEmitter(pos)
emitter:SetNearClip(16, 24)
for i=1, math.random(12, 18) do
local Size = math.Rand(3, 5)
local RandDarkness = math.Rand(0.8, 1.0)
local dir = (norm * 2 + VectorRand()) / 3
dir:Normalize()
particle = emitter:Add("particles/balloon_bit", pos + VectorRand() * 6)
particle:SetVelocity(dir * math.Rand(150, 250))
particle:SetLifeTime(0)
particle:SetDieTime(math.Rand(3, 5))
particle:SetStartAlpha(255)
particle:SetEndAlpha(100)
particle:SetStartSize(Size)
particle:SetEndSize(Size * 0.25)
particle:SetRoll(math.Rand(0, 360))
particle:SetRollDelta(math.Rand(-2, 2))
particle:SetGravity(Vector(0, 0, -400))
particle:SetColor(145 * RandDarkness, 230 * RandDarkness, 255 * RandDarkness)
particle:SetCollide(true)
particle:SetAngleVelocity(Angle(math.Rand(-160, 160), math.Rand(-160, 160), math.Rand(-160, 160)))
particle:SetBounce(0.45)
end
for i=1, 6 do
particle = emitter:Add("particles/smokey", pos)
particle:SetVelocity(VectorRand():GetNormal() * 190)
particle:SetDieTime(math.Rand(0.7, 0.85))
particle:SetStartAlpha(math.Rand(50, 70))
particle:SetStartSize(math.Rand(100,120))
particle:SetEndSize(math.Rand(205, 210))
particle:SetRoll(math.Rand(-360, 360))
particle:SetRollDelta(math.Rand(-4.5, 4.5))
particle:SetColor(255, 255, 255)
end
for i=1, 12 do
particle = emitter:Add("particles/smokey", pos)
particle:SetVelocity(VectorRand():GetNormal() * 240)
particle:SetDieTime(math.Rand(0.3, 0.6))
particle:SetStartAlpha(math.Rand(90, 110))
particle:SetStartSize(1)
particle:SetEndSize(math.Rand(160, 190))
particle:SetRoll(math.Rand(-360, 360))
particle:SetRollDelta(math.Rand(-4.5, 4.5))
particle:SetColor(40, 160, 255)
end
emitter:Finish() emitter = nil collectgarbage("step", 64)
local maxbound = Vector(3, 3, 3)
local minbound = maxbound * -1
for i=1, math.random(6,8) do
local dir = (norm * 2 + VectorRand()) / 3
dir:Normalize()
local ent = ClientsideModel("models/props_junk/Rock001a.mdl", RENDERGROUP_OPAQUE)
if ent:IsValid() then
ent:SetModelScale(math.Rand(0.6, 0.9), 0)
ent:SetMaterial("models/shadertest/shader2")
ent:SetColor(Color(0, 150, 255, 255))
ent:SetPos(pos + dir * 6)
ent:PhysicsInitBox(minbound, maxbound)
ent:SetCollisionBounds(minbound, maxbound)
local phys = ent:GetPhysicsObject()
if phys:IsValid() then
phys:SetMaterial("rock")
phys:ApplyForceCenter(dir * math.Rand(200, 300))
end
SafeRemoveEntityDelayed(ent, math.Rand(6, 10))
end
end
end
function EFFECT:Think()
return false
end
function EFFECT:Render()
end