myspace / CommonLua /Libs /Debug /XTemplates /DebugShortcuts.lua
sirnii's picture
Upload 1816 files
b6a38d7 verified
-- ========== 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,
}),
}),
})