Files
wnsrc/lua/pac3/core/client/parts/camera.lua
lifestorm 73479cff9e Upload
2024-08-04 22:55:00 +03:00

87 lines
1.8 KiB
Lua

--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
local LerpAngle = LerpAngle
local BUILDER, PART = pac.PartTemplate("base_movable")
PART.ClassName = "camera"
PART.Group = 'entity'
PART.Icon = 'icon16/camera.png'
BUILDER:StartStorableVars()
BUILDER:GetSet("EyeAnglesLerp", 1)
BUILDER:GetSet("DrawViewModel", false)
BUILDER:GetSet("NearZ", -1)
BUILDER:GetSet("FarZ", -1)
BUILDER:GetSet("FOV", -1)
BUILDER:EndStorableVars()
for i, ply in ipairs(player.GetAll()) do
ply.pac_cameras = nil
end
function PART:OnShow()
local owner = self:GetRootPart():GetOwner()
if not owner:IsValid() then return end
owner.pac_cameras = owner.pac_cameras or {}
owner.pac_cameras[self] = self
end
function PART:CalcView(_, _, eyeang, fov, nearz, farz)
local pos, ang = self:GetDrawPosition(nil, true)
ang = LerpAngle(self.EyeAnglesLerp, ang, eyeang)
if self.NearZ > 0 then
nearz = self.NearZ
end
if self.FarZ > 0 then
farz = self.FarZ
end
if self.FOV > 0 then
fov = self.FOV
end
return pos, ang, fov, nearz, farz
end
BUILDER:Register()
local temp = {}
pac.AddHook("CalcView", "camera_part", function(ply, pos, ang, fov, nearz, farz)
if not ply.pac_cameras then return end
if ply:GetViewEntity() ~= ply then return end
for _, part in pairs(ply.pac_cameras) do
if part:IsValid() then
part:CalcShowHide()
if not part:IsHidden() then
pos, ang, fov, nearz, farz = part:CalcView(ply, pos, ang, fov, nearz, farz)
temp.origin = pos
temp.angles = ang
temp.fov = fov
temp.znear = nearz
temp.zfar = farz
temp.drawviewer = not part.DrawViewModel
return temp
end
else
ply.pac_cameras[part] = nil
end
end
end)