Files
wnsrc/lua/pac3/editor/client/menu_bar.lua

191 lines
6.6 KiB
Lua
Raw Normal View History

2024-08-04 22:55:00 +03:00
--[[
| 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