mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
191 lines
6.6 KiB
Lua
191 lines
6.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/
|
|
--]]
|
|
|
|
local L = pace.LanguageString
|
|
|
|
local function add_expensive_submenu_load(pnl, callback)
|
|
local old = pnl.OnCursorEntered
|
|
pnl.OnCursorEntered = function(...)
|
|
callback()
|
|
pnl.OnCursorEntered = old
|
|
return old(...)
|
|
end
|
|
end
|
|
|
|
local function populate_pac(menu)
|
|
do
|
|
local menu, icon = menu:AddSubMenu(L"save", function() pace.SaveParts() end)
|
|
menu:SetDeleteSelf(false)
|
|
icon:SetImage(pace.MiscIcons.save)
|
|
add_expensive_submenu_load(icon, function() pace.AddSaveMenuToMenu(menu) end)
|
|
end
|
|
|
|
do
|
|
local menu, icon = menu:AddSubMenu(L"load", function() pace.LoadParts(nil, true) end)
|
|
menu:SetDeleteSelf(false)
|
|
icon:SetImage(pace.MiscIcons.load)
|
|
add_expensive_submenu_load(icon, function() pace.AddSavedPartsToMenu(menu, true) end)
|
|
end
|
|
|
|
do
|
|
local menu, icon = menu:AddSubMenu(L"wear", function() pace.WearParts() end)
|
|
menu:SetDeleteSelf(false)
|
|
icon:SetImage(pace.MiscIcons.wear)
|
|
|
|
pace.PopulateWearMenu(menu)
|
|
end
|
|
|
|
do
|
|
menu:AddOption(L"request", function() RunConsoleCommand("pac_request_outfits") pac.Message('Requesting outfits.') end):SetImage(pace.MiscIcons.replace)
|
|
end
|
|
|
|
do
|
|
local menu, icon = menu:AddSubMenu(L"clear", function() end)
|
|
icon:SetImage(pace.MiscIcons.clear)
|
|
menu.GetDeleteSelf = function() return false end
|
|
menu:AddOption(L"OK", function() pace.ClearParts() end):SetImage(pace.MiscIcons.clear)
|
|
end
|
|
|
|
menu:AddSpacer()
|
|
|
|
do
|
|
local help, help_pnl = menu:AddSubMenu(L"help", function() pace.ShowWiki() end)
|
|
help.GetDeleteSelf = function() return false end
|
|
help_pnl:SetImage(pace.MiscIcons.help)
|
|
|
|
help:AddOption(
|
|
L"Getting Started",
|
|
function() pace.ShowWiki(pace.WikiURL .. "Beginners-FAQ") end
|
|
):SetImage(pace.MiscIcons.info)
|
|
|
|
do
|
|
local chat_pnl = help:AddOption(
|
|
L"Discord / PAC3 Chat",
|
|
function() gui.OpenURL("https://discord.gg/utpR3gJ") cookie.Set("pac3_discord_ad", 3) end
|
|
) chat_pnl:SetImage(pace.MiscIcons.chat)
|
|
|
|
if cookie.GetNumber("pac3_discord_ad", 0) < 3 then
|
|
help_pnl.PaintOver = function(_,w,h) surface.SetDrawColor(255,255,0,50 + math.sin(SysTime()*20)*20) surface.DrawRect(0,0,w,h) end
|
|
chat_pnl.PaintOver = help_pnl.PaintOver
|
|
cookie.Set("pac3_discord_ad", cookie.GetNumber("pac3_discord_ad", 0) + 1)
|
|
end
|
|
end
|
|
|
|
local version_string = _G.PAC_VERSION and PAC_VERSION()
|
|
if version_string then
|
|
local version, version_pnl = help:AddSubMenu(L"Version", function() pace.ShowWiki() end)
|
|
version.GetDeleteSelf = function() return false end
|
|
version_pnl:SetImage(pace.MiscIcons.info)
|
|
|
|
version:AddOption(version_string)
|
|
end
|
|
|
|
help:AddOption(
|
|
L"about",
|
|
function() pace.ShowAbout() end
|
|
):SetImage(pace.MiscIcons.about)
|
|
end
|
|
|
|
do
|
|
menu:AddOption(L"exit", function() pace.CloseEditor() end):SetImage(pace.MiscIcons.exit)
|
|
end
|
|
end
|
|
|
|
local function populate_view(menu)
|
|
menu:AddOption(L"hide editor",
|
|
function() pace.Call("ToggleFocus") chat.AddText("[PAC3] \"ctrl + e\" to get the editor back")
|
|
end):SetImage("icon16/application_delete.png")
|
|
|
|
menu:AddCVar(L"camera follow: "..GetConVar("pac_camera_follow_entity"):GetInt(), "pac_camera_follow_entity", "1", "0"):SetImage("icon16/camera_go.png")
|
|
menu:AddCVar(L"enable editor camera: "..GetConVar("pac_enable_editor_view"):GetInt(), "pac_enable_editor_view", "1", "0"):SetImage("icon16/camera.png")
|
|
menu:AddOption(L"reset view position", function() pace.ResetView() end):SetImage("icon16/camera_link.png")
|
|
menu:AddOption(L"reset zoom", function() pace.ResetZoom() end):SetImage("icon16/magnifier.png")
|
|
end
|
|
|
|
local function populate_options(menu)
|
|
menu:AddOption(L"settings", function() pace.OpenSettings() end)
|
|
menu:AddCVar(L"inverse collapse/expand controls", "pac_reverse_collapse", "1", "0")
|
|
menu:AddCVar(L"enable shift+move/rotate clone", "pac_grab_clone", "1", "0")
|
|
menu:AddCVar(L"remember editor position", "pac_editor_remember_position", "1", "0")
|
|
menu:AddCVar(L"show parts IDs", "pac_show_uniqueid", "1", "0")
|
|
menu:AddSpacer()
|
|
menu:AddOption(L"position grid size", function()
|
|
Derma_StringRequest(L"position grid size", L"size in units:", GetConVarNumber("pac_grid_pos_size"), function(val)
|
|
RunConsoleCommand("pac_grid_pos_size", val)
|
|
end)
|
|
end)
|
|
menu:AddOption(L"angles grid size", function()
|
|
Derma_StringRequest(L"angles grid size", L"size in degrees:", GetConVarNumber("pac_grid_ang_size"), function(val)
|
|
RunConsoleCommand("pac_grid_ang_size", val)
|
|
end)
|
|
end)
|
|
menu:AddCVar(L"render attachments as bones", "pac_render_attachments", "1", "0").DoClick = function() pace.ToggleRenderAttachments() end
|
|
menu:AddSpacer()
|
|
|
|
menu:AddCVar(L"automatic property size", "pac_auto_size_properties", "1", "0")
|
|
menu:AddCVar(L"enable language identifier in text fields", "pac_editor_languageid", "1", "0")
|
|
pace.AddLanguagesToMenu(menu)
|
|
pace.AddFontsToMenu(menu)
|
|
|
|
menu:AddSpacer()
|
|
|
|
local rendering, pnl = menu:AddSubMenu(L"rendering", function() end)
|
|
rendering.GetDeleteSelf = function() return false end
|
|
pnl:SetImage("icon16/camera_edit.png")
|
|
rendering:AddCVar(L"no outfit reflections", "pac_optimization_render_once_per_frame", "1", "0")
|
|
end
|
|
|
|
local function populate_player(menu)
|
|
local pnl = menu:AddOption(L"t pose", function() pace.SetTPose(not pace.GetTPose()) end):SetImage("icon16/user_go.png")
|
|
menu:AddOption(L"reset eye angles", function() pace.ResetEyeAngles() end):SetImage("icon16/user_delete.png")
|
|
menu:AddOption(L"reset zoom", function() pace.ResetZoom() end):SetImage("icon16/magnifier.png")
|
|
|
|
-- this should be in pacx but it's kinda stupid to add a hook just to populate the player menu
|
|
-- make it more generic
|
|
if pacx and pacx.GetServerModifiers then
|
|
local mods, pnl = menu:AddSubMenu(L"modifiers", function() end)
|
|
pnl:SetImage("icon16/user_edit.png")
|
|
mods.GetDeleteSelf = function() return false end
|
|
for name in pairs(pacx.GetServerModifiers()) do
|
|
mods:AddCVar(L(name), "pac_modifier_" .. name, "1", "0")
|
|
end
|
|
end
|
|
end
|
|
|
|
function pace.OnMenuBarPopulate(bar)
|
|
for k,v in pairs(bar.Menus) do
|
|
v:Remove()
|
|
end
|
|
|
|
populate_pac(bar:AddMenu("pac"))
|
|
populate_view(bar:AddMenu(L"view"))
|
|
populate_options(bar:AddMenu(L"options"))
|
|
populate_player(bar:AddMenu(L"player"))
|
|
pace.AddToolsToMenu(bar:AddMenu(L"tools"))
|
|
|
|
bar:RequestFocus(true)
|
|
end
|
|
|
|
function pace.OnOpenMenu()
|
|
local menu = DermaMenu()
|
|
menu:SetPos(input.GetCursorPos())
|
|
|
|
populate_player(menu) menu:AddSpacer()
|
|
populate_view(menu) menu:AddSpacer()
|
|
populate_options(menu) menu:AddSpacer()
|
|
populate_pac(menu) menu:AddSpacer()
|
|
|
|
local menu, pnl = menu:AddSubMenu(L"tools")
|
|
pnl:SetImage("icon16/plugin.png")
|
|
pace.AddToolsToMenu(menu)
|
|
|
|
menu:MakePopup()
|
|
end
|