mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
279
lua/pac3/editor/client/shortcuts.lua
Normal file
279
lua/pac3/editor/client/shortcuts.lua
Normal file
@@ -0,0 +1,279 @@
|
||||
--[[
|
||||
| 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
|
||||
Reference in New Issue
Block a user