Files
wnsrc/lua/niknaks/framework/sh_localbsp.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

99 lines
2.6 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/
--]]
-- Copyright © 2022-2072, Nak, https://steamcommunity.com/id/Nak2/
-- All Rights Reserved. Not allowed to be reuploaded.
-- Load the current map
--- @type BSPObject
local BSP, BSP_ERR = NikNaks.Map()
local NikNaks = NikNaks
--- @type BSPObject
NikNaks.CurrentMap = BSP
if not BSP and BSP_ERR then
if BSP_ERR == NikNaks.BSP_ERROR_FILECANTOPEN then
ErrorNoHalt("NikNaks are unable to open the mapfile!")
elseif BSP_ERR == NikNaks.BSP_ERROR_NOT_BSP then
ErrorNoHalt("NikNaks can't read the mapfile (It isn't VBSP)!")
elseif BSP_ERR == NikNaks.BSP_ERROR_TOO_NEW then
ErrorNoHalt("NikNaks can't read the mapfile (Newer than v20)!")
elseif BSP_ERR == NikNaks.BSP_ERROR_FILENOTFOUND then
ErrorNoHalt("NikNaks can't read the mapfile (File not found)!")
else
ErrorNoHalt("NikNaks can't read the mapfile (Unknown)!")
end
end
hook.Add( "PreDrawTranslucentRenderables", "NikNaks-FixEyePos", function()
EyePos()
end )
-- Local PVS
NikNaks.PVS = {}
do
local last_client, last_pvs
local function calcPVS()
local leaf, new = BSP:PointInLeafCache( 0, EyePos(), last_client )
if not new then return last_pvs end
last_client = leaf
last_pvs = leaf:CreatePVS()
return last_pvs
end
setmetatable(NikNaks.PVS, {
__call = function(_, pos)
if pos then
return BSP:PVSForOrigin( pos )
end
if CLIENT then
return calcPVS()
end
end})
---Will return true if the position is within the current PVS.
---@param position Vector
---@param position2 Vector If nil, will be the clients EyePosition
---@return boolean
function NikNaks.PVS.IsPositionVisible( position, position2 )
return calcPVS(position2):TestPosition( position )
end
end
-- Local PAS
NikNaks.PAS = {}
do
local last_client, last_pas
local function calcPAS()
local leaf, new = BSP:PointInLeafCache( 0, EyePos(), last_client )
if not new then return last_pas end
last_client = leaf
last_pas = leaf:CreatePVS()
return last_pas
end
setmetatable(NikNaks.PAS, {
__call = function(_, pos)
if pos then
return BSP:PASForOrigin( pos )
end
if CLIENT then
return calcPAS()
end
end})
---Will return true if the position is within the current PAS.
---@param position Vector
---@param position2 Vector If nil, will be the clients EyePosition
---@return boolean
function NikNaks.PAS.IsPositionVisible( position, position2 )
return calcPAS(position2):TestPosition( position )
end
end