Download CommonLua/X/XLayers.lua from sirnii/myspace: direct link, hf CLI and curl.
- Browser
- Download file 6 kB
-
https://huggingface.co/spaces/sirnii/myspace/resolve/main/CommonLua/X/XLayers.lua
- Command line
-
hf download hf://spaces/sirnii/myspace/CommonLua/X/XLayers.lua
-
curl -L -o XLayers.lua https://huggingface.co/spaces/sirnii/myspace/resolve/main/CommonLua/X/XLayers.lua
6 kB
| ----- XPauseLayer | |
| DefineClass.XPauseLayer = { | |
| __parents = { "XLayer" }, | |
| properties = { | |
| { category = "General", id = "keep_sounds", name = "Keep Sounds", editor = "bool", default = false }, | |
| { category = "General", id = "togglePauseDialog", name = "Toggle Pause Dialog", editor = "bool", default = true }, | |
| }, | |
| Dock = "ignore", | |
| HandleMouse = false, | |
| } | |
| function XPauseLayer:Init() | |
| CreateRealTimeThread(function(self) | |
| if self.window_state ~= "destroying" then | |
| SetPauseLayerPause(true, self, self.keep_sounds) | |
| if self.togglePauseDialog then | |
| ShowPauseDialog(true) | |
| end | |
| ShowMouseCursor(self) | |
| end | |
| end, self) | |
| end | |
| function XPauseLayer:Done() | |
| SetPauseLayerPause(false, self, self.keep_sounds) | |
| if self.togglePauseDialog then | |
| ShowPauseDialog(false) | |
| end | |
| HideMouseCursor(self) | |
| end | |
| --override in project specific file | |
| function SetPauseLayerPause(pause, layer, keep_sounds) | |
| if pause then | |
| Pause(layer, keep_sounds) | |
| else | |
| Resume(layer) | |
| end | |
| end | |
| function ShowPauseDialog(bShow) | |
| --implement in project specific file | |
| end | |
| ----- XSuppressInputLayer | |
| DefineClass.XSuppressInputLayer = { | |
| __parents = { "XLayer" }, | |
| properties = { | |
| { id = "SuppressTemporarily", editor = "bool", default = true, help = "If true, will suppress any input only for a short time" }, | |
| }, | |
| target = false, | |
| Dock = "ignore", | |
| HandleMouse = false, | |
| } | |
| local passthrough_events = { | |
| OnSystemSize = true, | |
| OnSystemActivate = true, | |
| OnSystemInactivate = true, | |
| OnSystemMinimize = true, | |
| } | |
| function XSuppressInputLayer:Init() | |
| local function stub_break(target, event) | |
| if not IsValidThread(SwitchControlQuestionThread) and not passthrough_events[event] then | |
| return "break" | |
| end | |
| end | |
| self.target = TerminalTarget:new{ | |
| MouseEvent = stub_break, | |
| KeyboardEvent = stub_break, | |
| SysEvent = stub_break, | |
| XEvent = stub_break, | |
| terminal_target_priority = 10000000, | |
| } | |
| terminal.AddTarget(self.target) | |
| end | |
| function XSuppressInputLayer:Open(...) | |
| XLayer.Open(self, ...) | |
| if self.SuppressTemporarily then | |
| self:CreateThread(function() | |
| Sleep(self:ResolveValue("SuppressTime") or 200) | |
| self:delete() | |
| end) | |
| end | |
| end | |
| function XSuppressInputLayer:Done() | |
| terminal.RemoveTarget(self.target) | |
| end | |
| DefineClass.XShowMouseCursorLayer = { | |
| __parents = { "XLayer" }, | |
| Dock = "ignore", | |
| HandleMouse = false, | |
| } | |
| function XShowMouseCursorLayer:Open(...) | |
| ShowMouseCursor("XShowMouseCursorLayer") | |
| return XLayer.Open(self, ...) | |
| end | |
| function XShowMouseCursorLayer:Done() | |
| HideMouseCursor("XShowMouseCursorLayer") | |
| end | |
| ----- XHideInGameInterfaceLayer | |
| DefineClass.XHideInGameInterfaceLayer = { | |
| __parents = { "XLayer" }, | |
| Dock = "ignore", | |
| HandleMouse = false, | |
| } | |
| function XHideInGameInterfaceLayer:Init() | |
| ShowInGameInterface(false) | |
| end | |
| function XHideInGameInterfaceLayer:Done() | |
| if GetInGameInterface() then | |
| ShowInGameInterface(true) | |
| end | |
| end | |
| ----- XCameraLockLayer | |
| DefineClass.XCameraLockLayer = { | |
| __parents = { "XLayer" }, | |
| properties = { | |
| { category = "General", id = "lock_id", name = "LockId", editor = "text", default = false }, | |
| }, | |
| Dock = "ignore", | |
| HandleMouse = false, | |
| } | |
| function XCameraLockLayer:Open() | |
| LockCamera(self.lock_id or self) | |
| XLayer.Open(self) | |
| end | |
| function XCameraLockLayer:Done() | |
| UnlockCamera(self.lock_id or self) | |
| end | |
| ----- XChangeCameraTypeLayer | |
| local cameraTypes = { "cameraRTS", "cameraFly", "camera3p", "cameraMax", "cameraTac" } | |
| DefineClass.XChangeCameraTypeLayer = { | |
| __parents = { "XLayer" }, | |
| properties = { | |
| { id = "CameraType", editor = "choice", default = "cameraMax", items = cameraTypes }, | |
| { id = "CameraClampZ", editor = "number", default = 0, }, | |
| { id = "CameraClampXY", editor = "number", default = 0, }, | |
| }, | |
| Dock = "ignore", | |
| HandleMouse = false, | |
| old_camera = false, | |
| old_limits = false, | |
| } | |
| function XChangeCameraTypeLayer:Init() | |
| self.old_camera = pack_params(GetCamera()) | |
| self.old_limits = {} | |
| if self.CameraClampZ ~= 0 then | |
| self.old_limits.CameraMaxClampZ = hr.CameraMaxClampZ | |
| hr.CameraMaxClampZ = self.CameraClampZ | |
| end | |
| if self.CameraClampXY ~= 0 then | |
| self.old_limits.CameraMaxClampXY = hr.CameraMaxClampXY | |
| hr.CameraMaxClampXY = self.CameraClampXY | |
| end | |
| ForceUnlockCameraStart(self) | |
| _G[self.CameraType].Activate(1) | |
| end | |
| function XChangeCameraTypeLayer:Done() | |
| SetCamera(unpack_params(self.old_camera)) | |
| ForceUnlockCameraEnd(self) | |
| for key, val in pairs(self.old_limits or empty_table) do | |
| hr[key] = val | |
| end | |
| end | |
| -- XMuteSounds | |
| DefineClass.XMuteSounds = { | |
| __parents = { "XLayer" }, | |
| Dock = "ignore", | |
| HandleMouse = false, | |
| properties = { | |
| { id = "MuteAll", editor = "bool", default = false }, | |
| { id = "FadeTime", editor = "number", default = 500 }, | |
| { id = "AudioGroups", editor = "set", default = set(), items = PresetGroupsCombo("SoundTypePreset"), no_edit = PropGetter("MuteAll") }, | |
| }, | |
| } | |
| function XMuteSounds:ApplyMute(apply, time) | |
| local groups = self.MuteAll and PresetGroupNames("SoundTypePreset") or table.keys(self.AudioGroups, true) | |
| for _, group in ipairs(groups) do | |
| SetGroupVolumeReason(self, group, apply and 0, self.FadeTime) | |
| end | |
| end | |
| function XMuteSounds:Open() | |
| self:ApplyMute(true) | |
| XLayer.Open(self) | |
| end | |
| function XMuteSounds:Done() | |
| self:ApplyMute(false) | |
| end | |
| ----- XHROption | |
| DefineClass.XHROption = { | |
| __parents = { "XWindow" }, | |
| Dock = "ignore", | |
| properties = { | |
| { category = "General", id = "Option", editor = "choice", default = "", items = function () return table.keys2(EnumEngineVars("hr."), true, "") end }, | |
| { category = "General", id = "Value", editor = function(self) | |
| return type(GetEngineVar("hr.", self.Option or "")) == "number" and "number" or "bool" | |
| end, default = false, scale = 1000 }, | |
| }, | |
| } | |
| function XHROption:Open() | |
| self:SetVisible(false) | |
| if self.Option ~= "" then | |
| if type(GetEngineVar("hr.", self.Option or "")) == "number" then | |
| table.change(hr, self, { [self.Option] = (self.Value or 0) / 1000.0 }) | |
| else | |
| table.change(hr, self, { [self.Option] = self.Value }) | |
| end | |
| end | |
| XWindow.Open(self) | |
| end | |
| function XHROption:Done() | |
| table.restore(hr, self, true) | |
| end |