Download CommonLua/Libs/Debug/XTemplates/DebugShortcuts.lua from sirnii/myspace: direct link, hf CLI and curl.
- Browser
- Download file 78.1 kB
-
https://huggingface.co/spaces/sirnii/myspace/resolve/main/CommonLua/Libs/Debug/XTemplates/DebugShortcuts.lua
- Command line
-
hf download hf://spaces/sirnii/myspace/CommonLua/Libs/Debug/XTemplates/DebugShortcuts.lua
-
curl -L -o DebugShortcuts.lua https://huggingface.co/spaces/sirnii/myspace/resolve/main/CommonLua/Libs/Debug/XTemplates/DebugShortcuts.lua
78.1 kB
| -- ========== GENERATED BY XTemplate Editor (Alt-F3) DO NOT EDIT MANUALLY! ========== | |
| PlaceObj('XTemplate', { | |
| SortKey = 200, | |
| group = "Shortcuts", | |
| id = "DebugShortcuts", | |
| save_in = "Libs/Debug", | |
| PlaceObj('XTemplateGroup', { | |
| '__condition', function (parent, context) return true end, | |
| }, { | |
| PlaceObj('XTemplateAction', { | |
| 'ActionTranslate', false, | |
| 'ActionMenubar', "DevMenu", | |
| 'OnActionEffect', "popup", | |
| 'replace_matching_id', true, | |
| }, { | |
| PlaceObj('XTemplateForEach', { | |
| 'comment', "Preset editors", | |
| 'array', function (parent, context) return ClassDescendantsList("Preset") end, | |
| 'condition', function (parent, context, item, i) local class = g_Classes[item] local PresetClass = class and class.PresetClass or item return class and class.GedEditor and class.GedEditor ~= "" and class.EditorMenubarName and (PresetClass == item or g_Classes[PresetClass].GedEditor ~= class.GedEditor) end, | |
| 'run_after', function (child, context, item, i, n, last) | |
| local class = g_Classes[item] | |
| child.ActionId = "PresetEditor" .. item | |
| child.ActionName = class.EditorMenubarName ~= "" and class.EditorMenubarName or item | |
| child:SetActionShortcuts(class.EditorShortcut, child.ActionShortcut2, child.ActionGamepad) | |
| child.ActionIcon = class.EditorIcon | |
| child:SetActionMenubar(class.EditorMenubar) | |
| child:SetActionSortKey(class.EditorMenubarSortKey) | |
| child.OnAction = function() | |
| OpenPresetEditor(item) | |
| end | |
| end, | |
| }, { | |
| PlaceObj('XTemplateAction', { | |
| 'ActionTranslate', false, | |
| }), | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Calls Preset:OpenEditor() of the current map thus selecting it in the editor", | |
| 'ActionId', "MapDataPresetEditorOpen", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Edit Map Data", | |
| 'ActionIcon', "CommonAssets/UI/Icons/earth global globe internet world", | |
| 'ActionMenubar', "Map", | |
| 'OnAction', function (self, host, source, ...) | |
| (CurrentMap ~= "" and mapdata or MapDataPreset):OpenEditor() | |
| end, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "Debug", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Debug", | |
| 'ActionMenubar', "DevMenu", | |
| 'OnActionEffect', "popup", | |
| 'replace_matching_id', true, | |
| }, { | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "(Ctrl-Alt-0)", | |
| 'ActionId', "DE_TogglePathVisuals", | |
| 'ActionMode', "Game", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Path Visuals", | |
| 'ActionIcon', "CommonAssets/UI/Icons/collapse", | |
| 'ActionShortcut', "Ctrl-Alt-0", | |
| 'ActionShortcut2', "Ctrl-Alt-Numpad 0", | |
| 'OnAction', function (self, host, source, ...) DbgTogglePaths() end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "DE_ToggleFlightMap", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Flight Map", | |
| 'ActionIcon', "CommonAssets/UI/Icons/collapse", | |
| 'OnAction', function (self, host, source, ...) DbgFlightToggleFlightMap() end, | |
| '__condition', function (parent, context) return const.FlightTile and Platform.developer end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle Console Log", | |
| 'RolloverText', "Toggle Console Log", | |
| 'ActionId', "DE_ConsoleLogToggle", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Console Log", | |
| 'ActionIcon', "CommonAssets/UI/Icons/clipboard document paper report sheet.png", | |
| 'OnAction', function (self, host, source, ...) ConsoleSetEnabled(not ConsoleEnabled) end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Inspect a live XWindow, its children, properties, focus, mouse target, etc. (Alt-X)", | |
| 'RolloverText', "Inspect a live XWindow, its children, properties, focus, mouse target, etc. (Alt-X)", | |
| 'ActionId', "DE_XWindowInspector", | |
| 'ActionTranslate', false, | |
| 'ActionName', "XWindow Inspector", | |
| 'ActionIcon', "CommonAssets/UI/Icons/information mark question.png", | |
| 'ActionShortcut', "Alt-X", | |
| 'OnAction', function (self, host, source, ...) | |
| OpenXWindowInspector({EditorShortcut = self.ActionShortcut}) | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Open the XTemplate the current window was spawned for in the XTemplate Editor", | |
| 'RolloverText', "Open the XTemplate the current window was spawned for in the XTemplate Editor.", | |
| 'ActionId', "DE_XTemplateEdit", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Edit in XTemplate Editor", | |
| 'ActionShortcut', "Ctrl-Alt-X", | |
| 'OnAction', function (self, host, source, ...) | |
| CreateRealTimeThread(function() | |
| local target = terminal.desktop:GetMouseTarget(terminal.GetMousePos()) | |
| local initial_target = target | |
| local template_id | |
| while target do | |
| template_id = rawget(target, "__dbg_template_template") or rawget(target, "__dbg_template") | |
| if template_id then break end | |
| target = target.parent | |
| end | |
| if not template_id then | |
| XFlashWindow(initial_target) | |
| CreateMessageBox(nil, Untranslated("Error"), Untranslated("Could not find the XTemplate this window was spawned from.")) | |
| return | |
| end | |
| local gedTarget = GetParentOfKind(target, "GedApp") | |
| if gedTarget then | |
| context.dark_mode = gedTarget.dark_mode | |
| end | |
| XTemplates[template_id]:OpenEditor() | |
| XFlashWindow(target) | |
| end) | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'RolloverText', "Inspect the XWindow currently under the mouse.", | |
| 'ActionId', "DE_InspectXWindowUnderMouse", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Inspect XWindow Under Mouse", | |
| 'ActionIcon', "CommonAssets/UI/Icons/information mark question.png", | |
| 'ActionShortcut', "Alt-F8", | |
| 'OnAction', function (self, host, source, ...) | |
| local pt = terminal.desktop.last_mouse_pos | |
| local target = terminal.desktop:GetMouseTarget(pt) or terminal.desktop | |
| if target then | |
| Inspect(target) | |
| end | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Examine the object under cursor (F8)", | |
| 'ActionId', "DE_ExamineObject", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Examine the object under cursor", | |
| 'ActionShortcut', "F8", | |
| 'OnAction', function (self, host, source, ...) | |
| local solid, transparent = GetPreciseCursorObj() | |
| local o = transparent or solid or GetTerrainCursorObj() | |
| if IsValid(o) then | |
| Inspect(o) | |
| else | |
| print("There is no valid object under the cursor") | |
| end | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "Map", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Map", | |
| 'ActionMenubar', "DevMenu", | |
| 'OnActionEffect', "popup", | |
| 'replace_matching_id', true, | |
| }, { | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Change Map (F5)", | |
| 'RolloverText', "Change Map (F5)", | |
| 'ActionId', "DE_ChangeMap", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Change Map", | |
| 'ActionIcon', "CommonAssets/UI/Icons/chart map paper sheet travel.png", | |
| 'ActionShortcut', "F5", | |
| 'OnAction', function (self, host, source, ...) | |
| XEditorChooseAndChangeMap() | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Reload Map (Ctrl-F5)", | |
| 'RolloverText', "Reload Map (Ctrl-F5)", | |
| 'ActionId', "DE_ReloadMap", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Reload Map", | |
| 'ActionIcon', "CommonAssets/UI/Icons/loop refresh restart.png", | |
| 'ActionShortcut', "Ctrl-F5", | |
| 'OnAction', function (self, host, source, ...) | |
| if mapdata and mapdata.GameLogic then | |
| CloseMenuDialogs() | |
| end | |
| CreateRealTimeThread(DevReloadMap) | |
| end, | |
| '__condition', function (parent, context) return not editor.IsModdingEditor() end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Go to empty Map (Ctrl-Shift-F5)", | |
| 'RolloverText', "Go to empty Map (Ctrl-Shift-F5)", | |
| 'ActionId', "DE_LoadEmptyMap", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Load Empty Map", | |
| 'ActionIcon', "CommonAssets/UI/Icons/document note paper.png", | |
| 'ActionShortcut', "Ctrl-Shift-F5", | |
| 'OnAction', function (self, host, source, ...) | |
| CreateRealTimeThread( function() | |
| CloseMenuDialogs() | |
| ChangeMap("__Empty") | |
| StoreLastLoadedMap() | |
| XShortcutsSetMode("Game") | |
| end ) | |
| end, | |
| '__condition', function (parent, context) return MapData.__Empty and not editor.IsModdingEditor() end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionTranslate', false, | |
| 'ActionName', "-----", | |
| 'ActionIcon', "CommonAssets/UI/Icons/cancel close cross delete remove trash.png", | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "Map.Generate", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Generate ...", | |
| 'ActionIcon', "CommonAssets/UI/Menu/folder.tga", | |
| 'OnActionEffect', "popup", | |
| 'replace_matching_id', true, | |
| }, { | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "ValidateAllPrefabMaps", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Validate All Prefab Maps (thorough)", | |
| 'ActionIcon', "CommonAssets/UI/Icons/disk guardar save.png", | |
| 'OnAction', function (self, host, source, ...) | |
| CreateRealTimeThread(WaitValidateAllMaps, { validate_properties = true }, IsPrefabMap) | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "ResaveAllPrefabs", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Resave All Prefabs", | |
| 'ActionIcon', "CommonAssets/UI/Icons/disk guardar save.png", | |
| 'OnAction', function (self, host, source, ...) ResaveAllPrefabs() end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "ResaveAllGameMaps", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Resave All Game Maps", | |
| 'ActionIcon', "CommonAssets/UI/Icons/disk guardar save.png", | |
| 'OnAction', function (self, host, source, ...) ResaveAllGameMaps() end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "G_Regenerate", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Regenerate Random Maps...", | |
| 'ActionIcon', "CommonAssets/UI/Menu/folder.tga", | |
| 'OnActionEffect', "popup", | |
| 'replace_matching_id', true, | |
| }, { | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "RegenerateCurrent", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Regenerate Current Map", | |
| 'ActionIcon', "CommonAssets/UI/Icons/factory.png", | |
| 'OnAction', function (self, host, source, ...) | |
| RegenerateMap(nil, true) | |
| end, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "RegenerateAll", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Regenerate All Random Maps", | |
| 'ActionIcon', "CommonAssets/UI/Icons/factory.png", | |
| 'OnAction', function (self, host, source, ...) | |
| RegenerateRandomMaps() | |
| end, | |
| }), | |
| PlaceObj('XTemplateForEach', { | |
| 'array', function (parent, context) return GetRegenerateMapLists() end, | |
| 'run_after', function (child, context, item, i, n, last) | |
| child.ActionId = "Regenerate_" .. item | |
| child.ActionName = "Regenerate " .. item | |
| child.OnActionParam = item | |
| end, | |
| }, { | |
| PlaceObj('XTemplateAction', { | |
| 'ActionTranslate', false, | |
| 'ActionIcon', "CommonAssets/UI/Icons/gear option setting setup.png", | |
| 'OnAction', function (self, host, source, ...) | |
| RegenerateMapList(self.OnActionParam) | |
| end, | |
| }), | |
| }), | |
| }), | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "MarkerViewer", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Marker Viewer", | |
| 'ActionIcon', "CommonAssets/UI/Icons/flag marker nation.png", | |
| 'OnAction', function (self, host, source, ...) | |
| OpenMarkerViewer() | |
| end, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "RoomEditor", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Room Editor", | |
| 'ActionIcon', "CommonAssets/UI/Icons/building office.png", | |
| 'ActionShortcut', "Ctrl-Shift-R", | |
| 'OnAction', function (self, host, source, ...) | |
| OpenGedRoomEditor() | |
| end, | |
| '__condition', function (parent, context) return config.MapEditorRooms end, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Collections Editor (Ctrl-Alt-C)", | |
| 'RolloverText', "Collections Editor (Ctrl-Alt-C)", | |
| 'ActionId', "E_CollectionsEditor", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Collections Editor", | |
| 'ActionIcon', "CommonAssets/UI/Icons/cabinet cupboard drawer furniture interior.png", | |
| 'ActionShortcut', "Ctrl-Alt-C", | |
| 'OnAction', function (self, host, source, ...) OpenCollectionsEditor() end, | |
| 'replace_matching_id', true, | |
| }), | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "Editors", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Editors", | |
| 'ActionMenubar', "DevMenu", | |
| 'OnActionEffect', "popup", | |
| 'replace_matching_id', true, | |
| }, { | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "Editors.UI", | |
| 'ActionTranslate', false, | |
| 'ActionName', "UI ...", | |
| 'ActionIcon', "CommonAssets/UI/Menu/folder.tga", | |
| 'OnActionEffect', "popup", | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "Editors.Humans", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Humans ...", | |
| 'ActionIcon', "CommonAssets/UI/Menu/folder.tga", | |
| 'OnActionEffect', "popup", | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "Editors.Lists", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Lists ...", | |
| 'ActionIcon', "CommonAssets/UI/Menu/folder.tga", | |
| 'OnActionEffect', "popup", | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "Editors.Other", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Other ...", | |
| 'ActionIcon', "CommonAssets/UI/Menu/folder.tga", | |
| 'OnActionEffect', "popup", | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "Editors.Art", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Art & FX ...", | |
| 'ActionIcon', "CommonAssets/UI/Menu/folder.tga", | |
| 'OnActionEffect', "popup", | |
| 'replace_matching_id', true, | |
| }, { | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "BillboardEditor", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Billboard Editor", | |
| 'ActionIcon', "CommonAssets/UI/Icons/gallery images media photos thumbnail.png", | |
| 'OnAction', function (self, host, source, ...) | |
| OpenGedApp("BillboardEditor", BillboardsTree()) | |
| end, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Particle editor", | |
| 'ActionId', "E_FX_ParticleEditor", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Particle Editor", | |
| 'ActionIcon', "CommonAssets/UI/Icons/outline starburst.png", | |
| 'ActionShortcut', "Ctrl-Alt-P", | |
| 'OnAction', function (self, host, source, ...) | |
| local sel = editor and editor.GetSel() | |
| if sel and #sel > 0 then | |
| for key, value in ipairs(sel) do | |
| if IsKindOf(value, "ParSystem") then | |
| local par_name = value:GetParticlesName() | |
| local par_sys = ParticleSystemPresets[par_name] | |
| if par_sys then | |
| par_sys:OpenEditor(true) | |
| return | |
| end | |
| end | |
| end | |
| end | |
| OpenPresetEditor("ParticleSystemPreset") | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "E_FX_AnimMetadataEditor", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Anim Metadata Editor", | |
| 'ActionIcon', "CommonAssets/UI/Icons/video.tga", | |
| 'OnAction', function (self, host, source, ...) | |
| OpenAnimationMomentsEditor() | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "E_FX_SkinDecalEditor", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Skin Decal Editor", | |
| 'ActionIcon', "CommonAssets/UI/Icons/video.tga", | |
| 'OnAction', function (self, host, source, ...) | |
| OpenSkinDecalEditor() | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "Editors.Audio", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Audio ...", | |
| 'ActionIcon', "CommonAssets/UI/Menu/folder.tga", | |
| 'OnActionEffect', "popup", | |
| 'replace_matching_id', true, | |
| }, { | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle Sound Debug", | |
| 'RolloverText', "Toggle Sound Debug", | |
| 'ActionId', "E_SoundToggleDebug", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Sound Debug", | |
| 'ActionIcon', "CommonAssets/UI/Icons/volume.png", | |
| 'ActionShortcut', "Ctrl-\\", | |
| 'OnAction', function (self, host, source, ...) | |
| ToggleSoundDebug() | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle Listener Update", | |
| 'RolloverText', "Toggle Listener Update", | |
| 'ActionId', "E_ToggleListenerUpdate", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Listener Update", | |
| 'ActionIcon', "CommonAssets/UI/Icons/volume.png", | |
| 'OnAction', function (self, host, source, ...) | |
| ToggleListenerUpdate() | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "ModEditor", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Mod Editor", | |
| 'ActionIcon', "CommonAssets/UI/Icons/outline puzzle", | |
| 'OnAction', function (self, host, source, ...) | |
| ModEditorOpen() | |
| end, | |
| '__condition', function (parent, context) return config.Mods end, | |
| 'replace_matching_id', true, | |
| }), | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "Scripting", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Scripting", | |
| 'ActionMenubar', "DevMenu", | |
| 'OnActionEffect', "popup", | |
| 'replace_matching_id', true, | |
| }, { | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "StoryBitsLog", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Story Bits Log", | |
| 'ActionIcon', "CommonAssets/UI/Icons/clipboard.png", | |
| 'OnAction', function (self, host, source, ...) | |
| if g_StoryBitsLog then | |
| OpenGedApp("StoryBitLog", g_StoryBitsLog) | |
| else | |
| print("Story Bits log is unavailable.") | |
| end | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "Render", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Render", | |
| 'ActionMenubar', "DevMenu", | |
| 'OnActionEffect', "popup", | |
| '__condition', function (parent, context) return const.DebugRender end, | |
| 'replace_matching_id', true, | |
| }, { | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle Framerate Boost (Alt-+ or Alt-Numpad +)", | |
| 'ActionId', "DbgToggleFramerateBoost", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Framerate Boost", | |
| 'ActionShortcut', "Alt-+", | |
| 'ActionShortcut2', "Alt-Numpad +", | |
| 'OnAction', function (self, host, source, ...) | |
| ToggleFramerateBoost() | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Ctrl-Shift-I)", | |
| 'RolloverText', " (Ctrl-Shift-I)", | |
| 'ActionId', "G_ChangeFPSIndicator", | |
| 'ActionMode', "Game", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Change FPS Indicator mode", | |
| 'ActionIcon', "CommonAssets/UI/Icons/chart graph growth increase profit stock.png", | |
| 'ActionShortcut', "Ctrl-Shift-I", | |
| 'OnAction', function (self, host, source, ...) | |
| local mode = hr.FpsCounter | |
| mode = mode + 1 | |
| if mode >= 3 then mode = 0 end | |
| if mode == 0 then print("framerate indicator off") | |
| else if mode == 1 then print("show frames-per-second") | |
| else if mode == 2 then print("show (milli)seconds-per-frame") | |
| end end end | |
| hr.FpsCounter = mode | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', 'Cycle "Object Details"', | |
| 'RolloverText', "Editor settings", | |
| 'ActionId', "E_EditorCycleObjectDetails", | |
| 'ActionTranslate', false, | |
| 'ActionName', 'Cycle "Object Details"', | |
| 'ActionIcon', "CommonAssets/UI/Menu/object_options.tga", | |
| 'ActionShortcut', "Ctrl-Alt-/", | |
| 'OnAction', function (self, host, source, ...) | |
| local details | |
| if EngineOptions.ObjectDetail == "Very Low" then | |
| details = "Low" | |
| elseif EngineOptions.ObjectDetail == "Low" then | |
| details = "Medium" | |
| elseif EngineOptions.ObjectDetail == "Medium" then | |
| details = "High" | |
| else -- EngineOptions.ObjectDetail == "High" | |
| details = table.find(OptionsData.Options.ObjectDetail, "value", "Very Low") and "Very Low" or "Low" | |
| end | |
| EngineSetObjectDetail(details, IsEditorActive() and "dont apply filters") | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "Render.Debug Textures", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Debug Textures ...", | |
| 'ActionIcon', "CommonAssets/UI/Menu/folder.tga", | |
| 'OnActionEffect', "popup", | |
| 'replace_matching_id', true, | |
| }, { | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle Wireframe", | |
| 'RolloverText', "Toggle Wireframe (Ctrl-Alt-W)", | |
| 'ActionId', "G_Wireframe", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Wireframe", | |
| 'ActionIcon', "CommonAssets/UI/Menu/Wireframe.tga", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr["Wireframe"] == 1 | |
| end, | |
| 'OnAction', function (self, host, source, ...) | |
| ToggleHR "Wireframe" | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle Base Color Maps", | |
| 'RolloverText', "Toggle Base Color Maps", | |
| 'ActionId', "G_DisableBaseColorMaps", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Base Color Maps", | |
| 'ActionIcon', "CommonAssets/UI/Menu/DisableBaseColorMaps.tga", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr["DisableBaseColorMaps"] == 1 | |
| end, | |
| 'OnAction', function (self, host, source, ...) | |
| ToggleHR "DisableBaseColorMaps" | |
| hr.TR_ForceReloadNoTextures = 1 | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle RM Maps", | |
| 'RolloverText', "Toggle RM Maps", | |
| 'ActionId', "G_DisableRMMaps", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle RM Maps", | |
| 'ActionIcon', "CommonAssets/UI/Menu/DisableRMMaps.tga", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr["DisableRMMaps"] == 1 | |
| end, | |
| 'OnAction', function (self, host, source, ...) | |
| ToggleHR "DisableRMMaps" | |
| hr.TR_ForceReloadNoTextures = 1 | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle Normal Maps", | |
| 'RolloverText', "Toggle Normal Maps", | |
| 'ActionId', "G_DisableNormalMaps", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Normal Maps", | |
| 'ActionIcon', "CommonAssets/UI/Menu/DisableNormalMaps.tga", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr["DisableNormalMaps"] == 1 | |
| end, | |
| 'OnAction', function (self, host, source, ...) | |
| ToggleHR "DisableNormalMaps" | |
| hr.TR_ForceReloadNoTextures = 1 | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle AO Maps", | |
| 'RolloverText', "Toggle AO Maps", | |
| 'ActionId', "G_DisableAOMaps", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle AO Maps", | |
| 'ActionIcon', "CommonAssets/UI/Menu/DisableAOMaps.tga", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr["DisableAOMaps"] == 1 | |
| end, | |
| 'OnAction', function (self, host, source, ...) | |
| ToggleHR "DisableAOMaps" | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle Self-Illumination Maps", | |
| 'RolloverText', "Toggle Self-Illumination Maps", | |
| 'ActionId', "G_DisableSIMaps", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Self-illumination Maps", | |
| 'ActionIcon', "CommonAssets/UI/Menu/DisableSIMaps.tga", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr["DisableSIMaps"] == 1 | |
| end, | |
| 'OnAction', function (self, host, source, ...) | |
| ToggleHR "DisableSIMaps" | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle Colorization Maps", | |
| 'RolloverText', "Toggle Colorization Maps", | |
| 'ActionId', "G_DisableColorizationMaps", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Colorization Maps", | |
| 'ActionIcon', "CommonAssets/UI/Menu/DisableBaseColorMaps.tga", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr["DisableColorizationMaps"] == 1 | |
| end, | |
| 'OnAction', function (self, host, source, ...) | |
| ToggleHR "DisableColorizationMaps" | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle the height the terrain uses for blend", | |
| 'RolloverText', "Toggle the height the terrain uses for blend", | |
| 'ActionId', "G_ToggleTerrainHeight", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Terrain Height", | |
| 'ActionIcon', "CommonAssets/UI/Menu/ToggleTerrainHeight.tga", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr["TR_ShowHeight"] == 1 | |
| end, | |
| 'OnAction', function (self, host, source, ...) | |
| ToggleHR "TR_ShowHeight" | |
| hr.TR_ForceReloadNoTextures = 1 | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle color picker for screen render target (Alt-Shift-I)", | |
| 'RolloverText', "Toggle color picker for screen render target (Alt-Shift-I)", | |
| 'ActionId', "E_Colorpicker", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Color picker", | |
| 'ActionIcon', "CommonAssets/UI/Icons/color drop graphic paint picker tool.png", | |
| 'ActionShortcut', "Alt-Shift-I", | |
| 'OnAction', function (self, host, source, ...) | |
| local state = GetPostProcPredicate("debug_color_pick") | |
| SetPostProcPredicate("debug_color_pick", not state) | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'RolloverText', T(709899432615, --[[XTemplate DebugShortcuts RolloverText]] "Toggle Fsr2 textures debug display"), | |
| 'ActionId', "G_TemporalDebug", | |
| 'ActionName', T(103678002139, --[[XTemplate DebugShortcuts ActionName]] "Toggle Temporal Upscaler debug"), | |
| 'ActionIcon', "CommonAssets/UI/Menu/DisableBaseColorMaps.tga", | |
| 'ActionShortcut', "Alt-Shift-J", | |
| 'OnAction', function (self, host, source, ...) | |
| local modes = { "None", "Motion Vectors", "Reactivity Mask", "Transparency Mask", "Adjust Reactivity" } | |
| hr.TemporalDebug=hr.TemporalDebug+1 | |
| if hr.TemporalDebug > #modes - 1 then | |
| hr.TemporalDebug = 0 | |
| end | |
| print("TemporalDebug mode: ", modes[hr.TemporalDebug+1]) | |
| end, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle stretch factor usage", | |
| 'RolloverText', "Toggle stretch factor usage", | |
| 'ActionId', "G_ToggleStretchFactorUsage", | |
| 'ActionTranslate', false, | |
| 'ActionName', "ToggleStretchFactorUsage", | |
| 'ActionIcon', "CommonAssets/UI/Menu/ToggleStretchFactor.tga", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr["DbgUseStretchFactor"] == 1 | |
| end, | |
| 'OnAction', function (self, host, source, ...) | |
| ToggleHR "DbgUseStretchFactor" | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggleuv density", | |
| 'RolloverText', "Toggle uv density", | |
| 'ActionId', "G_ToggleUVDensity", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle UV Density", | |
| 'ActionIcon', "CommonAssets/UI/Menu/ForceDiffuseMaps.tga", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr.UseCheckerboardAsBaseColor == 1 | |
| end, | |
| 'OnAction', function (self, host, source, ...) | |
| ToggleHR "UseCheckerboardAsBaseColor" | |
| hr.DisableBaseColorMaps = hr.UseCheckerboardAsBaseColor | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle SatGammaModifier rendering", | |
| 'RolloverText', "Toggle SatGammaModifier rendering", | |
| 'ActionId', "G_ToggleSatGamma", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle SatGamma Modifier", | |
| 'ActionIcon', "CommonAssets/UI/Menu/toggle_dtm_slots.tga", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr.UseSatGammaModifier ~= 0 | |
| end, | |
| 'OnAction', function (self, host, source, ...) | |
| hr.UseSatGammaModifier = 1 - hr.UseSatGammaModifier | |
| RecreateRenderObjects() | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Finds duplicated objects", | |
| 'RolloverText', "Finds duplicated objects", | |
| 'ActionId', "DbgFindOverlappingObjects", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Find overlapping objects", | |
| 'ActionIcon', "CommonAssets/UI/Icons/copy duplicate paste 2.png", | |
| 'OnAction', function (self, host, source, ...) ReportOverlappingObjects() end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Follow cam for 2nd player", | |
| 'RolloverText', "Follow cam for 2nd player", | |
| 'ActionId', "DbgFollowCamera", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Follow cam for 2nd player", | |
| 'OnAction', function (self, host, source, ...) StartFollowCam() end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Render everything two-sided", | |
| 'RolloverText', "Render everything two-sided", | |
| 'ActionId', "G_ForceTwoSidedMode", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Force two-sided mode", | |
| 'ActionIcon', "CommonAssets/UI/Menu/ForceTwoSidedMode.tga", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr["ForceTwoSidedMode"] == 1 | |
| end, | |
| 'OnAction', function (self, host, source, ...) ToggleHR("ForceTwoSidedMode") end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Shows/Hides the frustum", | |
| 'RolloverText', "Shows/Hides the frustum", | |
| 'ActionId', "DbgShowFrustum", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Frustum", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr.ShowFrustum == 1 | |
| end, | |
| 'OnAction', function (self, host, source, ...) ToggleHR "ShowFrustum" end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Shift-U)", | |
| 'RolloverText', " (Shift-U)", | |
| 'ActionId', "G_LockCamera", | |
| 'ActionMode', "Game", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Lock Camera", | |
| 'ActionIcon', "CommonAssets/UI/Icons/lock login padlock password safe secure.png", | |
| 'ActionShortcut', "Shift-U", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return camera.IsLocked(1) | |
| end, | |
| 'OnAction', function (self, host, source, ...) | |
| if camera.IsLocked(1) then | |
| camera.Unlock(1) | |
| else | |
| camera.Lock(1) | |
| end | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Ctrl-I)", | |
| 'RolloverText', " (Ctrl-I)", | |
| 'ActionId', "G_MoveFPSIndicator", | |
| 'ActionMode', "Game", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Move FPS Indicator", | |
| 'ActionIcon', "CommonAssets/UI/Icons/drag move.png", | |
| 'ActionShortcut', "Ctrl-I", | |
| 'OnAction', function (self, host, source, ...) | |
| local pos = hr.FpsCounterPos | |
| pos = pos + 1 | |
| if pos < 4 then | |
| hr.FpsCounterPos = pos | |
| else | |
| hr.FpsCounterPos = 0 | |
| end | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggles the object counter", | |
| 'RolloverText', "Toggles the object counter", | |
| 'ActionId', "DbgObjectCounter", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Object counter", | |
| 'ActionIcon', "CommonAssets/UI/Icons/th.png", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr.ObjectCounter == 1 | |
| end, | |
| 'OnAction', function (self, host, source, ...) ToggleHR "ObjectCounter" end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "Render.Objects, Billboards & Particles", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Objects, Billboards & Particles ...", | |
| 'ActionIcon', "CommonAssets/UI/Menu/folder.tga", | |
| 'OnActionEffect', "popup", | |
| 'replace_matching_id', true, | |
| }, { | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Ctrl-Shift-O)", | |
| 'RolloverText', " (Ctrl-Shift-O)", | |
| 'ActionId', "G_SimulateParticles", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Particle Simulation", | |
| 'ActionShortcut', "Ctrl-Shift-O", | |
| 'OnAction', function (self, host, source, ...) ToggleHR("SimulateParticles") end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Ctrl-Shift-P)", | |
| 'RolloverText', " (Ctrl-Shift-P)", | |
| 'ActionId', "G_RenderParticles", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Particle Rendering", | |
| 'ActionShortcut', "Ctrl-Shift-P", | |
| 'OnAction', function (self, host, source, ...) ToggleHR("RenderParticles") end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Shift-T)", | |
| 'RolloverText', " (Shift-T)", | |
| 'ActionId', "G_ObjectBillboards", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Billboards", | |
| 'ActionShortcut', "Shift-T", | |
| 'OnAction', function (self, host, source, ...) ToggleHR("ObjectBillboards") end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "G_MapObjects", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Map Objects", | |
| 'OnAction', function (self, host, source, ...) ToggleHR("RenderMapObjects") end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Shift-O)", | |
| 'RolloverText', " (Shift-O)", | |
| 'ActionId', "G_Outsiders", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Outsider Objects", | |
| 'ActionShortcut', "Shift-O", | |
| 'OnAction', function (self, host, source, ...) ToggleHR("RenderOutsiders") end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Shift-N)", | |
| 'RolloverText', " (Shift-N)", | |
| 'ActionId', "G_RenderOBBs", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Render Oriented Bounding Boxes", | |
| 'ActionShortcut', "Shift-N", | |
| 'OnAction', function (self, host, source, ...) ToggleHR("RenderOBBs") end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Shift-B)", | |
| 'RolloverText', " (Shift-B)", | |
| 'ActionId', "G_RenderBSpheres", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Render Bounding Spheres", | |
| 'ActionShortcut', "Shift-B", | |
| 'OnAction', function (self, host, source, ...) ToggleHR("RenderBSpheres") end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Ctrl-C)", | |
| 'RolloverText', " (Ctrl-C)", | |
| 'ActionId', "G_ObjectCull", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Object Cull", | |
| 'ActionShortcut', "Ctrl-C", | |
| 'OnAction', function (self, host, source, ...) ToggleHR("ObjectCull") end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Ctrl-Alt-Z)", | |
| 'RolloverText', " (Ctrl-Alt-Z)", | |
| 'ActionId', "G_ObjectLOD", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Object LOD", | |
| 'ActionShortcut', "Ctrl-Alt-Z", | |
| 'OnAction', function (self, host, source, ...) | |
| if ToggleHR("VisualizeLOD") then | |
| print("0 red, 1 green, 2 blue, 3 yellow, 4 pink, 5 cyan") | |
| end | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggles the building of render queues", | |
| 'RolloverText', "Toggles the building of render queues", | |
| 'ActionId', "G_TogglePauseRQ", | |
| 'ActionMode', "Game", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Pause RQ", | |
| 'OnAction', function (self, host, source, ...) ToggleHR("PauseRQ") end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle postprocess (Ctrl-0)", | |
| 'RolloverText', "Toggle postprocess (Ctrl-0)", | |
| 'ActionId', "G_Postprocess", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Postprocess", | |
| 'ActionIcon', "CommonAssets/UI/Menu/toggle_post.tga", | |
| 'ActionShortcut', "Ctrl-0", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr["EnablePostprocess"] == 1 | |
| end, | |
| 'OnAction', function (self, host, source, ...) ToggleHR "EnablePostprocess" end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "Render.Profiler HUD", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Profiler HUD ...", | |
| 'ActionIcon', "CommonAssets/UI/Menu/folder.tga", | |
| 'OnActionEffect', "popup", | |
| 'replace_matching_id', true, | |
| }, { | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle Profiler HUD (Alt-Shift-0)", | |
| 'ActionId', "ProfilerHUDEnable", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Profiler", | |
| 'ActionShortcut', "Alt-Shift-0", | |
| 'OnAction', function (self, host, source, ...) | |
| ToggleHR "ProfilerHUD" | |
| ToggleHR "EnableGPUProfiler" | |
| ProfilerHUD_InitColors() | |
| UIL.Invalidate() | |
| end, | |
| '__condition', function (parent, context) return hr.ProfilerHUD end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Live update (Alt-Shift-9)", | |
| 'RolloverText', " (Alt-Shift-9)", | |
| 'ActionId', "ProfilerHUDRefresh", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Live update", | |
| 'ActionShortcut', "Alt-Shift-9", | |
| 'OnAction', function (self, host, source, ...) | |
| if hr.ProfilerHUDRefreshInterval == 0 then | |
| hr.ProfilerHUDRefreshInterval = 1000 | |
| else | |
| hr.ProfilerHUDRefreshInterval = 0 | |
| end | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Alt-Shift-8)", | |
| 'RolloverText', " (Alt-Shift-8)", | |
| 'ActionId', "ProfilerHUDForceCapture", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Force capture", | |
| 'ActionShortcut', "Alt-Shift-8", | |
| 'OnAction', function (self, host, source, ...) | |
| hr.ProfilerHUDForceCapture = 1 | |
| UIL.Invalidate() | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Alt-Shift-7)", | |
| 'RolloverText', " (Alt-Shift-7)", | |
| 'ActionId', "ProfilerHUDExclusiveTiming", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Exclusive Timing", | |
| 'ActionShortcut', "Alt-Shift-7", | |
| 'OnAction', function (self, host, source, ...) | |
| hr.ProfilerHUDExclusiveTiming = not hr.ProfilerHUDExclusiveTiming | |
| UIL.Invalidate() | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "(Alt-Shift-6)", | |
| 'RolloverText', "(Alt-Shift-6)", | |
| 'ActionId', "ProfilerHUDSaveCapture", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Save capture", | |
| 'ActionShortcut', "Alt-Shift-6", | |
| 'OnAction', function (self, host, source, ...) | |
| hr.ProfilerHUDSaveCapture = 1 | |
| UIL.Invalidate() | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "(Alt-Shift-5)", | |
| 'RolloverText', "(Alt-Shift-5)", | |
| 'ActionId', "ProfilerHUDAutoSaveFrameSpike", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Auto Save Frame Spike", | |
| 'ActionShortcut', "Alt-Shift-5", | |
| 'OnAction', function (self, host, source, ...) | |
| if hr.ProfilerHUDAutoSaveCapture == 0 then | |
| hr.ProfilerHUDAutoSaveCapture = 100 | |
| elseif hr.ProfilerHUDAutoSaveCapture == 100 then | |
| hr.ProfilerHUDAutoSaveCapture = 200 | |
| elseif hr.ProfilerHUDAutoSaveCapture == 200 then | |
| hr.ProfilerHUDAutoSaveCapture = 300 | |
| elseif hr.ProfilerHUDAutoSaveCapture == 300 then | |
| hr.ProfilerHUDAutoSaveCapture = 0 | |
| end | |
| UIL.Invalidate() | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "G_RelativeZoom", | |
| 'ActionMode', "Game", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Relaitve Zoom", | |
| 'OnAction', function (self, host, source, ...) hr.CameraRTSRelativeZoomingMode = 1 - hr.CameraRTSRelativeZoomingMode end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "Render.Reload", | |
| 'ActionMode', "Game", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Reload ...", | |
| 'ActionIcon', "CommonAssets/UI/Menu/folder.tga", | |
| 'OnActionEffect', "popup", | |
| 'replace_matching_id', true, | |
| }, { | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Shift-R)", | |
| 'RolloverText', " (Shift-R)", | |
| 'ActionId', "G_ReloadShaders", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Reload Shaders", | |
| 'ActionShortcut', "Shift-R", | |
| 'OnAction', function (self, host, source, ...) ReloadShaders() end, | |
| 'replace_matching_id', true, | |
| }), | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "Render.Render targets", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Render targets ...", | |
| 'ActionIcon', "CommonAssets/UI/Menu/folder.tga", | |
| 'OnActionEffect', "popup", | |
| 'replace_matching_id', true, | |
| }, { | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Ctrl-Shift-2)", | |
| 'RolloverText', " (Ctrl-Shift-2)", | |
| 'ActionId', "DbgShowRTEnable", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle RTs", | |
| 'ActionShortcut', "Ctrl-Shift-2", | |
| 'OnAction', function (self, host, source, ...) ToggleHR "ShowRTEnable" end, | |
| 'replace_matching_id', true, | |
| }), | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Save a screenshot", | |
| 'RolloverText', "Save a screenshot", | |
| 'ActionId', "G_SaveScreenShot", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Save Screenshot", | |
| 'ActionIcon', "CommonAssets/UI/Menu/ToggleEnvMap.tga", | |
| 'OnAction', function (self, host, source, ...) | |
| local imageName = GenerateScreenshotFilename("") | |
| CreateRealTimeThread(function() | |
| WaitNextFrame(3) | |
| WriteScreenshot(imageName) | |
| os.execute("start " .. lfs.currentdir()) | |
| end) | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Capture the GPU with RenderDoc", | |
| 'RolloverText', "Make a GPU capture using RenderDoc", | |
| 'ActionId', "G_RenderDocCapture", | |
| 'ActionTranslate', false, | |
| 'ActionName', "RenderDoc Capture", | |
| 'ActionIcon', "CommonAssets/UI/Menu/RenderDoc_logo", | |
| 'OnAction', function (self, host, source, ...) | |
| hr.CaptureRenderDoc = 1 | |
| print("The RenderDoc capture was saved in AppData/Local/Temp/RenderDoc"); | |
| end, | |
| '__condition', function (parent, context) return hr.CaptureRenderDoc end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Shows/Hides the shadow frustum", | |
| 'RolloverText', "Shows/Hides the shadow frustum", | |
| 'ActionId', "DbgShadowShowFrustum", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Shadow frustum", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr.ShadowShowFrustum == 1 | |
| end, | |
| 'OnAction', function (self, host, source, ...) ToggleHR "ShadowShowFrustum" end, | |
| '__condition', function (parent, context) return hr.ShadowShowFrustum end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'RolloverText', "Toggles lights shadow statistics", | |
| 'ActionId', "Render.Lights", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Lights...", | |
| 'ActionIcon', "CommonAssets/UI/Menu/folder.tga", | |
| 'OnActionEffect', "popup", | |
| 'replace_matching_id', true, | |
| }, { | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggles lights shadow statistics", | |
| 'RolloverText', "Toggles lights shadow statistics", | |
| 'ActionId', "DbgLightsShadowStatistics", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Lights Shadow Stats", | |
| 'ActionShortcut', "Alt-Shift-X", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr.LightShadowsStatistics ~= 0 | |
| end, | |
| 'OnAction', function (self, host, source, ...) | |
| if hr.LightShadowsStatistics == 0 then | |
| ShowLightShadowsStats(1000) | |
| else | |
| HideLightShadowsStats() | |
| end | |
| end, | |
| '__condition', function (parent, context) return hr.LightShadowsStatistics end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Cycle through Lights Objects", | |
| 'RolloverText', "Cycle through Lights Objects", | |
| 'ActionId', "CycleLightsPrev", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Cycle through Lights(Previous)", | |
| 'ActionShortcut', "Alt-Shift-V", | |
| 'OnAction', function (self, host, source, ...) | |
| ViewNextLight(-1) | |
| end, | |
| '__condition', function (parent, context) return rawget(_G, "ViewNextLight") end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Cycle through Lights Objects", | |
| 'RolloverText', "Cycle through Lights Objects", | |
| 'ActionId', "CycleLightsNext", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Cycle through Lights(Next)", | |
| 'ActionShortcut', "Alt-V", | |
| 'OnAction', function (self, host, source, ...) | |
| ViewNextLight(1) | |
| end, | |
| '__condition', function (parent, context) return rawget(_G, "ViewNextLight") end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Capture Screen Lights", | |
| 'RolloverText', "Capture Screen Lights for cycling them", | |
| 'ActionId', "CaptureScreenLights", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Capture Screen Lights", | |
| 'ActionShortcut', "Ctrl-Alt-Shift-X", | |
| 'OnAction', function (self, host, source, ...) | |
| CaptureScreenLights() | |
| end, | |
| '__condition', function (parent, context) return rawget(_G, "CaptureScreenLights") end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Cycle through Screen Lights", | |
| 'RolloverText', "Cycle through Lights Objects", | |
| 'ActionId', "CycleScreenLightsPrev", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Cycle through Screen Lights(Previous)", | |
| 'ActionShortcut', "Alt-Shift-F", | |
| 'OnAction', function (self, host, source, ...) | |
| ViewNextLight(-1, "screen lights") | |
| end, | |
| '__condition', function (parent, context) return rawget(_G, "ViewNextLight") end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Cycle through Lights", | |
| 'RolloverText', "Cycle through Lights Objects", | |
| 'ActionId', "CycleScreenLightsNext", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Cycle through Screen Lights(Next)", | |
| 'ActionShortcut', "Alt-F", | |
| 'OnAction', function (self, host, source, ...) | |
| ViewNextLight(1, "screen lights") | |
| end, | |
| '__condition', function (parent, context) return rawget(_G, "ViewNextLight") end, | |
| 'replace_matching_id', true, | |
| }), | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (0)", | |
| 'RolloverText', " (0)", | |
| 'ActionId', "G_Statistics", | |
| 'ActionMode', "Game", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Show Statistics", | |
| 'ActionShortcut', "0", | |
| 'ActionShortcut2', "Alt-0", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr.RenderStatistics ~= 0 | |
| end, | |
| 'OnAction', function (self, host, source, ...) | |
| local stats = config.RenderStatistics or { 0, 5, -1 } | |
| local i = table.find(stats, hr.RenderStatistics) | |
| if i then -- match, set the next one | |
| hr.RenderStatistics = stats[i + 1] or stats[1] | |
| else -- no match - toggle between 0 and -1 | |
| hr.RenderStatistics = hr.RenderStatistics == 0 and -1 or 0 | |
| end | |
| end, | |
| '__condition', function (parent, context) return hr.RenderStatistics end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (0)", | |
| 'RolloverText', " (0)", | |
| 'ActionId', "Histograms", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Show Histograms", | |
| 'OnAction', function (self, host, source, ...) | |
| ToggleHistogram() | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Override DIPs to consist of a single triangle (Ctrl-Shift-1)", | |
| 'RolloverText', "Override DIPs to consist of a single triangle (Ctrl-Shift-1)", | |
| 'ActionId', "G_RenderSingleTriangle", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Single Triangle DIPs", | |
| 'ActionIcon', "CommonAssets/UI/Menu/RenderSingleTriangle.tga", | |
| 'ActionShortcut', "Ctrl-Shift-1", | |
| 'OnAction', function (self, host, source, ...) | |
| if hr.PrimitiveCountModifier == 1 then | |
| hr.PrimitiveCountModifier = -100 | |
| else | |
| hr.PrimitiveCountModifier = 1 | |
| end | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Shows render statistics", | |
| 'RolloverText', "Shows render statistics", | |
| 'ActionId', "DbgSubsystemsRenderCosts", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Subsystems render costs", | |
| 'OnAction', function (self, host, source, ...) | |
| CreateMapRealTimeThread( | |
| function() | |
| local function Print100f( v ) | |
| local str = "" | |
| str = str .. (v/100) | |
| v = abs( v - (v/100)*100 ) | |
| str = str .. "." .. (v/10) | |
| v = v - (v/10)*10 | |
| str = str .. v | |
| return str | |
| end | |
| local function GetMs100() | |
| local ms = hr.RenderStatsFrameTimeGPU | |
| return ms*100 | |
| end | |
| local function WaitRenderFrames( ms, weight100 ) | |
| weight100 = weight100 or 10 | |
| local t0 = GetClock() | |
| local time = 0 | |
| local ms100 = 0 | |
| local arr = {} | |
| local frame = 1 | |
| WaitNextFrame(hr.RenderStatsSmoothing) | |
| while time < ms do | |
| WaitNextFrame() | |
| arr[frame] = GetMs100() | |
| --ms100 = (ms100*(100-weight100) + GetMs100()*weight100) / 100 | |
| time = GetClock()-t0 | |
| frame = frame + 1 | |
| if frame > 30 then frame = 1 end | |
| end | |
| ms100 = 0 | |
| for i=1,#arr do | |
| ms100 = ms100 + arr[i] | |
| end | |
| ms100 = ms100 / #arr | |
| return ms100 | |
| end | |
| -- the table that describes all cases we would like to test for performance | |
| local saved_value = false | |
| local tests = {{ | |
| name = "Post processing", | |
| start = function() hr.EnablePostprocess = 0 end, | |
| finish = function() hr.EnablePostprocess = 1 end, | |
| }, { | |
| name = "Particles", | |
| start = function() hr.RenderParticles = 0 end, | |
| finish = function() hr.RenderParticles = 1 end, | |
| }, { | |
| name = "Transparents", | |
| start = function() hr.RenderTransparent = 0 end, | |
| finish = function() hr.RenderTransparent = 1 end, | |
| }, { | |
| name = "Billboards", | |
| start = function() hr.RenderBillboards = 0 end, | |
| finish = function() hr.RenderBillboards = 1 end, | |
| }, { | |
| name = "Objects", | |
| start = function() hr.RenderMapObjects = 0 end, | |
| finish = function() hr.RenderMapObjects = 1 end, | |
| }, { | |
| name = "Streaming", | |
| start = function() hr.StreamingForceFallbacks = 1 end, | |
| finish = function() hr.StreamingForceFallbacks = 0 end, | |
| }, { | |
| name = "Shadowmap", | |
| start = function() hr.Shadowmap = 0 end, | |
| finish = function() hr.Shadowmap = 1 end, | |
| }, { | |
| name = "Shadowmap 1k", | |
| start = function() saved_value = hr.ShadowmapSize hr.ShadowmapSize = 1024 end, | |
| finish = function() hr.ShadowmapSize = saved_value end, | |
| }, { | |
| name = "Shadowmap 880", | |
| start = function() saved_value = hr.ShadowmapSize hr.ShadowmapSize = 880 end, | |
| finish = function() hr.ShadowmapSize = saved_value end, | |
| }, { | |
| name = "Skinned objects", | |
| start = function() hr.RenderSkinned = 0 end, | |
| finish = function() hr.RenderSkinned = 1 end, | |
| }, { | |
| name = "Decals", | |
| start = function() hr.RenderDecals = 0 end, | |
| finish = function() hr.RenderDecals = 1 end, | |
| }, | |
| } | |
| print( "Render subsystems test started ("..#tests.." tests) - please wait..." ) | |
| local saved_preciseselection = hr.EnablePreciseSelection | |
| hr.EnablePreciseSelection = 0 | |
| local frame_ms = WaitRenderFrames( 12000, 5 ) | |
| print( " 0. Whole frame: "..Print100f(frame_ms).." ms - "..(1000/(frame_ms/100)).." fps" ) | |
| for i=1,#tests do | |
| tests[i].start() | |
| local ms = WaitRenderFrames( 10000, 10 ) | |
| local diff = frame_ms - ms | |
| local percent = diff*100/frame_ms | |
| print( " "..i..". "..tests[i].name..": "..Print100f(diff).." ms "..percent.." %" ) | |
| tests[i].finish() | |
| WaitRenderFrames( 2000 ) | |
| end | |
| print( "done." ) | |
| hr.EnablePreciseSelection = saved_preciseselection | |
| end | |
| ) | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "Render.Surfaces", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Surfaces ...", | |
| 'ActionIcon', "CommonAssets/UI/Menu/folder.tga", | |
| 'OnActionEffect', "popup", | |
| 'replace_matching_id', true, | |
| }, { | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggles the grid (Alt-G)", | |
| 'ActionId', "E-Grid", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Alignment Grid", | |
| 'ActionShortcut', "Alt-G", | |
| 'OnAction', function (self, host, source, ...) | |
| -- Transfer grid sizes, boxes, etc | |
| local grid_properties = rawget(_G, "g_ActiveGridProperties") or config.DeveloperGridDefaultProperties or empty_table | |
| table.overwrite(hr, grid_properties) | |
| local grids = config.DeveloperGrids | |
| local show_construction_grid = rawget(_G, "ShowConstructionGridWithDevGrid") or empty_func | |
| for idx, grid in ipairs(config.DeveloperGrids) do | |
| if GetPostProcPredicate(grid) then | |
| SetPostProcPredicate(grid, false) | |
| if hr.TerrainDebugDraw ~= 0 then show_construction_grid() end | |
| if idx ~= #grids then | |
| SetPostProcPredicate(grids[idx+1], true) | |
| if hr.TerrainDebugDraw ~= 0 then show_construction_grid(grids[idx + 1]) end | |
| end | |
| hr.TemporalReset() | |
| return | |
| end | |
| end | |
| SetPostProcPredicate(grids[1], true) | |
| if hr.TerrainDebugDraw ~= 0 then show_construction_grid(grids[1]) end | |
| hr.TemporalReset() | |
| end, | |
| '__condition', function (parent, context) return config.DeveloperGrids end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle Collisions (Ctrl-Shift-K)", | |
| 'RolloverText', "Toggle Collisions (Ctrl-Shift-K)", | |
| 'ActionId', "G_ToggleCollisions", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Collisions", | |
| 'ActionIcon', "CommonAssets/UI/Menu/ToggleCollisions.tga", | |
| 'ActionShortcut', "Ctrl-Shift-K", | |
| 'OnAction', function (self, host, source, ...) | |
| if hr.ShowCollisionSurfaces == 0 and hr.ShowColliders == 0 then | |
| print("Showing collision surfaces") | |
| hr.ShowCollisionSurfaces = 1 | |
| elseif hr.ShowCollisionSurfaces ~= 0 and const.maxCollidersPerObject > 0 then | |
| print("Showing colliders") | |
| hr.ShowCollisionSurfaces = 0 | |
| hr.ShowColliders = -1 | |
| OpenDialog("CollisionsLegend") | |
| else | |
| print("Collision display off") | |
| hr.ShowColliders = 0 | |
| hr.ShowCollisionSurfaces = 0 | |
| CloseDialog("CollisionsLegend") | |
| end | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle Walk (Ctrl-Shift-L)", | |
| 'RolloverText', "Toggle Walk (Ctrl-Shift-L)", | |
| 'ActionId', "G_ToggleWalk", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Walk", | |
| 'ActionIcon', "CommonAssets/UI/Menu/ToggleWalk.tga", | |
| 'ActionShortcut', "Ctrl-Shift-L", | |
| 'OnAction', function (self, host, source, ...) ToggleHR("ShowWalk") end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle BlockPass (Shift-K)", | |
| 'RolloverText', "Toggle BlockPass (Shift-K)", | |
| 'ActionId', "G_ToggleBlockPass", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle BlockPass", | |
| 'ActionIcon', "CommonAssets/UI/Menu/ToggleBlockPass.tga", | |
| 'ActionShortcut', "Shift-K", | |
| 'OnAction', function (self, host, source, ...) ToggleHR("ShowBlockPass") end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle Build", | |
| 'RolloverText', "Toggle Build", | |
| 'ActionId', "G_ToggleBuild", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Build", | |
| 'ActionIcon', "CommonAssets/UI/Menu/ToggleWalk.tga", | |
| 'OnAction', function (self, host, source, ...) ToggleHR("ShowBuildSurfaces") end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "(Ctrl-Shift-9)", | |
| 'ActionId', "G_DebugDrawTunnels", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Tunnels", | |
| 'ActionShortcut', "Ctrl-Shift-9", | |
| 'OnAction', function (self, host, source, ...) | |
| ToggleDrawTunnels() | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "(Ctrl-Alt-9)", | |
| 'ActionId', "G_TunnelHelpers", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Tunnel Helpers", | |
| 'ActionIcon', "CommonAssets/UI/Menu/object_options.tga", | |
| 'ActionShortcut', "Ctrl-Alt-9", | |
| 'OnAction', function (self, host, source, ...) | |
| local tunnels = 0 | |
| MapForEach("map", "SlabTunnel", function(tunnel) | |
| local helper = PlaceObject("SlabTunnelHelper") | |
| helper:SetPos(tunnel:GetPos()) | |
| helper.tunnel = tunnel | |
| if tunnel.dbg_tunnel_color then | |
| helper:SetColorModifier(tunnel.dbg_tunnel_color) | |
| end | |
| helper:SetScale(35) | |
| tunnels = tunnels + 1 | |
| end) | |
| print(string.format("%d Tunnel helpers created", tunnels)) | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "G_PathDebugDraw", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Path", | |
| 'OnAction', function (self, host, source, ...) | |
| if hr.TerrainDebugDraw == 1 and DbgGetTerrainOverlay() == "path" and terrain.GetPassGridsCount() > 1 then | |
| DbgSetTerrainOverlay("path_large") | |
| print("path_large") | |
| else | |
| DbgSetTerrainOverlay("path") | |
| print("path") | |
| ToggleHR("TerrainDebugDraw") | |
| if hr.TerrainDebugDraw == 0 then | |
| pf.DbgDrawFindPath() -- clear last path info | |
| end | |
| end | |
| end, | |
| '__condition', function (parent, context) return const.DebugOverlay end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Ctrl-8)", | |
| 'RolloverText', " (Ctrl-8)", | |
| 'ActionId', "G_WindDebugDraw", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Wind", | |
| 'ActionShortcut', "Ctrl-8", | |
| 'OnAction', function (self, host, source, ...) | |
| DbgDrawWind(not g_DebugWindDraw) | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Ctrl-Shift-8)", | |
| 'RolloverText', " (Ctrl-Shift-8)", | |
| 'ActionId', "G_WindDebugDrawTexts", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Wind + Numbers", | |
| 'ActionShortcut', "Ctrl-Shift-8", | |
| 'OnAction', function (self, host, source, ...) | |
| DbgDrawWind(not g_DebugWindDraw, "texts") | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Ctrl-Alt-8)", | |
| 'RolloverText', " (Ctrl-Alt-8)", | |
| 'ActionId', "G_WindDebugDrawTextsTiles", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Wind + Numbers + Tiles", | |
| 'ActionShortcut', "Ctrl-Alt-8", | |
| 'OnAction', function (self, host, source, ...) | |
| DbgDrawWind(not g_DebugWindDraw, "texts", "show tiles around cursor") | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Ctrl-9)", | |
| 'RolloverText', " (Ctrl-9)", | |
| 'ActionId', "G_TerrainDebugDraw", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Passability", | |
| 'ActionShortcut', "Ctrl-9", | |
| 'OnAction', function (self, host, source, ...) | |
| if hr.TerrainDebugDraw == 0 then | |
| DbgSetTerrainOverlay("passability") | |
| EnablePassability3DVisualization(true) | |
| hr.TerrainDebugDraw = 1 | |
| else | |
| EnablePassability3DVisualization(false) | |
| hr.TerrainDebugDraw = 0 | |
| end | |
| end, | |
| '__condition', function (parent, context) return const.DebugOverlay end, | |
| 'replace_matching_id', true, | |
| }), | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Shift-C)", | |
| 'RolloverText', " (Shift-C)", | |
| 'ActionId', "G_CameraChange", | |
| 'ActionMode', "Game", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Camera Type", | |
| 'ActionShortcut', "Shift-C", | |
| 'OnAction', function (self, host, source, ...) | |
| CheatToggleFlyCamera() | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "Render.Toggle Render", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Render ...", | |
| 'ActionIcon', "CommonAssets/UI/Menu/folder.tga", | |
| 'OnActionEffect', "popup", | |
| 'replace_matching_id', true, | |
| }, { | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggles the rendering of the shadows", | |
| 'RolloverText', "Toggles the rendering of the shadows", | |
| 'ActionId', "DbgRenderShadows", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Shadow", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr.Shadowmap == 1 | |
| end, | |
| 'OnAction', function (self, host, source, ...) ToggleHR "Shadowmap" end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggles the rendering of the objects", | |
| 'RolloverText', "Toggles the rendering of the objects", | |
| 'ActionId', "DbgRenderObjects", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Objects", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr.RenderMapObjects == 1 | |
| end, | |
| 'OnAction', function (self, host, source, ...) ToggleHR "RenderMapObjects" end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggles the rendering of the BSpheres", | |
| 'RolloverText', "Toggles the rendering of the BSpheres", | |
| 'ActionId', "DbgShowBSpheres", | |
| 'ActionTranslate', false, | |
| 'ActionName', "BSpheres", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr.RenderBSpheres == 1 | |
| end, | |
| 'OnAction', function (self, host, source, ...) ToggleHR "RenderBSpheres" end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggles the rendering of the billboards", | |
| 'RolloverText', "Toggles the rendering of the billboards", | |
| 'ActionId', "DbgRenderBillboards", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Billboards", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr.RenderBillboards == 1 | |
| end, | |
| 'OnAction', function (self, host, source, ...) ToggleHR "RenderBillboards" end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggles the rendering of the terrain bounding boxes", | |
| 'RolloverText', "Toggles the rendering of the terrain bounding boxes", | |
| 'ActionId', "DbgShowTerrainBBoxes", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Terrain bboxes", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr.TerrainAABB == 1 | |
| end, | |
| 'OnAction', function (self, host, source, ...) ToggleHR "TerrainAABB" end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Shift-Z)", | |
| 'RolloverText', " (Shift-Z)", | |
| 'ActionId', "G_Shadowmap", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Shadowmap", | |
| 'ActionShortcut', "Shift-Z", | |
| 'OnAction', function (self, host, source, ...) ToggleHR "Shadowmap" end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "DbgCycleUpscalingModes", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Cycle Upscaling Modes", | |
| 'OnAction', function (self, host, source, ...) | |
| CycleUpscaling() | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle Safearea Lines", | |
| 'RolloverText', "Toggle Safearea Lines", | |
| 'ActionId', "G_ToggleSafeareaLines", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Safearea Lines", | |
| 'OnAction', function (self, host, source, ...) | |
| ToggleSafearea() | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle Obj Mask Mode", | |
| 'ActionId', "DbgToggleObjMaskMode", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Obj Mask Mode", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr.DeferMode == DeferModes["OBJ_MASK"] | |
| end, | |
| 'OnAction', function (self, host, source, ...) | |
| if hr.DeferMode ~= DeferModes["OBJ_MASK"] then | |
| OpenDevDSForceModeDlg("OBJ_MASK") | |
| else | |
| CloseDialog("DevDSForceModeDlg") | |
| end | |
| end, | |
| '__condition', function (parent, context) return Platform.developer end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle Skinned Decal Space", | |
| 'ActionId', "DbgToggleToggleSkinnedDecalSpace", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Skinned Decal Space", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr.ShowSkinnedDecalSpace ~= 0 | |
| end, | |
| 'OnAction', function (self, host, source, ...) | |
| hr.ShowSkinnedDecalSpace = 1 - hr.ShowSkinnedDecalSpace | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Show decals", | |
| 'RolloverText', "Show decals", | |
| 'ActionId', "G_ShowDecals", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle Decals", | |
| 'ActionIcon', "CommonAssets/UI/Icons/art brush creative design graphic paint.png", | |
| 'ActionToggle', true, | |
| 'ActionToggled', function (self, host) | |
| return hr.DecalsRenderBoxes == 1 | |
| end, | |
| 'OnAction', function (self, host, source, ...) hr.DecalsRenderBoxes = 1 - hr.DecalsRenderBoxes end, | |
| 'replace_matching_id', true, | |
| }), | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "Tools", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Tools", | |
| 'ActionMenubar', "DevMenu", | |
| 'OnActionEffect', "popup", | |
| 'replace_matching_id', true, | |
| }, { | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Enter/Exit Editor (F3)", | |
| 'RolloverText', "Editor mode (F3)", | |
| 'ActionId', "MO_Editor", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Enter/Exit Editor", | |
| 'ActionIcon', "CommonAssets/UI/Icons/door emergency enter entry exit login.png", | |
| 'ActionShortcut', "F3", | |
| 'OnAction', function (self, host, source, ...) | |
| ToggleEnterExitEditor() | |
| end, | |
| '__condition', function (parent, context) return not editor.IsModdingEditor() end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Clear ignored errors", | |
| 'RolloverText', "Clear ignored errors", | |
| 'ActionId', "Clear Ignored Errors", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Clear Ignored Errors", | |
| 'ActionIcon', "CommonAssets/UI/Icons/bathroom commode restroom toilet washroom.png", | |
| 'OnAction', function (self, host, source, ...) | |
| ClearIgnoredErrors() | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'ActionId', "Tools.Extras", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Extras ...", | |
| 'ActionIcon', "CommonAssets/UI/Menu/folder.tga", | |
| 'OnActionEffect', "popup", | |
| 'replace_matching_id', true, | |
| }, { | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Write screenshot (-PrtScr)", | |
| 'RolloverText', "Write screenshot (-PrtScr)", | |
| 'ActionId', "DE_Screenshot", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Screenshot", | |
| 'ActionShortcut', "-PrtScr", | |
| 'OnAction', function (self, host, source, ...) | |
| WriteScreenshot(GenerateScreenshotFilename("SS", "AppData/")) | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Isolated object screenshot (-Ctrl-Alt-PrtScr)", | |
| 'RolloverText', "Isolated object screenshot (-Ctrl-Alt-PrtScr)", | |
| 'ActionId', "DE_Isolated_Object_Screenshot", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Isolated Object Screenshot", | |
| 'ActionShortcut', "-Ctrl-Alt-PrtScr", | |
| 'OnAction', function (self, host, source, ...) | |
| IsolatedObjectScreenshot() | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Report Bug (Ctrl-F1)", | |
| 'RolloverText', "Report Bug (Ctrl-F1)", | |
| 'ActionId', "DE_BugReport", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Report Bug", | |
| 'ActionIcon', "CommonAssets/UI/Icons/bacteria bug insect protection security virus.png", | |
| 'ActionShortcut', "Ctrl-F1", | |
| 'OnAction', function (self, host, source, ...) | |
| CreateRealTimeThread(CreateXBugReportDlg) | |
| end, | |
| '__condition', function (parent, context) return not Platform.steamdeck and not Platform.demo or Platform.asserts end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggle UI in screenshots (-Ctrl-Shift-PrtScr)", | |
| 'RolloverText', "Toggle UI in screenshots (-Ctrl-Shift-PrtScr)", | |
| 'ActionId', "DE_ToggleScreenshotInterface", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Toggle UI in screenshots", | |
| 'ActionShortcut', "-Ctrl-Shift-PrtScr", | |
| 'OnAction', function (self, host, source, ...) | |
| hr.InterfaceInScreenshot = hr.InterfaceInScreenshot ~= 0 and 0 or 1 | |
| print("UI in screenshots is now", hr.InterfaceInScreenshot ~= 0 and "enabled" or "disabled") | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Write upsampled screenshot (-Ctrl-PrtScr)", | |
| 'RolloverText', "Write upsampled screenshot (-Ctrl-PrtScr)", | |
| 'ActionId', "DE_UpsampledScreenshot", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Upsampled Screenshot", | |
| 'ActionShortcut', "-Ctrl-PrtScr", | |
| 'OnAction', function (self, host, source, ...) | |
| if Platform.developer then | |
| CreateRealTimeThread(function() | |
| WaitNextFrame(3) | |
| LockCamera("Screenshot") | |
| local store = {} | |
| Msg("BeforeUpsampledScreenshot", store) | |
| WaitNextFrame() | |
| MovieWriteScreenshot(GenerateScreenshotFilename("SSAA", "AppData/"), 0, 64, false) | |
| WaitNextFrame() | |
| Msg("AfterUpsampledScreenshot", store) | |
| UnlockCamera("Screenshot") | |
| end) | |
| end | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| }), | |
| }), | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'RolloverText', "Toggle terrain types display", | |
| 'ActionId', "G_ShowTerrainTypes", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Terrain types", | |
| 'ActionShortcut', "Ctrl-Alt-1", | |
| 'OnAction', function (self, host, source, ...) | |
| DbgToggleOverlay("type") | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'RolloverText', "Toggle grass density display", | |
| 'ActionId', "G_ShowGrassDensity", | |
| 'ActionTranslate', false, | |
| 'ActionName', "Grass density", | |
| 'ActionShortcut', "Ctrl-Alt-2", | |
| 'OnAction', function (self, host, source, ...) | |
| DbgToggleOverlay("grass_density") | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Toggles the buildable debug grid (Ctrl-B)", | |
| 'ActionId', "ToggleBuildable", | |
| 'ActionTranslate', false, | |
| 'ActionShortcut', "Ctrl-B", | |
| 'OnAction', function (self, host, source, ...) | |
| DbgToggleBuildableGrid() | |
| end, | |
| '__condition', function (parent, context) return Libs.Sim end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Editor actions", | |
| 'ActionMode', "Editor", | |
| }, { | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Ctrl-C)", | |
| 'ActionId', "E_CopyToClipboard", | |
| 'ActionTranslate', false, | |
| 'ActionShortcut', "Ctrl-C", | |
| 'OnAction', function (self, host, source, ...) | |
| if IsEditorActive() and selo() then | |
| ExecuteWithStatusUI("Copying to clipboard...", XEditorCopyToClipboard) | |
| end | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Ctrl-X)", | |
| 'ActionId', "E_CutToClipboard", | |
| 'ActionTranslate', false, | |
| 'ActionShortcut', "Ctrl-X", | |
| 'ActionState', function (self, host) | |
| return IsEditorActive() and "enabled" or "disabled" | |
| end, | |
| 'OnAction', function (self, host, source, ...) | |
| if IsEditorActive() and selo() then | |
| ExecuteWithStatusUI("Cutting to clipboard...", function() XEditorCopyToClipboard() editor.DelSelWithUndoRedo() end) | |
| end | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Paste (Ctrl-V)", | |
| 'ActionId', "G_Paste", | |
| 'ActionTranslate', false, | |
| 'ActionShortcut', "Ctrl-V", | |
| 'OnAction', function (self, host, source, ...) | |
| if IsEditorActive() then | |
| local clipboard = GetFromClipboard(-1) | |
| if clipboard then | |
| if clipboard:starts_with("--[[HGE place script]]--") then | |
| editor.PasteFromClipboard() | |
| else | |
| local lua_code = GetFromClipboard(-1) | |
| if not lua_code:starts_with(XEditorCopyScriptTag) then | |
| ExecuteWithStatusUI("No objects in clipboard.", function() Sleep(500) end) | |
| return | |
| end | |
| ExecuteWithStatusUI("Pasting...", XEditorPasteFromClipboard) | |
| end | |
| end | |
| end | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Adds the visible objects to the selection (Ctrl-Alt-Space)", | |
| 'ActionId', "Dbg_AddVisibleClassToSelection", | |
| 'ActionTranslate', false, | |
| 'ActionShortcut', "Ctrl-Alt-Space", | |
| 'OnAction', function (self, host, source, ...) | |
| local ol = editor.GetSel() | |
| if #ol == 0 then | |
| print( "Select something first!" ) | |
| else | |
| local num = #ol | |
| local locked = Collection.GetLockedCollection() | |
| editor.AddToSel(XEditorGetVisibleObjects(function(obj) | |
| for i = 1, num do | |
| if ol[i].class == obj.class and (not locked or obj:GetRootCollection() == locked) then | |
| return true | |
| end | |
| end | |
| return false | |
| end)) | |
| end | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', " (Ctrl-Shift-V)", | |
| 'ActionId', "G_PasteNoZ", | |
| 'ActionTranslate', false, | |
| 'ActionShortcut', "Ctrl-Shift-V", | |
| 'OnAction', function (self, host, source, ...) editor.PasteFromClipboard(true) end, | |
| 'replace_matching_id', true, | |
| }), | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Execute last console command (.)", | |
| 'ActionId', "LastCommand", | |
| 'ActionTranslate', false, | |
| 'ActionShortcut', ".", | |
| 'OnAction', function (self, host, source, ...) | |
| if rawget(_G, "dlgConsole") then | |
| dlgConsole:ExecuteLast() | |
| end | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| PlaceObj('XTemplateAction', { | |
| 'comment', "Delete slab without deleting suppressed slabs underneath.", | |
| 'ActionId', "DeleteSelectedSlabsWithoutPropagation", | |
| 'ActionTranslate', false, | |
| 'ActionShortcut', "Ctrl-Delete", | |
| 'OnAction', function (self, host, source, ...) | |
| DeleteSelectedSlabsWithoutPropagation() | |
| end, | |
| 'replace_matching_id', true, | |
| }), | |
| }), | |
| }) | |