mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
87 lines
1.8 KiB
Lua
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)
|