diff --git a/data/ui_scripts/patches/__init__.lua b/data/ui_scripts/patches/__init__.lua index 693a249b..3679bb26 100644 --- a/data/ui_scripts/patches/__init__.lua +++ b/data/ui_scripts/patches/__init__.lua @@ -2,6 +2,8 @@ if (game:issingleplayer()) then return end +require("shaderdialog") + -- defined in mp_hud/hudutils.lua function GetGameModeName() return Engine.Localize(Engine.TableLookup(GameTypesTable.File, diff --git a/data/ui_scripts/patches/shaderdialog.lua b/data/ui_scripts/patches/shaderdialog.lua new file mode 100644 index 00000000..71c67102 --- /dev/null +++ b/data/ui_scripts/patches/shaderdialog.lua @@ -0,0 +1,29 @@ +local originaldialog = LUI.ShaderCacheDialog.new +LUI.MenuBuilder.registerPopupType("ShaderCacheDialog_original", LUI.ShaderCacheDialog.new) + +game:addlocalizedstring("PLATFORM_SHADER_PRECACHE_ASK", "Would you like to populate the shader cache? It may cause crashes with certain GPUs (e.g. RTX cards) but will improve performance if successful.") +game:addlocalizedstring("MENU_NO_DONT_ASK", "No, don't ask me again") + +local function dialog(...) + if (game:sharedget("has_accepted_shader_caching") == "1") then + return LUI.ShaderCacheDialog.new(...) + end + + return LUI.MenuBuilder.BuildRegisteredType("generic_yesno_popup", { + popup_title = Engine.Localize("@MENU_WARNING"), + message_text = Engine.Localize("@PLATFORM_SHADER_PRECACHE_ASK"), + yes_action = function() + game:sharedset("has_accepted_shader_caching", "1") + LUI.FlowManager.RequestAddMenu(nil, "ShaderCacheDialog_original") + end, + yes_text = Engine.Localize("@MENU_YES"), + no_text = Engine.Localize("@MENU_NO_DONT_ASK"), + no_action = function() + Engine.SetDvarInt("r_preloadShadersFrontendAllow", 0) + end, + default_focus_index = 2, + cancel_will_close = false + }) +end + +LUI.MenuBuilder.m_types_build["ShaderCacheDialog"] = dialog