ph-enhanced/gamemodes/prop_hunt/gamemode/sv_bbox_addition.lua
2019-05-28 09:16:53 +02:00

100 lines
2.5 KiB
Lua

local CUR_MAP_DATA = {}
local function LoadOBBConfig()
local map = game.GetMap()
local GetData = "phe-config/obb/"..map..".txt"
if !file.Exists(GetData, "DATA") then
printVerbose("[PH: Enhanced] No OBB Configuration found for map: "..map)
return false
end
if file.Exists(GetData, "DATA") then
local data = file.Read(GetData,"DATA")
local ParsedData = util.JSONToTable(data)
return ParsedData
end
end
local function DoConfig()
local data = CUR_MAP_DATA
if !data then return end
--[[
JSON structure:
[
[
"model/path/b.mdl",
{
"min": [0, 0, 0],
"max": [16, 16, 72],
"dmin": [0, 0, 0],
"dmax": [16, 16, 28]
}
]
]
LUA structure:
1:
1: "model/path/b.mdl"
2:
min = {-0,-0,-0}
max = {16,16,72}
dmin = {-0,-0,-0}
dmax = {16,16,28}
]]
local function SetEntityData(ent, tab1, tab2)
ent:SetNWBool("hasCustomHull",true)
ent.m_Hull = tab1
ent.m_dHull = tab2
end
for i=1,#data do
local tent = ents.FindByModel(data[i][1])
local min = Vector(data[i][2]["min"][1],data[i][2]["min"][2],data[i][2]["min"][3])
local max = Vector(data[i][2]["max"][1],data[i][2]["max"][2],data[i][2]["max"][3])
local dmin = Vector(data[i][2]["dmin"][1],data[i][2]["dmin"][2],data[i][2]["dmin"][3])
local dmax = Vector(data[i][2]["dmax"][1],data[i][2]["dmax"][2],data[i][2]["dmax"][3])
for _,found in pairs(tent) do
if IsValid(found) then
printVerbose("[PH: Enhanced] OBB MODIFIER: Setting up Vector Value for Entity ["..found:EntIndex().."]["..found:GetModel().."] =\n >Hull-Vector: min "..tostring(min).." max "..tostring(max).."\n >Duck-Hull Vector: dmin "..tostring(dmin).." dmax "..tostring(dmax))
SetEntityData(found,{min,max},{dmin,dmax})
end
end
end
end
hook.Add("Initialize", "PHE.InitOBBModelData", function()
if !file.Exists("phe-config/obb","DATA") then
file.CreateDir("phe-config/obb")
end
timer.Simple(1.5, function()
printVerbose("[PH: Enhanced] Initializing OBB ModelData Config...")
CUR_MAP_DATA = LoadOBBConfig()
DoConfig()
end)
end)
hook.Add("PostCleanupMap", "PHE.PostOBBModelData", function()
if GetConVar("ph_reload_obb_setting_everyround"):GetBool() then
printVerbose("[PH: Enhanced] PostCleanup OBB ModelData Config...")
DoConfig()
end
end)
concommand.Add("refresh_obb_map_setting", function(ply)
printVerbose("[PH: Enhanced] Refreshing OBB Model Data Modifier...")
CUR_MAP_DATA = LoadOBBConfig()
DoConfig()
end, nil, "Reload PH: Enhanced OBB/Collission Bound Model Data Modifier on this map.", FCVAR_SERVER_CAN_EXECUTE)