local PLUGIN = PLUGIN

function EFFECT:Init(data)
	if CurTime() < 1 then
		self:Remove()
		return
	end

	self.TrailEnt = data:GetEntity()
	if not 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 not IsValid(self.TrailEnt) or (self.TrailEnt:IsPlayer() and not self.TrailEnt:Alive()) or not 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
