45 lines
1.2 KiB
Lua
45 lines
1.2 KiB
Lua
local view = {
|
|
origin = Vector(0, 0, 0),
|
|
angles = Angle(0, 0, 0),
|
|
fov = 90,
|
|
znear = 1
|
|
}
|
|
|
|
local deathpov = GM.Config.deathpov
|
|
hook.Add("CalcView", "rp_deathPOV", function(ply, origin, angles, fov)
|
|
-- Entity:Alive() is being slow as hell, we might actually see ourselves from third person for frame or two
|
|
if not deathpov or ply:Health() > 0 then return end
|
|
|
|
local Ragdoll = ply:GetRagdollEntity()
|
|
if not IsValid(Ragdoll) then return end
|
|
|
|
local head = Ragdoll:LookupAttachment("eyes")
|
|
head = Ragdoll:GetAttachment(head)
|
|
if not head or not head.Pos then return end
|
|
|
|
if not Ragdoll.BonesRattled then
|
|
Ragdoll.BonesRattled = true
|
|
|
|
Ragdoll:InvalidateBoneCache()
|
|
Ragdoll:SetupBones()
|
|
|
|
local matrix
|
|
|
|
for bone = 0, (Ragdoll:GetBoneCount() or 1) do
|
|
if Ragdoll:GetBoneName(bone):lower():find("head") then
|
|
matrix = Ragdoll:GetBoneMatrix(bone)
|
|
break
|
|
end
|
|
end
|
|
|
|
if IsValid(matrix) then
|
|
matrix:SetScale(Vector(0, 0, 0))
|
|
end
|
|
end
|
|
|
|
view.origin = head.Pos + head.Ang:Up() * 8
|
|
view.angles = head.Ang
|
|
|
|
return view
|
|
end)
|