mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
279 lines
6.7 KiB
Lua
279 lines
6.7 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/
|
||
|
|
--]]
|
||
|
|
|
||
|
|
|
||
|
|
function pace.OnShortcutSave()
|
||
|
|
if not IsValid(pace.current_part) then return end
|
||
|
|
|
||
|
|
local part = pace.current_part:GetRootPart()
|
||
|
|
surface.PlaySound("buttons/button9.wav")
|
||
|
|
pace.SaveParts(nil, "part " .. (part:GetName() or "my outfit"), part, true)
|
||
|
|
end
|
||
|
|
|
||
|
|
function pace.OnShortcutWear()
|
||
|
|
if not IsValid(pace.current_part) then return end
|
||
|
|
|
||
|
|
local part = pace.current_part:GetRootPart()
|
||
|
|
surface.PlaySound("buttons/button9.wav")
|
||
|
|
pace.SendPartToServer(part)
|
||
|
|
pace.FlashNotification('Wearing group: ' .. part:GetName())
|
||
|
|
end
|
||
|
|
|
||
|
|
local last = 0
|
||
|
|
|
||
|
|
function pace.CheckShortcuts()
|
||
|
|
if gui.IsConsoleVisible() then return end
|
||
|
|
if not pace.Editor or not pace.Editor:IsValid() then return end
|
||
|
|
if last > RealTime() or input.IsMouseDown(MOUSE_LEFT) then return end
|
||
|
|
|
||
|
|
if input.IsKeyDown(KEY_LALT) and input.IsKeyDown(KEY_E) then
|
||
|
|
pace.Call("ToggleFocus", true)
|
||
|
|
last = RealTime() + 0.2
|
||
|
|
end
|
||
|
|
|
||
|
|
if input.IsKeyDown(KEY_LCONTROL) and input.IsKeyDown(KEY_E) then
|
||
|
|
pace.Call("ToggleFocus")
|
||
|
|
last = RealTime() + 0.2
|
||
|
|
end
|
||
|
|
|
||
|
|
if input.IsKeyDown(KEY_LALT) and input.IsKeyDown(KEY_LCONTROL) and input.IsKeyDown(KEY_P) then
|
||
|
|
RunConsoleCommand("pac_restart")
|
||
|
|
end
|
||
|
|
|
||
|
|
-- Only if the editor is in the foreground
|
||
|
|
if pace.IsFocused() then
|
||
|
|
if input.IsKeyDown(KEY_LCONTROL) and input.IsKeyDown(KEY_S) then
|
||
|
|
pace.Call("ShortcutSave")
|
||
|
|
last = RealTime() + 0.2
|
||
|
|
end
|
||
|
|
|
||
|
|
-- CTRL + (W)ear?
|
||
|
|
if input.IsKeyDown(KEY_LCONTROL) and input.IsKeyDown(KEY_N) then
|
||
|
|
pace.Call("ShortcutWear")
|
||
|
|
last = RealTime() + 0.2
|
||
|
|
end
|
||
|
|
|
||
|
|
if input.IsKeyDown(KEY_LCONTROL) and input.IsKeyDown(KEY_T) then
|
||
|
|
pace.SetTPose(not pace.GetTPose())
|
||
|
|
last = RealTime() + 0.2
|
||
|
|
end
|
||
|
|
|
||
|
|
if input.IsKeyDown(KEY_LCONTROL) and input.IsKeyDown(KEY_F) then
|
||
|
|
pace.properties.search:SetVisible(true)
|
||
|
|
pace.properties.search:RequestFocus()
|
||
|
|
pace.properties.search:SetEnabled(true)
|
||
|
|
pace.property_searching = true
|
||
|
|
|
||
|
|
last = RealTime() + 0.2
|
||
|
|
end
|
||
|
|
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
pac.AddHook("Think", "pace_shortcuts", pace.CheckShortcuts)
|
||
|
|
|
||
|
|
do
|
||
|
|
local hold = false
|
||
|
|
local last = 0
|
||
|
|
|
||
|
|
local function thinkUndo()
|
||
|
|
-- whooaaa
|
||
|
|
-- if input.IsControlDown() and input.IsKeyDown(KEY_X) then
|
||
|
|
-- pace.UndoPosition = math.Round((gui.MouseY() / ScrH()) * #pace.UndoHistory)
|
||
|
|
-- pace.ApplyUndo()
|
||
|
|
-- return
|
||
|
|
-- end
|
||
|
|
|
||
|
|
if not input.IsKeyDown(KEY_Z) and not input.IsKeyDown(KEY_Y) then
|
||
|
|
hold = false
|
||
|
|
end
|
||
|
|
|
||
|
|
if hold then return end
|
||
|
|
|
||
|
|
if input.IsControlDown() and ((input.IsKeyDown(KEY_LSHIFT) and input.IsKeyDown(KEY_Z)) or input.IsKeyDown(KEY_Y)) then
|
||
|
|
pace.Redo()
|
||
|
|
hold = true
|
||
|
|
elseif input.IsControlDown() and input.IsKeyDown(KEY_Z) then
|
||
|
|
pace.Undo()
|
||
|
|
hold = true
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local hold = false
|
||
|
|
|
||
|
|
local function thinkCopy()
|
||
|
|
if not input.IsKeyDown(KEY_C) then
|
||
|
|
hold = false
|
||
|
|
end
|
||
|
|
|
||
|
|
if hold or not (input.IsControlDown() and input.IsKeyDown(KEY_C)) then return end
|
||
|
|
|
||
|
|
-- copy
|
||
|
|
hold = true
|
||
|
|
local part = pace.current_part
|
||
|
|
|
||
|
|
if not part or not part:IsValid() then
|
||
|
|
pace.FlashNotification('No part selected to copy')
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
pace.Copy(part)
|
||
|
|
|
||
|
|
surface.PlaySound("buttons/button9.wav")
|
||
|
|
end
|
||
|
|
|
||
|
|
local hold = false
|
||
|
|
|
||
|
|
local function thinkCut()
|
||
|
|
if not input.IsKeyDown(KEY_X) then
|
||
|
|
hold = false
|
||
|
|
end
|
||
|
|
|
||
|
|
if hold or not (input.IsControlDown() and input.IsKeyDown(KEY_X)) then return end
|
||
|
|
|
||
|
|
-- copy
|
||
|
|
hold = true
|
||
|
|
local part = pace.current_part
|
||
|
|
|
||
|
|
if not part or not part:IsValid() then
|
||
|
|
pace.FlashNotification('No part selected to cut')
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
pace.Cut(part)
|
||
|
|
|
||
|
|
surface.PlaySound("buttons/button9.wav")
|
||
|
|
end
|
||
|
|
|
||
|
|
local hold = false
|
||
|
|
|
||
|
|
local function thinkDelete()
|
||
|
|
if not input.IsKeyDown(KEY_DELETE) then
|
||
|
|
hold = false
|
||
|
|
end
|
||
|
|
|
||
|
|
if hold or not input.IsKeyDown(KEY_DELETE) then return end
|
||
|
|
|
||
|
|
-- delete
|
||
|
|
hold = true
|
||
|
|
local part = pace.current_part
|
||
|
|
|
||
|
|
if not part or not part:IsValid() then
|
||
|
|
pace.FlashNotification('No part to delete')
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
pace.RemovePart(part)
|
||
|
|
|
||
|
|
surface.PlaySound("buttons/button9.wav")
|
||
|
|
end
|
||
|
|
|
||
|
|
local REVERSE_COLLAPSE_CONTROLS = CreateConVar('pac_reverse_collapse', '1', {FCVAR_ARCHIVE}, 'Reverse Collapse/Expand hotkeys')
|
||
|
|
local hold = false
|
||
|
|
|
||
|
|
local function thinkExpandAll()
|
||
|
|
if not input.IsKeyDown(KEY_LALT) and not input.IsKeyDown(KEY_RALT) and not input.IsKeyDown(KEY_0) then
|
||
|
|
hold = false
|
||
|
|
end
|
||
|
|
|
||
|
|
if hold or not input.IsShiftDown() or (not input.IsKeyDown(KEY_LALT) and not input.IsKeyDown(KEY_RALT)) or not input.IsKeyDown(KEY_0) then return end
|
||
|
|
|
||
|
|
-- expand all
|
||
|
|
hold = true
|
||
|
|
local part = pace.current_part
|
||
|
|
|
||
|
|
if not part or not part:IsValid() then
|
||
|
|
pace.FlashNotification('No part to expand')
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
part:CallRecursive('SetEditorExpand', not REVERSE_COLLAPSE_CONTROLS:GetBool())
|
||
|
|
|
||
|
|
surface.PlaySound("buttons/button9.wav")
|
||
|
|
pace.RefreshTree(true)
|
||
|
|
end
|
||
|
|
|
||
|
|
local hold = false
|
||
|
|
|
||
|
|
local function thinkCollapseAll()
|
||
|
|
if not input.IsKeyDown(KEY_LALT) and not input.IsKeyDown(KEY_RALT) and not input.IsKeyDown(KEY_0) then
|
||
|
|
hold = false
|
||
|
|
end
|
||
|
|
|
||
|
|
if hold or input.IsShiftDown() or (not input.IsKeyDown(KEY_LALT) and not input.IsKeyDown(KEY_RALT)) or not input.IsKeyDown(KEY_0) then return end
|
||
|
|
|
||
|
|
-- collapse all
|
||
|
|
hold = true
|
||
|
|
local part = pace.current_part
|
||
|
|
|
||
|
|
if not part or not part:IsValid() then
|
||
|
|
pace.FlashNotification('No part to collapse')
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
part:CallRecursive('SetEditorExpand', REVERSE_COLLAPSE_CONTROLS:GetBool())
|
||
|
|
|
||
|
|
surface.PlaySound("buttons/button9.wav")
|
||
|
|
pace.RefreshTree(true)
|
||
|
|
end
|
||
|
|
|
||
|
|
local hold = false
|
||
|
|
|
||
|
|
local function thinkPaste()
|
||
|
|
if not input.IsKeyDown(KEY_V) then
|
||
|
|
hold = false
|
||
|
|
end
|
||
|
|
|
||
|
|
if hold or not (input.IsControlDown() and input.IsKeyDown(KEY_V)) then return end
|
||
|
|
|
||
|
|
-- paste
|
||
|
|
hold = true
|
||
|
|
local part = pace.Clipboard
|
||
|
|
|
||
|
|
if not part then
|
||
|
|
pace.FlashNotification('No part is stored in clipboard')
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
local findParent
|
||
|
|
|
||
|
|
if part == pace.current_part then
|
||
|
|
findParent = part:GetParent()
|
||
|
|
|
||
|
|
if not findParent or not findParent:IsValid() then
|
||
|
|
findParent = part
|
||
|
|
end
|
||
|
|
elseif pace.current_part and pace.current_part:IsValid() then
|
||
|
|
findParent = pace.current_part
|
||
|
|
else
|
||
|
|
pace.RecordUndoHistory()
|
||
|
|
findParent = pace.Call("CreatePart", "group", L"paste data")
|
||
|
|
pace.RecordUndoHistory()
|
||
|
|
end
|
||
|
|
|
||
|
|
pace.Paste(findParent)
|
||
|
|
|
||
|
|
surface.PlaySound("buttons/button9.wav")
|
||
|
|
end
|
||
|
|
|
||
|
|
pac.AddHook("Think", "pace_keyboard_shortcuts", function()
|
||
|
|
if not pace.IsActive() then return end
|
||
|
|
if not pace.Focused then return end
|
||
|
|
if IsValid(vgui.GetKeyboardFocus()) and vgui.GetKeyboardFocus():GetClassName():find('Text') then return end
|
||
|
|
if gui.IsConsoleVisible() then return end
|
||
|
|
thinkUndo()
|
||
|
|
thinkCopy()
|
||
|
|
thinkPaste()
|
||
|
|
thinkCut()
|
||
|
|
thinkDelete()
|
||
|
|
thinkExpandAll()
|
||
|
|
thinkCollapseAll()
|
||
|
|
end)
|
||
|
|
end
|