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



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)

end



local vecGravity = Vector(0, 0, -500)

function EFFECT:Init(data)

	local ent = data:GetEntity()

	if not ent:IsValid() then return end



	ent:EmitSound("physics/flesh/flesh_bloody_break.wav")



	local basepos = ent:GetPos()

	local vel = ent:GetVelocity()

	local dir = vel:GetNormalized()

	local up = ent:GetUp()

	local speed = math.Clamp(vel:Length() * 2, 512, 2048)



	local emitter = ParticleEmitter(ent:LocalToWorld(ent:OBBCenter()))

	emitter:SetNearClip(24, 32)



	for boneid = 1, ent:GetBoneCount() - 1 do

		local pos, ang = ent:GetBonePositionMatrixed(boneid)

		if pos and pos ~= basepos then

			for i=1, math.random(1, 3) do

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

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

				particle:SetVelocity(speed * math.Rand(0.5, 1) * heading)

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

				particle:SetStartAlpha(200)

				particle:SetEndAlpha(200)

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

				particle:SetEndSize(2)

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

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

				particle:SetAirResistance(8)

				particle:SetGravity(vecGravity)

				particle:SetCollide(true)

				particle:SetLighting(true)

				particle:SetColor(255, 0, 0)

				particle:SetCollideCallback(CollideCallback)

			end



			for i=1, 4 do

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

				particle:SetVelocity(math.Rand(0.5, 4) * (VectorRand():GetNormalized() + dir))

				particle:SetDieTime(math.Rand(0.75, 2))

				particle:SetStartAlpha(230)

				particle:SetEndAlpha(0)

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

				particle:SetEndSize(3)

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

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

				particle:SetLighting(true)

				particle:SetColor(255, 0, 0)

			end

		end

	end



	emitter:Finish()

end



function EFFECT:Think()

	return false

end



function EFFECT:Render()

end

