From cccc7695bf325f253789ecaa778f95e857a44f8a Mon Sep 17 00:00:00 2001 From: rlcevg Date: Mon, 7 Dec 2020 23:14:50 +0200 Subject: [PATCH 1/2] Add 'Show AIOptions' toggle. Separate button for AIOptions in ai_list_window --- LuaMenu/images/settings.png | Bin 0 -> 2349 bytes .../chobby/components/ai_list_window.lua | 82 ++++++++++++++---- .../chobby/components/configuration.lua | 2 + LuaMenu/widgets/gui_popup_preloader.lua | 6 +- LuaMenu/widgets/gui_settings_window.lua | 1 + 5 files changed, 73 insertions(+), 18 deletions(-) create mode 100644 LuaMenu/images/settings.png diff --git a/LuaMenu/images/settings.png b/LuaMenu/images/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..7bed8945f33011aafd7d67a944d41d6d2dc08f1e GIT binary patch literal 2349 zcmV+|3DWk7P)E3j!{WO4-gDn&ANqF!XRg0udtOSV2 zbP*X>sWTC|hna5)QMpw_?n+>PyogMXGsY+%1n@|df|)I? z#Be&DZU)c|;IN21*V585%w-%!DTv5$0IvX;KS1;>fR(=Q7hN2Q$TR?l0E~!G{SSb< zecwOfVz;HGWmqbe+DJsp28j0d^z+E}?f0UPk?$pgUSs`{#kd_KxRYisKy052nY z@&GVORrj>Ew$?={ib!h0gbDixnLGg8pGu{kj@2XK~%N@h0M%oZ~9M2E4xmoHzgU%Phg zhd~OF-+=b^_J^4HS8*b~Sy0u5*=%-Cm`+WUk*=<;?xv=uu>ih$-6E?3X0|??%|0Kc z=eiGAsj9Cf3#odj>b_&gj;(UhbxMHm`$cB{Ci*{2H#Mqyu23i}-o1Nw$wl9JC+PeB z1v7gxL10Ayd(CX6sx|?ryL9Q&Eda(8i^YkmI?v30q^kQ=^;4^fD@3$>&6+juJL|_W zE+VX|r)rc6~uKqN2&(XMAV6hAI!{7#q|;UIBaI2OJ{lVOOj6hS~8i;S^(cc#G_3_k<0o( zVke-y!wZwI$Ye4v#?aXwF1y1|P)R|gDMa?`>-ozMB$LTJt*WmC$yIf3 zT$`~HP(IiM?d?AT@cp;}#Kcr}nW|nIOvudlipYXE2Ava7KGN<8QQ7SK{<%2LDz`+lrPFDdQq?RjRN9VA!P%S5z=h+go0{|EvS=84EiRh?Px%1l9j zY5MkZ^){@4c`bj4JAtGy^Iiaf31H@t0G0z-E+QYQ>Tza%*UZiUc#DXRT)cSkbST3cJYb>K3H{zm1kj<#k1cr9r_aUde++a#*`9y1>Y zaMsMu5Yb6hJ<{9Td&n!dj{a2s_X$MgE;CzNuFQ-I@v#8F`nZ!wf|)J2c1atEs$OE| zO{G%lg^rGnV?laO6(JG%f~xLe=AauKr9z=lS83%ZE+R4!z}pCjUsbzRbzv@-i(H;v ztHLK#bsmDN!Zn`f{m{kM^}x)YK=9FV;Sw+^9Soqh_y{Xz1G*aoGNo#5FB`FasqQi0u2(&_Yfi6|SULquod+O4E08r5A}IiG!r{8ijYL(?7mLN|ot>TkaM5@A2$t{My@Z>5@&Lfhso}$i?-CKG@0(Ks zQmNEN0AEWKS#_CfX6sxOBVU1ZI^9e}FC~wu`l#wRvf1o!!gQjp$&E+>~%bh8eN{dwW za+I#BUQ*SCE{)dmQn$d&HVz{GEr6$@Y((CuIC$`&*4NkX8a;aS7$Uk4zy(!ZoXuvR zKYH}2^Ny>ltLy!yrl#>k6nf#3h&E)i+1;*o^ZC5y^ZC8AXU{%tX7kK!6cMcl(Bg8F zJ=Sikt*z~gg+k$M*xlPOMC5J&e+knml}gjXYItF+TD5Ad=Xt3(<15;3CV)ib0|0~8 z^i}n}Y&Kif%~rKLL#C?7gM{VMbyc|$e>fR-BCP1xoP??;pxmF2EgLFsM0515AOR62 zZh6P0>IopCL95CDpsIngp`z*uxOnm6>t^`bt(00000NkvXXu0mjf+~0$e literal 0 HcmV?d00001 diff --git a/LuaMenu/widgets/chobby/components/ai_list_window.lua b/LuaMenu/widgets/chobby/components/ai_list_window.lua index 8d963edb0..4f5693dc1 100644 --- a/LuaMenu/widgets/chobby/components/ai_list_window.lua +++ b/LuaMenu/widgets/chobby/components/ai_list_window.lua @@ -1,5 +1,7 @@ AiListWindow = ListWindow:extends{} +local IMG_SETTINGS = LUA_DIRNAME .. "images/settings.png" + function AiListWindow:init(gameName) self:super('init', lobbyInterfaceHolder, "Choose AI", false, "main_window", nil, {6, 7, 7, 4}) @@ -70,42 +72,88 @@ function AiListWindow:AddAiToList(ai, blackList, oldAiVersions, isRunning64Bit) if Configuration.gameConfig.aiTooltip then tooltip = Configuration.gameConfig.aiTooltip[displayName] end + + local buttonList = nil + if Configuration.showAiOptions then + local path = "AI/Skirmish/" .. shortName .. "/" .. ai.version .. "/AIOptions.lua" + if VFS.FileExists(path) then + buttonList = self:MakeAiOptionsButton(displayName, tooltip, shortName, ai.version, path) + end + end + if buttonList == nil then + buttonList = self:MakeAiButton(displayName, tooltip, shortName, ai.version) + end + self:AddRow(buttonList, displayName) +end + +function AiListWindow:MakeAiOptionsButton(displayName, tooltip, shortName, version, path) local addAIButton = Button:New { x = 0, y = 0, - width = "100%", + width = "80%", height = "100%", caption = displayName, font = Configuration:GetFont(3), tooltip = tooltip, OnClick = { function() - local function defaultAction() - self:AddAi(displayName, shortName, ai.version) + self:AddAi(displayName, shortName, version) + self:HideWindow() + end + }, + } + local optionsButton = Button:New { + x = "80%", + y = 0, + width = "20%", + height = "100%", + caption = "", + font = Configuration:GetFont(3), + OnClick = { + function() + if self.lobby.name ~= "singleplayer" then + -- Disable AIOptions in multiplayer: + -- no protocol command exists to allow creation of startscript with AIOptions by autohost + self:AddAi(displayName, shortName, version) self:HideWindow() - end - - local skirmishDefault = WG.Chobby.Configuration.gameConfig.skirmishDefault - if not skirmishDefault or not skirmishDefault.AIOptionsEnabled then - defaultAction() - return - end - - local path = "AI/Skirmish/" .. ai.shortName .. "/" .. ai.version .. "/AIOptions.lua" - if not VFS.FileExists(path) then - defaultAction() return end - local successFunc = function(aioptions) - self:AddAi(displayName, shortName, ai.version, aioptions) + self:AddAi(displayName, shortName, version, aioptions) self:HideWindow() end WG.Chobby.AiOptionsWindow(displayName, path, successFunc) end }, } - self:AddRow({addAIButton}, displayName) + local optionsImage = Image:New { + x = "10%", + y = "10%", + width = "80%", + height = "80%", + file = IMG_SETTINGS, + parent = optionsButton, + } + return {addAIButton, optionsButton} +end + +function AiListWindow:MakeAiButton(displayName, tooltip, shortName, version) + local addAIButton = Button:New { + x = 0, + y = 0, + width = "100%", + height = "100%", + caption = displayName, + font = Configuration:GetFont(3), + tooltip = tooltip, + OnClick = { + function() + self:AddAi(displayName, shortName, version) + self:HideWindow() + end + }, + } + return {addAIButton} end function AiListWindow:AddAi(displayName, shortName, version, options) diff --git a/LuaMenu/widgets/chobby/components/configuration.lua b/LuaMenu/widgets/chobby/components/configuration.lua index 2ba3fe7d4..988416463 100644 --- a/LuaMenu/widgets/chobby/components/configuration.lua +++ b/LuaMenu/widgets/chobby/components/configuration.lua @@ -215,6 +215,7 @@ function Configuration:init() self.hideInterface = false self.enableTextToSpeech = true self.showOldAiVersions = false + self.showAiOptions = false self.drawAtFullSpeed = false self.lobbyIdleSleep = false self.rememberQueuesOnStart = false @@ -546,6 +547,7 @@ function Configuration:GetConfigData() matchmakerPopupTime = self.matchmakerPopupTime, enableTextToSpeech = self.enableTextToSpeech, showOldAiVersions = self.showOldAiVersions, + showAiOptions = self.showAiOptions, chatFontSize = self.chatFontSize, myAccountID = self.myAccountID, lastAddedAiName = self.lastAddedAiName, diff --git a/LuaMenu/widgets/gui_popup_preloader.lua b/LuaMenu/widgets/gui_popup_preloader.lua index 33baac69b..f2dd4a749 100644 --- a/LuaMenu/widgets/gui_popup_preloader.lua +++ b/LuaMenu/widgets/gui_popup_preloader.lua @@ -15,6 +15,7 @@ local aiListWindow local aiPopup local showOldAiVersions = false +local showAiOptions = false local simpleAiList = true -------------------------------------------------------------------------- @@ -74,9 +75,12 @@ local PopupPreloader = {} function PopupPreloader.ShowAiListWindow(battleLobby, newGameName, teamIndex, quickAddAi) local conf = WG.Chobby.Configuration - if newGameName ~= oldGameName or conf.showOldAiVersions ~= showOldAiVersions or conf.simpleAiList ~= simpleAiList then + if newGameName ~= oldGameName or conf.simpleAiList ~= simpleAiList + or conf.showOldAiVersions ~= showOldAiVersions or conf.showAiOptions ~= showAiOptions + then oldGameName = newGameName showOldAiVersions = conf.showOldAiVersions + showAiOptions = conf.showAiOptions simpleAiList = conf.simpleAiList UpdateAiListWindow(newGameName) end diff --git a/LuaMenu/widgets/gui_settings_window.lua b/LuaMenu/widgets/gui_settings_window.lua index f9d0f6186..a0879e1eb 100644 --- a/LuaMenu/widgets/gui_settings_window.lua +++ b/LuaMenu/widgets/gui_settings_window.lua @@ -1044,6 +1044,7 @@ local function GetVoidTabControls() children[#children + 1], offset = AddCheckboxSetting(offset, "Agressive Set Borderless", "agressivelySetBorderlessWindowed", false) children[#children + 1], offset = AddCheckboxSetting(offset, "Use wrong engine", "useWrongEngine", false) children[#children + 1], offset = AddCheckboxSetting(offset, "Show old AI versions", "showOldAiVersions", false) + children[#children + 1], offset = AddCheckboxSetting(offset, "Show AIOptions", "showAiOptions", false) children[#children + 1] = Label:New { x = 20, From 2e7c238fcb36f397302279e30a5a1810dffd89ed Mon Sep 17 00:00:00 2001 From: rlcevg Date: Sat, 12 Dec 2020 15:10:57 +0200 Subject: [PATCH 2/2] Hide AIOptions button in multiplayer --- .../chobby/components/ai_list_window.lua | 55 ++++++------------- LuaMenu/widgets/gui_popup_preloader.lua | 18 +++--- 2 files changed, 27 insertions(+), 46 deletions(-) diff --git a/LuaMenu/widgets/chobby/components/ai_list_window.lua b/LuaMenu/widgets/chobby/components/ai_list_window.lua index 4f5693dc1..4351d7544 100644 --- a/LuaMenu/widgets/chobby/components/ai_list_window.lua +++ b/LuaMenu/widgets/chobby/components/ai_list_window.lua @@ -2,11 +2,12 @@ AiListWindow = ListWindow:extends{} local IMG_SETTINGS = LUA_DIRNAME .. "images/settings.png" -function AiListWindow:init(gameName) +function AiListWindow:init(lobby, gameName) self:super('init', lobbyInterfaceHolder, "Choose AI", false, "main_window", nil, {6, 7, 7, 4}) self.window:SetPos(nil, nil, 500, 700) + self.lobby = lobby or self.lobby self.validAiNames = {} -- Disable game-specific AIs for now since it breaks /luaui reload @@ -15,11 +16,11 @@ function AiListWindow:init(gameName) local blackList = Configuration.gameConfig.aiBlacklist local oldAiVersions = (not Configuration.showOldAiVersions) and Configuration.gameConfig.oldAiVersions local isRunning64Bit = Configuration:GetIsRunning64Bit() + local isSingleplayer = lobby.name == "singleplayer" for i, ai in pairs(ais) do - self:AddAiToList(ai, blackList, oldAiVersions, isRunning64Bit) + self:AddAiToList(ai, blackList, oldAiVersions, isRunning64Bit, isSingleplayer) end - end function AiListWindow:CompareItems(id1, id2) @@ -32,7 +33,7 @@ function AiListWindow:CompareItems(id1, id2) return true end -function AiListWindow:AddAiToList(ai, blackList, oldAiVersions, isRunning64Bit) +function AiListWindow:AddAiToList(ai, blackList, oldAiVersions, isRunning64Bit, isSingleplayer) local shortName = ai.shortName or "Unknown" if blackList and blackList[shortName] then @@ -73,35 +74,20 @@ function AiListWindow:AddAiToList(ai, blackList, oldAiVersions, isRunning64Bit) tooltip = Configuration.gameConfig.aiTooltip[displayName] end - local buttonList = nil - if Configuration.showAiOptions then + local buttonList = {} + local btnWidth = "100%" + if Configuration.showAiOptions and isSingleplayer then local path = "AI/Skirmish/" .. shortName .. "/" .. ai.version .. "/AIOptions.lua" if VFS.FileExists(path) then - buttonList = self:MakeAiOptionsButton(displayName, tooltip, shortName, ai.version, path) + buttonList[#buttonList + 1] = self:MakeAiOptionsButton(displayName, tooltip, shortName, ai.version, path) + btnWidth = "80%" end end - if buttonList == nil then - buttonList = self:MakeAiButton(displayName, tooltip, shortName, ai.version) - end + buttonList[#buttonList + 1] = self:MakeAiButton(btnWidth, displayName, tooltip, shortName, ai.version) self:AddRow(buttonList, displayName) end function AiListWindow:MakeAiOptionsButton(displayName, tooltip, shortName, version, path) - local addAIButton = Button:New { - x = 0, - y = 0, - width = "80%", - height = "100%", - caption = displayName, - font = Configuration:GetFont(3), - tooltip = tooltip, - OnClick = { - function() - self:AddAi(displayName, shortName, version) - self:HideWindow() - end - }, - } local optionsButton = Button:New { x = "80%", y = 0, @@ -111,13 +97,6 @@ function AiListWindow:MakeAiOptionsButton(displayName, tooltip, shortName, versi font = Configuration:GetFont(3), OnClick = { function() - if self.lobby.name ~= "singleplayer" then - -- Disable AIOptions in multiplayer: - -- no protocol command exists to allow creation of startscript with AIOptions by autohost - self:AddAi(displayName, shortName, version) - self:HideWindow() - return - end local successFunc = function(aioptions) self:AddAi(displayName, shortName, version, aioptions) self:HideWindow() @@ -134,14 +113,14 @@ function AiListWindow:MakeAiOptionsButton(displayName, tooltip, shortName, versi file = IMG_SETTINGS, parent = optionsButton, } - return {addAIButton, optionsButton} + return optionsButton end -function AiListWindow:MakeAiButton(displayName, tooltip, shortName, version) - local addAIButton = Button:New { +function AiListWindow:MakeAiButton(btnWidth, displayName, tooltip, shortName, version) + return Button:New { x = 0, y = 0, - width = "100%", + width = btnWidth, height = "100%", caption = displayName, font = Configuration:GetFont(3), @@ -153,7 +132,6 @@ function AiListWindow:MakeAiButton(displayName, tooltip, shortName, version) end }, } - return {addAIButton} end function AiListWindow:AddAi(displayName, shortName, version, options) @@ -186,7 +164,6 @@ function AiListWindow:QuickAdd(shortName) end end -function AiListWindow:SetLobbyAndAllyTeam(lobby, allyTeam) - self.lobby = lobby or self.lobby +function AiListWindow:SetAllyTeam(allyTeam) self.allyTeam = allyTeam or self.allyTeam end diff --git a/LuaMenu/widgets/gui_popup_preloader.lua b/LuaMenu/widgets/gui_popup_preloader.lua index f2dd4a749..347c64f5a 100644 --- a/LuaMenu/widgets/gui_popup_preloader.lua +++ b/LuaMenu/widgets/gui_popup_preloader.lua @@ -10,6 +10,7 @@ function widget:GetInfo() } end +local oldLobby local oldGameName local aiListWindow local aiPopup @@ -22,11 +23,11 @@ local simpleAiList = true -------------------------------------------------------------------------- -- AI List window updating -local function UpdateAiListWindow(gameName) +local function UpdateAiListWindow(battleLobby, gameName) if aiPopup then aiPopup:ClosePopup() end - aiListWindow = WG.Chobby.AiListWindow(gameName) + aiListWindow = WG.Chobby.AiListWindow(battleLobby, gameName) aiListWindow.window:Hide() end @@ -46,8 +47,9 @@ local function InitializeListeners(battleLobby) return end + oldLobby = battleLobby oldGameName = newGameName - UpdateAiListWindow(newGameName) + UpdateAiListWindow(battleLobby, newGameName) end local function OnJoinedBattle(listener, joinedBattleId, userName) @@ -59,8 +61,9 @@ local function InitializeListeners(battleLobby) return end + oldLobby = battleLobby oldGameName = newGameName - UpdateAiListWindow(newGameName) + UpdateAiListWindow(battleLobby, newGameName) end battleLobby:AddListener("OnUpdateBattleInfo", OnUpdateBattleInfo) @@ -75,17 +78,18 @@ local PopupPreloader = {} function PopupPreloader.ShowAiListWindow(battleLobby, newGameName, teamIndex, quickAddAi) local conf = WG.Chobby.Configuration - if newGameName ~= oldGameName or conf.simpleAiList ~= simpleAiList + if newGameName ~= oldGameName or conf.simpleAiList ~= simpleAiList or oldLobby ~= battleLobby or conf.showOldAiVersions ~= showOldAiVersions or conf.showAiOptions ~= showAiOptions then + oldLobby = battleLobby oldGameName = newGameName showOldAiVersions = conf.showOldAiVersions showAiOptions = conf.showAiOptions simpleAiList = conf.simpleAiList - UpdateAiListWindow(newGameName) + UpdateAiListWindow(battleLobby, newGameName) end - aiListWindow:SetLobbyAndAllyTeam(battleLobby, teamIndex) + aiListWindow:SetAllyTeam(teamIndex) if quickAddAi and aiListWindow:QuickAdd(quickAddAi) then return end