mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-18 06:03:47 +03:00
Upload
This commit is contained in:
161
lua/pac3/core/client/parts.lua
Normal file
161
lua/pac3/core/client/parts.lua
Normal file
@@ -0,0 +1,161 @@
|
||||
--[[
|
||||
| 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 pac = pac
|
||||
local part_count = 0 -- unique id thing
|
||||
local pairs = pairs
|
||||
|
||||
pac.registered_parts = {}
|
||||
|
||||
local function on_error(msg)
|
||||
ErrorNoHalt(debug.traceback(msg))
|
||||
end
|
||||
|
||||
local function initialize(part, owner)
|
||||
if part.PreInitialize then
|
||||
part:PreInitialize()
|
||||
end
|
||||
|
||||
pac.AddPart(part)
|
||||
|
||||
if owner then
|
||||
part:SetPlayerOwner(owner)
|
||||
end
|
||||
|
||||
part:Initialize()
|
||||
end
|
||||
|
||||
function pac.CreatePart(name, owner, tbl, make_copy, level)
|
||||
level = level or 0
|
||||
name = name or "base"
|
||||
owner = owner or pac.LocalPlayer
|
||||
|
||||
local META = pac.registered_parts[name]
|
||||
|
||||
if not META then
|
||||
pac.Message("Tried to create unknown part: " .. name .. '!')
|
||||
META = pac.registered_parts.base
|
||||
if not META then
|
||||
return NULL
|
||||
end
|
||||
end
|
||||
|
||||
local part = setmetatable({}, META)
|
||||
|
||||
part.Id = part_count
|
||||
part_count = part_count + 1
|
||||
|
||||
if not tbl or not tbl.self.UniqueID then
|
||||
part:SetUniqueID(pac.Hash())
|
||||
end
|
||||
|
||||
part.DefaultVars = {}
|
||||
|
||||
for key in pairs(part.StorableVars) do
|
||||
if key == "UniqueID" then
|
||||
part.DefaultVars[key] = ""
|
||||
else
|
||||
part.DefaultVars[key] = pac.CopyValue(part[key])
|
||||
end
|
||||
end
|
||||
|
||||
local ok, err = xpcall(initialize, on_error, part, owner)
|
||||
|
||||
if not ok then
|
||||
part:Remove()
|
||||
|
||||
if part.ClassName ~= "base" then
|
||||
return pac.CreatePart("base", owner, tbl)
|
||||
end
|
||||
end
|
||||
|
||||
if tbl then
|
||||
part:SetTable(tbl, make_copy, level)
|
||||
end
|
||||
|
||||
if not META.GloballyEnabled then
|
||||
part:SetEnabled(false)
|
||||
end
|
||||
|
||||
pac.dprint("creating %s part owned by %s", part.ClassName, tostring(owner))
|
||||
|
||||
return part
|
||||
end
|
||||
|
||||
local reloading = false
|
||||
|
||||
function pac.RegisterPart(META)
|
||||
assert(isstring(META.ClassName), "Part has no classname")
|
||||
assert(istable(META.StorableVars), "Part " .. META.ClassName .. " has no StorableVars")
|
||||
|
||||
do
|
||||
local cvarName = "pac_enable_" .. string.Replace(META.ClassName, " ", "_"):lower()
|
||||
local cvar = CreateClientConVar(cvarName, "1", true)
|
||||
|
||||
cvars.AddChangeCallback(cvarName, function(name, old, new)
|
||||
local enable = tobool(new)
|
||||
META.GloballyEnabled = enable
|
||||
if enable then
|
||||
pac.Message("enabling parts by class " .. META.ClassName)
|
||||
else
|
||||
pac.Message("disabling parts by class " .. META.ClassName)
|
||||
end
|
||||
pac.EnablePartsByClass(META.ClassName, enable)
|
||||
end)
|
||||
|
||||
META.GloballyEnabled = cvar:GetBool()
|
||||
end
|
||||
|
||||
META.__index = META
|
||||
pac.registered_parts[META.ClassName] = META
|
||||
|
||||
if pac.UpdatePartsWithMetatable and _G.pac_ReloadParts then
|
||||
|
||||
if PAC_RESTART then return end
|
||||
if not Entity(1):IsPlayer() then return end
|
||||
if pac.in_initialize then return end
|
||||
|
||||
if not reloading then
|
||||
reloading = true
|
||||
_G.pac_ReloadParts()
|
||||
reloading = false
|
||||
end
|
||||
|
||||
timer.Create("pac_reload", 0, 1, function()
|
||||
for _, other_meta in pairs(pac.registered_parts) do
|
||||
pac.UpdatePartsWithMetatable(other_meta)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
function pac.LoadParts()
|
||||
print("loading all parts")
|
||||
|
||||
include("base_part.lua")
|
||||
include("base_movable.lua")
|
||||
include("base_drawable.lua")
|
||||
|
||||
local files = file.Find("pac3/core/client/parts/*.lua", "LUA")
|
||||
for _, name in pairs(files) do
|
||||
include("pac3/core/client/parts/" .. name)
|
||||
end
|
||||
|
||||
local files = file.Find("pac3/core/client/parts/legacy/*.lua", "LUA")
|
||||
for _, name in pairs(files) do
|
||||
include("pac3/core/client/parts/legacy/" .. name)
|
||||
end
|
||||
end
|
||||
|
||||
function pac.GetRegisteredParts()
|
||||
return pac.registered_parts
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user