76 lines
2.5 KiB
Lua
76 lines
2.5 KiB
Lua
function EFFECT:Init(data)
|
|
if CurTime() < 1 then self:Remove() return end
|
|
|
|
self.TrailEnt = data:GetEntity()
|
|
if !IsValid(self.TrailEnt) then self:Remove() return end
|
|
|
|
local pos = data:GetOrigin() + Vector(0, 0, 4)
|
|
local dir = data:GetNormal()
|
|
|
|
local emitter = ParticleEmitter(pos)
|
|
local amt = 24
|
|
|
|
for i = 1, amt do
|
|
local smoke = emitter:Add("particle/smokestack", pos)
|
|
smoke:SetVelocity(dir * math.Rand(-300, -100) + VectorRand() * 256 + Vector(0, 0, math.Rand(100, 300)))
|
|
smoke:SetGravity(Vector(0, 0, -300))
|
|
smoke:SetStartAlpha(75)
|
|
smoke:SetEndAlpha(0)
|
|
smoke:SetStartSize(math.Rand(8, 12))
|
|
smoke:SetEndSize(math.Rand(48, 64))
|
|
smoke:SetRoll(math.Rand(-180, 180))
|
|
smoke:SetRollDelta(math.Rand(-0.2, 0.2))
|
|
smoke:SetColor(200, 200, 200)
|
|
smoke:SetAirResistance(200)
|
|
smoke:SetCollide(true)
|
|
smoke:SetBounce(0.2)
|
|
smoke:SetLighting(true)
|
|
smoke:SetDieTime(math.Rand(0.9, 1.25))
|
|
end
|
|
end
|
|
|
|
function EFFECT:Think()
|
|
if !IsValid(self.TrailEnt) or (self.TrailEnt:IsPlayer() and !self.TrailEnt:Alive()) or !self.TrailEnt:GetNWBool("TacRPChargeState") then
|
|
return false
|
|
end
|
|
return true
|
|
end
|
|
|
|
function EFFECT:Render()
|
|
--if self.TrailEnt:IsOnGround() then
|
|
local pos = self.TrailEnt:GetPos() + Vector(math.Rand(-8, 8), math.Rand(-8, 8), 4)
|
|
|
|
local emitter = ParticleEmitter(pos)
|
|
|
|
local smoke = emitter:Add("particle/smokestack", pos)
|
|
if self.TrailEnt:IsOnGround() then
|
|
smoke:SetVelocity(self.TrailEnt:GetVelocity() * 0.2 + VectorRand() * 32 + Vector(0, 0, math.Rand(32, 64)))
|
|
smoke:SetGravity(Vector(0, 0, -128))
|
|
|
|
smoke:SetStartSize(math.Rand(8, 12))
|
|
smoke:SetEndSize(math.Rand(48, 64))
|
|
smoke:SetDieTime(math.Rand(0.8, 1))
|
|
else
|
|
smoke:SetPos(pos + Vector(0, 0, 16))
|
|
smoke:SetVelocity(VectorRand() * 32)
|
|
smoke:SetGravity(Vector(0, 0, -128))
|
|
smoke:SetStartSize(16)
|
|
smoke:SetEndSize(32)
|
|
smoke:SetDieTime(math.Rand(0.4, 0.6))
|
|
end
|
|
|
|
smoke:SetStartAlpha(25)
|
|
smoke:SetEndAlpha(0)
|
|
|
|
smoke:SetRoll(math.Rand(-180, 180))
|
|
smoke:SetRollDelta(math.Rand(-0.2, 0.2))
|
|
smoke:SetColor(200, 200, 200)
|
|
smoke:SetAirResistance(25)
|
|
smoke:SetCollide(true)
|
|
smoke:SetBounce(0.2)
|
|
smoke:SetLighting(true)
|
|
|
|
emitter:Finish()
|
|
--end
|
|
end
|