util.PrecacheSound("physics/flesh/flesh_bloody_impact_hard1.wav")

util.PrecacheSound("physics/flesh/flesh_squishy_impact_hard1.wav")

util.PrecacheSound("physics/flesh/flesh_squishy_impact_hard2.wav")

util.PrecacheSound("physics/flesh/flesh_squishy_impact_hard3.wav")

util.PrecacheSound("physics/flesh/flesh_squishy_impact_hard4.wav")



local function CollideCallbackSmall(particle, hitpos, hitnormal)

	if particle:GetDieTime() == 0 then return end

	particle:SetDieTime(0)



	if math.random(3) == 3 then

		sound.Play("physics/flesh/flesh_bloody_impact_hard1.wav", hitpos, 50, math.Rand(95, 105))

		util.Decal("Impact.Flesh", hitpos + hitnormal, hitpos - hitnormal)

	end

end



local function CollideCallback(oldparticle, hitpos, hitnormal)

	if oldparticle:GetDieTime() == 0 then return end

	oldparticle:SetDieTime(0)



	local pos = hitpos + hitnormal



	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

	util.Decal("Blood", pos, hitpos - hitnormal)



	local num = math.random(-4, 4)

	if num < 1 then return end



	local nhitnormal = hitnormal * 90



	local emitter = ParticleEmitter(pos)

	for i=1, num do

		local particle = emitter:Add("noxctf/sprite_bloodspray"..math.random(8), pos)

		particle:SetLighting(true)

		particle:SetVelocity(VectorRand():GetNormalized() * math.Rand(75, 150) + nhitnormal)

		particle:SetDieTime(3)

		particle:SetStartAlpha(255)

		particle:SetEndAlpha(255)

		particle:SetStartSize(math.Rand(1.5, 2.5))

		particle:SetEndSize(1.5)

		particle:SetRoll(math.Rand(-25, 25))

		particle:SetRollDelta(math.Rand(-25, 25))

		particle:SetAirResistance(5)

		particle:SetGravity(Vector(0, 0, -600))

		particle:SetCollide(true)

		particle:SetColor(255, 0, 0)

		particle:SetCollideCallback(CollideCallbackSmall)

	end

	emitter:Finish()

end



function EFFECT:Init(data)

	local pos = data:GetOrigin() + Vector(0, 0, 10)



	local dir = data:GetNormal()

	local force = data:GetScale()



	local emitter = ParticleEmitter(pos)

	for i=1, data:GetMagnitude() do

		local heading = (VectorRand():GetNormalized() * 3 + dir) / 4

		local particle = emitter:Add("noxctf/sprite_bloodspray"..math.random(8), pos + heading)

		particle:SetVelocity(force * math.Rand(0.8, 1) * heading)

		particle:SetDieTime(math.Rand(3, 6))

		particle:SetStartAlpha(200)

		particle:SetEndAlpha(200)

		particle:SetStartSize(math.Rand(3, 5))

		particle:SetEndSize(3)

		particle:SetRoll(math.Rand(0, 360))

		particle:SetRollDelta(math.Rand(-20, 20))

		particle:SetAirResistance(5)

		particle:SetGravity(Vector(0, 0, -600))

		particle:SetCollide(true)

		particle:SetLighting(true)

		particle:SetColor(255, 0, 0)

		particle:SetCollideCallback(CollideCallback)

	end

	emitter:Finish()

end



function EFFECT:Think()

	return false

end



function EFFECT:Render()

end

