mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
158
lua/niknaks/modules/sh_util_extended.lua
Normal file
158
lua/niknaks/modules/sh_util_extended.lua
Normal file
@@ -0,0 +1,158 @@
|
||||
--[[
|
||||
| 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.
|
||||
local NikNaks = NikNaks
|
||||
local tostring, tonumber, tobool, Angle, Vector, string_ToColor = tostring, tonumber, tobool, Angle, Vector, string.ToColor
|
||||
|
||||
|
||||
-- Lua based type fix
|
||||
-- TODO: Note sure if it should be added
|
||||
if false then
|
||||
NikNaks.oldType = type
|
||||
function NikNaks.isnumber( var )
|
||||
local mt = getmetatable( var )
|
||||
if not mt or mt.MetaName ~= "number" then return false end
|
||||
return true
|
||||
end
|
||||
function NikNaks.isstring( var )
|
||||
local mt = getmetatable( var )
|
||||
if not mt or mt.MetaName ~= "string" then return false end
|
||||
return true
|
||||
end
|
||||
function NikNaks.istable( var )
|
||||
if not getmetatable( var ) then return true end
|
||||
return false
|
||||
end
|
||||
function NikNaks.isfunction( var )
|
||||
local mt = getmetatable( var )
|
||||
if not mt or mt.MetaName ~= "function" then return false end
|
||||
return true
|
||||
end
|
||||
function NikNaks.isvector( var )
|
||||
local mt = getmetatable( var )
|
||||
if not mt or mt.MetaName ~= "Vector" then return false end
|
||||
return true
|
||||
end
|
||||
function NikNaks.isangle( var )
|
||||
local mt = getmetatable( var )
|
||||
if not mt or mt.MetaName ~= "Angle" then return false end
|
||||
return true
|
||||
end
|
||||
function NikNaks.isbool( var )
|
||||
return var == true or var == false or false
|
||||
end
|
||||
function NikNaks.isplayer( var )
|
||||
local mt = getmetatable( var )
|
||||
if not mt or mt.MetaName ~= "Player" then return false end
|
||||
return true
|
||||
end
|
||||
function NikNaks.isentity( var )
|
||||
local mt = getmetatable( var )
|
||||
if not mt or (mt.MetaName ~= "Player" and mt.MetaName ~= "Entity" ) then return false end
|
||||
return true
|
||||
end
|
||||
local function PatchMetaName( var, str )
|
||||
-- If it has a metatable.
|
||||
local mt = getmetatable(var)
|
||||
if mt then -- Make sure the metatable has the metaname
|
||||
mt.MetaName = str
|
||||
else
|
||||
local tab = {["MetaName"] = str}
|
||||
debug.setmetatable(var, tab)
|
||||
end
|
||||
end
|
||||
PatchMetaName("", "string")
|
||||
PatchMetaName(1, "number")
|
||||
PatchMetaName(function() end, "function")
|
||||
PatchMetaName(coroutine.create(function() end), "thread")
|
||||
|
||||
function NikNaks.type( var )
|
||||
local mt = getmetatable( var )
|
||||
if mt and mt.MetaName then return mt.MetaName end
|
||||
return "table"
|
||||
end
|
||||
end
|
||||
|
||||
--- Same as AccessorFunc, but will make 'Set' functions return self. Allowing you to chain-call.
|
||||
--- @param tab table
|
||||
--- @param varname string
|
||||
--- @param name string
|
||||
--- @param iForce? number
|
||||
function NikNaks.AccessorFuncEx( tab, varname, name, iForce )
|
||||
if not tab then debug.Trace() end
|
||||
tab[ "Get" .. name ] = function( self ) return self[ varname ] end
|
||||
if ( iForce == FORCE_STRING ) then
|
||||
tab[ "Set" .. name ] = function( self, v ) self[ varname ] = tostring( v ) return self end
|
||||
return end
|
||||
if ( iForce == FORCE_NUMBER ) then
|
||||
tab[ "Set" .. name ] = function( self, v ) self[ varname ] = tonumber( v ) return self end
|
||||
return end
|
||||
if ( iForce == FORCE_BOOL ) then
|
||||
tab[ "Set" .. name ] = function( self, v ) self[ varname ] = tobool( v ) return self end
|
||||
return end
|
||||
if ( iForce == FORCE_ANGLE ) then
|
||||
tab[ "Set" .. name ] = function( self, v ) self[ varname ] = Angle( v ) return self end
|
||||
return end
|
||||
if ( iForce == FORCE_COLOR ) then
|
||||
tab[ "Set" .. name ] = function( self, v )
|
||||
if ( NikNaks.type( v ) == "Vector" ) then self[ varname ] = v:ToColor()
|
||||
else self[ varname ] = string_ToColor( tostring( v ) ) end
|
||||
return self
|
||||
end
|
||||
return end
|
||||
if ( iForce == FORCE_VECTOR ) then
|
||||
tab[ "Set" .. name ] = function( self, v )
|
||||
if ( IsColor( v ) ) then self[ varname ] = v:ToVector()
|
||||
else self[ varname ] = Vector( v ) end
|
||||
return self
|
||||
end
|
||||
return end
|
||||
tab[ "Set" .. name ] = function( self, v ) self[ varname ] = v return self end
|
||||
end
|
||||
|
||||
NikNaks.util = {}
|
||||
|
||||
-- Hull
|
||||
do
|
||||
--- Returns a HULL_ENUM fitting the hull given.
|
||||
--- @param vecMin Vector
|
||||
--- @param vecMax Vector
|
||||
--- @return number HULL_ENUM
|
||||
function NikNaks.util.FindHull( vecMin, vecMax )
|
||||
local wide = max(-vecMin.x, -vecMin.y, vecMax.x, vecMax.y)
|
||||
local high = vecMax.z - vecMin.z
|
||||
if wide <= 16 and high <= 8 then
|
||||
return NikNaks.HULL_TINY_CENTERED
|
||||
elseif wide <= 24 and high <= 24 then
|
||||
return NikNaks.HULL_TINY
|
||||
elseif wide <= 40 and high <= 40 then
|
||||
return NikNaks.HULL_SMALL_CENTERED
|
||||
elseif wide <= 36 and high <= 65 then
|
||||
return NikNaks.HULL_MEDIUM
|
||||
elseif wide <= 32 and high <= 73 then
|
||||
return NikNaks.HULL_HUMAN
|
||||
elseif wide <= 36 and high <= 100 then
|
||||
return NikNaks.HULL_MEDIUM_TALL
|
||||
else
|
||||
return NikNaks.HULL_LARGE
|
||||
end
|
||||
end
|
||||
|
||||
--- Returns a HULL_ENUM matching the entitys hull.
|
||||
--- @param entity Entity
|
||||
--- @return number HULL_ENUM
|
||||
function NikNaks.util.FindEntityHull( entity )
|
||||
if entity.GetHull then return entity:GetHull() end
|
||||
local mi, ma = entity:OBBMins(), entity:OBBMaxs()
|
||||
return FindHull( mi, ma )
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user