From ef4cc8b5731ce23d1651010a349682d234fccb9c Mon Sep 17 00:00:00 2001 From: Areloch Date: Thu, 23 Jul 2020 16:26:38 -0500 Subject: [PATCH] Updated names of some of the input images to match the names of the inputs to simplify lookups Altered a few of the input images to improve readability of some of the text Standardizes the menuInputButton set usage to just use the raw action names rather than a middleman naming scheme for simplicity and standardization Added comments to menuInputButtons.cs Split out the menuInputButton containers to simplify and stabilize the code on the messageBox dialog Removed old reference to script/gui files not there anymore Simplified the input state check in guiGameListMenuCtrl.cpp Added a check so we don't try exec'ing the selected list item in guiGameListMenuCtrl.cpp if nothing has actually be selected --- .../gui/controls/guiGameListMenuCtrl.cpp | 4 +- Templates/BaseGame/game/data/ui/UI.cs | 3 - .../game/data/ui/guis/chooseLevelDlg.cs | 4 +- .../game/data/ui/guis/joinServerMenu.cs | 10 +- .../BaseGame/game/data/ui/guis/mainMenu.cs | 2 +- .../game/data/ui/guis/messageBoxDlg.gui | 106 ++++-- .../BaseGame/game/data/ui/guis/optionsMenu.cs | 10 +- .../BaseGame/game/data/ui/guis/pauseMenu.cs | 4 +- ...lack_Esc.png => Keyboard_Black_Escape.png} | Bin ...ck_Enter.png => Keyboard_Black_Return.png} | Bin ..._Alt.png => Keyboard_Black_Return_Alt.png} | Bin ...all.png => Keyboard_Black_Return_Tall.png} | Bin .../data/ui/images/Inputs/PS4/PS4_Options.png | Bin 3171 -> 7809 bytes .../data/ui/images/Inputs/PS4/PS4_Share.png | Bin 3073 -> 8252 bytes .../ui/images/Inputs/Switch/Switch_LB.png | Bin 3092 -> 9697 bytes .../ui/images/Inputs/Switch/Switch_RB.png | Bin 3595 -> 10888 bytes .../game/data/ui/scripts/menuInputButtons.cs | 310 ++++++++---------- .../game/data/ui/scripts/messageBoxes.cs | 54 ++- 18 files changed, 242 insertions(+), 265 deletions(-) rename Templates/BaseGame/game/data/ui/images/Inputs/Keyboard & Mouse/{Keyboard_Black_Esc.png => Keyboard_Black_Escape.png} (100%) rename Templates/BaseGame/game/data/ui/images/Inputs/Keyboard & Mouse/{Keyboard_Black_Enter.png => Keyboard_Black_Return.png} (100%) rename Templates/BaseGame/game/data/ui/images/Inputs/Keyboard & Mouse/{Keyboard_Black_Enter_Alt.png => Keyboard_Black_Return_Alt.png} (100%) rename Templates/BaseGame/game/data/ui/images/Inputs/Keyboard & Mouse/{Keyboard_Black_Enter_Tall.png => Keyboard_Black_Return_Tall.png} (100%) diff --git a/Engine/source/gui/controls/guiGameListMenuCtrl.cpp b/Engine/source/gui/controls/guiGameListMenuCtrl.cpp index fff0d4aee..6d2416aae 100644 --- a/Engine/source/gui/controls/guiGameListMenuCtrl.cpp +++ b/Engine/source/gui/controls/guiGameListMenuCtrl.cpp @@ -818,7 +818,7 @@ bool GuiGameListMenuCtrl::onInputEvent(const InputEventInfo& event) { bool isModifier = false; - bool state = event.action == SI_MAKE ? 1 : 0; + bool state = event.action == SI_MAKE; switch (event.objInst) { @@ -1164,7 +1164,7 @@ void GuiGameListMenuCtrl::changeOption(Row* row, S32 delta) static StringTableEntry LEFT = StringTable->insert("LEFT", true); static StringTableEntry RIGHT = StringTable->insert("RIGHT", true); - if (row->mScriptCallback != NULL) + if (row->mScriptCallback != NULL && row->mSelectedOption != NO_OPTION) { setThisControl(); StringTableEntry direction = NULL; diff --git a/Templates/BaseGame/game/data/ui/UI.cs b/Templates/BaseGame/game/data/ui/UI.cs index 964a51791..cbb29595d 100644 --- a/Templates/BaseGame/game/data/ui/UI.cs +++ b/Templates/BaseGame/game/data/ui/UI.cs @@ -80,9 +80,6 @@ function UI::initClient(%this) exec("./scripts/cursors.cs"); exec("./scripts/utility.cs"); - exec("./guis/menuGraphics.gui"); - exec("./guis/menuGraphics.cs"); - loadStartup(); } diff --git a/Templates/BaseGame/game/data/ui/guis/chooseLevelDlg.cs b/Templates/BaseGame/game/data/ui/guis/chooseLevelDlg.cs index 9054ee183..7155b2d3e 100644 --- a/Templates/BaseGame/game/data/ui/guis/chooseLevelDlg.cs +++ b/Templates/BaseGame/game/data/ui/guis/chooseLevelDlg.cs @@ -145,8 +145,8 @@ function ChooseLevelDlg::onWake( %this ) function ChooseLevelButtonHolder::onWake(%this) { - %this-->goButton.set("A", "Enter", "Start Level", "ChooseLevelDlg.beginLevel();"); - %this-->backButton.set("B", "Esc", "Back", "ChooseLevelDlg.backOut();"); + %this-->goButton.set("btn_a", "Return", "Start Level", "ChooseLevelDlg.beginLevel();"); + %this-->backButton.set("btn_b", "Escape", "Back", "ChooseLevelDlg.backOut();"); } function ChooseLevelDlg::onSleep( %this ) diff --git a/Templates/BaseGame/game/data/ui/guis/joinServerMenu.cs b/Templates/BaseGame/game/data/ui/guis/joinServerMenu.cs index 467fa4e6d..548e077d3 100644 --- a/Templates/BaseGame/game/data/ui/guis/joinServerMenu.cs +++ b/Templates/BaseGame/game/data/ui/guis/joinServerMenu.cs @@ -10,11 +10,11 @@ function JoinServerMenu::onWake() function JoinServerButtonHolder::onWake(%this) { - %this-->joinButton.set("Start", "Enter", "Join", "JoinServerMenu.join();"); - %this-->backButton.set("B", "Esc", "Back", "JoinServerMenu.backOut();"); - %this-->refreshButton.set("Y", "R", "Refresh", "JoinServerMenu.refresh();"); - %this-->queryLANButton.set("A", "Q", "Query LAN", "JoinServerMenu.queryLan();"); - %this-->queryInternetButton.set("X", "E", "Query Internet", "JoinServerMenu.query();"); + %this-->joinButton.set("Start", "Return", "Join", "JoinServerMenu.join();"); + %this-->backButton.set("btn_b", "escape", "Back", "JoinServerMenu.backOut();"); + %this-->refreshButton.set("btn_y", "R", "Refresh", "JoinServerMenu.refresh();"); + %this-->queryLANButton.set("btn_a", "Q", "Query LAN", "JoinServerMenu.queryLan();"); + %this-->queryInternetButton.set("btn_x", "E", "Query Internet", "JoinServerMenu.query();"); } //---------------------------------------- diff --git a/Templates/BaseGame/game/data/ui/guis/mainMenu.cs b/Templates/BaseGame/game/data/ui/guis/mainMenu.cs index 471bf2632..f66551acd 100644 --- a/Templates/BaseGame/game/data/ui/guis/mainMenu.cs +++ b/Templates/BaseGame/game/data/ui/guis/mainMenu.cs @@ -16,7 +16,7 @@ function MainMenuGui::onSleep(%this) function MainMenuButtonHolder::onWake(%this) { - %this-->goButton.set("A", "Enter", "Go", "MainMenuButtonList.activateRow();"); + %this-->goButton.set("btn_a", "Return", "Go", "MainMenuButtonList.activateRow();"); } function MainMenuButtonList::onAdd(%this) diff --git a/Templates/BaseGame/game/data/ui/guis/messageBoxDlg.gui b/Templates/BaseGame/game/data/ui/guis/messageBoxDlg.gui index 4516b7dd8..8dd356d97 100644 --- a/Templates/BaseGame/game/data/ui/guis/messageBoxDlg.gui +++ b/Templates/BaseGame/game/data/ui/guis/messageBoxDlg.gui @@ -112,7 +112,54 @@ canSave = "1"; canSaveDynamicFields = "0"; }; - new GuiControl(MessageBoxButtonHolder) { + new GuiControl(MessageBoxOKButtonHolder) { + position = "0 285"; + extent = "642 40"; + minExtent = "8 2"; + horizSizing = "center"; + vertSizing = "top"; + profile = "GuiDefaultProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + class = "MenuInputButtonContainer"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiIconButtonCtrl() { + buttonMargin = "4 4"; + iconBitmap = "data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Enter"; + iconLocation = "Left"; + sizeIconToButton = "1"; + makeIconSquare = "1"; + textLocation = "Right"; + textMargin = "4"; + autoSize = "0"; + text = "Go"; + groupNum = "-1"; + buttonType = "PushButton"; + useMouseEvents = "0"; + position = "251 0"; + extent = "140 40"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiMenuButtonProfile"; + visible = "1"; + active = "1"; + command = "MainMenuButtonList.activateRow();"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + internalName = "OKButton"; + class = "MenuInputButton"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + }; + new GuiControl(MessageBoxOCButtonHolder) { position = "0 285"; extent = "642 40"; minExtent = "8 2"; @@ -153,7 +200,7 @@ tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; isContainer = "0"; - internalName = "oc_OKButton"; + internalName = "OKButton"; class = "MenuInputButton"; canSave = "1"; canSaveDynamicFields = "0"; @@ -183,41 +230,28 @@ tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; isContainer = "0"; - internalName = "oc_CancelButton"; - class = "MenuInputButton"; - canSave = "1"; - canSaveDynamicFields = "0"; - }; - new GuiIconButtonCtrl() { - buttonMargin = "4 4"; - iconBitmap = "data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Enter"; - iconLocation = "Left"; - sizeIconToButton = "1"; - makeIconSquare = "1"; - textLocation = "Right"; - textMargin = "4"; - autoSize = "0"; - text = "Go"; - groupNum = "-1"; - buttonType = "PushButton"; - useMouseEvents = "0"; - position = "251 0"; - extent = "140 40"; - minExtent = "8 2"; - horizSizing = "right"; - vertSizing = "bottom"; - profile = "GuiMenuButtonProfile"; - visible = "1"; - active = "1"; - command = "MainMenuButtonList.activateRow();"; - tooltipProfile = "GuiToolTipProfile"; - hovertime = "1000"; - isContainer = "0"; - internalName = "OKButton"; + internalName = "CancelButton"; class = "MenuInputButton"; canSave = "1"; canSaveDynamicFields = "0"; }; + }; + new GuiControl(MessageBoxYNCButtonHolder) { + position = "0 285"; + extent = "642 40"; + minExtent = "8 2"; + horizSizing = "center"; + vertSizing = "top"; + profile = "GuiDefaultProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + class = "MenuInputButtonContainer"; + canSave = "1"; + canSaveDynamicFields = "0"; + new GuiIconButtonCtrl() { buttonMargin = "4 4"; iconBitmap = "data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Enter"; @@ -243,7 +277,7 @@ tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; isContainer = "0"; - internalName = "ync_yesButton"; + internalName = "yesButton"; class = "MenuInputButton"; canSave = "1"; canSaveDynamicFields = "0"; @@ -273,7 +307,7 @@ tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; isContainer = "0"; - internalName = "ync_noButton"; + internalName = "noButton"; class = "MenuInputButton"; canSave = "1"; canSaveDynamicFields = "0"; @@ -303,7 +337,7 @@ tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; isContainer = "0"; - internalName = "ync_cancelButton"; + internalName = "CancelButton"; class = "MenuInputButton"; canSave = "1"; canSaveDynamicFields = "0"; diff --git a/Templates/BaseGame/game/data/ui/guis/optionsMenu.cs b/Templates/BaseGame/game/data/ui/guis/optionsMenu.cs index 1604cc0b8..c0258eb3b 100644 --- a/Templates/BaseGame/game/data/ui/guis/optionsMenu.cs +++ b/Templates/BaseGame/game/data/ui/guis/optionsMenu.cs @@ -63,11 +63,11 @@ function OptionsMenu::onWake(%this) function OptionsButtonHolder::onWake(%this) { - %this-->prevTabButton.set("LB", "", "Prev Tab", "OptionsMenu.prevTab();", true); - %this-->nextTabButton.set("RB", "", "Next Tab", "OptionsMenu.nextTab();", true); - %this-->resetButton.set("Back", "R", "Reset", "OptionsMenu.resetToDefaults();"); - %this-->applyButton.set("Start", "Enter", "Apply", "OptionsMenu.apply();"); - %this-->backButton.set("B", "Esc", "Back", "OptionsMenu.backOut();"); + %this-->prevTabButton.set("btn_l", "", "Prev Tab", "OptionsMenu.prevTab();", true); + %this-->nextTabButton.set("btn_r", "", "Next Tab", "OptionsMenu.nextTab();", true); + %this-->resetButton.set("btn_back", "R", "Reset", "OptionsMenu.resetToDefaults();"); + %this-->applyButton.set("btn_start", "Return", "Apply", "OptionsMenu.apply();"); + %this-->backButton.set("btn_b", "Escape", "Back", "OptionsMenu.backOut();"); } function OptionsMenu::apply(%this) diff --git a/Templates/BaseGame/game/data/ui/guis/pauseMenu.cs b/Templates/BaseGame/game/data/ui/guis/pauseMenu.cs index 0782fbe4a..2e10e1f7f 100644 --- a/Templates/BaseGame/game/data/ui/guis/pauseMenu.cs +++ b/Templates/BaseGame/game/data/ui/guis/pauseMenu.cs @@ -45,6 +45,6 @@ function pauseMenuExitToDesktop() function PauseButtonHolder::onWake(%this) { - %this-->goButton.set("A", "Enter", "OK", "PauseMenuList.activateRow();", true); - %this-->backButton.set("B", "Esc", "Back", "Canvas.popDialog();"); + %this-->goButton.set("btn_a", "Return", "OK", "PauseMenuList.activateRow();", true); + %this-->backButton.set("btn_b", "Escape", "Back", "Canvas.popDialog();"); } \ No newline at end of file diff --git a/Templates/BaseGame/game/data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Esc.png b/Templates/BaseGame/game/data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Escape.png similarity index 100% rename from Templates/BaseGame/game/data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Esc.png rename to Templates/BaseGame/game/data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Escape.png diff --git a/Templates/BaseGame/game/data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Enter.png b/Templates/BaseGame/game/data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Return.png similarity index 100% rename from Templates/BaseGame/game/data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Enter.png rename to Templates/BaseGame/game/data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Return.png diff --git a/Templates/BaseGame/game/data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Enter_Alt.png b/Templates/BaseGame/game/data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Return_Alt.png similarity index 100% rename from Templates/BaseGame/game/data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Enter_Alt.png rename to Templates/BaseGame/game/data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Return_Alt.png diff --git a/Templates/BaseGame/game/data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Enter_Tall.png b/Templates/BaseGame/game/data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Return_Tall.png similarity index 100% rename from Templates/BaseGame/game/data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Enter_Tall.png rename to Templates/BaseGame/game/data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_Return_Tall.png diff --git a/Templates/BaseGame/game/data/ui/images/Inputs/PS4/PS4_Options.png b/Templates/BaseGame/game/data/ui/images/Inputs/PS4/PS4_Options.png index 21820ed4a3080e19f62ccd03e6c99930cc750d70..4fd45bf344e001ed1939880a38e20e5404bbcde9 100644 GIT binary patch literal 7809 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 literal 3171 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 LF4{1xuO$BmDdzuS diff --git a/Templates/BaseGame/game/data/ui/images/Inputs/PS4/PS4_Share.png b/Templates/BaseGame/game/data/ui/images/Inputs/PS4/PS4_Share.png index 9a1c4abaedd8241839b7a217a64558bf0ceddc8c..b1d10f7906013f08bfbc8ef704c17ac84ae78c6d 100644 GIT binary patch literal 8252 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 SJx>4mA}h(M$<|7nhy530?9fR7 literal 3073 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 diff --git a/Templates/BaseGame/game/data/ui/images/Inputs/Switch/Switch_LB.png b/Templates/BaseGame/game/data/ui/images/Inputs/Switch/Switch_LB.png index fedbbed3a39c51479f78fe8b10478b2e0569953a..cd38579e7bad26f9bd4346220e4194a0cb9921c9 100644 GIT binary patch literal 9697 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 N00DQlC0PgF{y#2T-xB}; diff --git a/Templates/BaseGame/game/data/ui/images/Inputs/Switch/Switch_RB.png b/Templates/BaseGame/game/data/ui/images/Inputs/Switch/Switch_RB.png index 4660c257a8bb82bd9dc50fc78a892a41e3d4779a..64da4d3d8ebd90949b0fc8eb5bd34d153e922754 100644 GIT binary patch literal 10888 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 literal 3595 zcmZvfdpr}|AIC>wF1gMvm%`j9lVKFHOs2Vp+T6`0MZ!>S$>UDX*3?ucB0Pr4U2a|G z`glyE$UQvTvosP~a{I0Sf9Lf&=e%C$^*yieIiK@B-}5~=E>0JYi5wRJ0075O_O@=k zKInG^3i8^UOAp<7<6|gW8~0ljPVuXl8N2C$SE6a3BxGQU!7yoPLAmy0un&GNc3@AS z3O}hb-aWU&p*5`;W{>&A;|psTYx6aT!pq%GQlq!D6m^-BzmUhm437~(4T%CaDnQ7& zy_4YEf+hWO=lJ!LHomTHer+P8QvOdlO01164V#t$7$EFL0dSVtApteI!_{OZ^(w5& zie$LHS~v`l;dB`WX=PW2IRn)Qe6YrjEILs1enNi3{M6J`UjBNau9Cd%&NVqBO#js zE!bqi((atq;JY|;OUBL{Hk)l2Klk*co2WE0pTmiG;GpSV^TC$;Xq5E=A`0+-q7^

Z8 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 diff --git a/Templates/BaseGame/game/data/ui/scripts/menuInputButtons.cs b/Templates/BaseGame/game/data/ui/scripts/menuInputButtons.cs index f802d2c88..a3e6320c8 100644 --- a/Templates/BaseGame/game/data/ui/scripts/menuInputButtons.cs +++ b/Templates/BaseGame/game/data/ui/scripts/menuInputButtons.cs @@ -1,40 +1,60 @@ -//------------------------------------------------------------------------------ -// global vars -//------------------------------------------------------------------------------ - -$BUTTON_A = 0; -$BUTTON_B = 1; -$BUTTON_X = 2; -$BUTTON_Y = 3; -$BUTTON_BACK = 4; -$BUTTON_START = 5; -$BUTTON_LTRIGGER = 6; -$BUTTON_RTRIGGER = 7; -$BUTTON_LSHOULDER = 8; -$BUTTON_RSHOULDER = 9; -$BUTTON_LSTICK = 10; -$BUTTON_RSTICK = 11; +//============================================================================== +// Menu Input Buttons +// This file manages the Menu Input Buttons stuff +// Any time you have a GUI button that should be clickable AND map to a key input +// such as a gamepad button, or enter, etc, this stuff can be used +//============================================================================== +/* +Gamepad input reference for 360 controller +btn_a = A +btn_b = B +btn_x = X +btn_y = Y +btn_r = Right Bumper +btn_l = Right Bumper +upov = Dpad Up +dpov = Dpad Down +lpov = Dpad Left +rpov = Dpad Right +xaxis = Left Stick | + values = up, - values = down +yaxis = Left Stick | + values = up, - values = down +rxaxis = Right Stick | + values = up, - values = down +ryaxis = Right Stick | + values = up, - values = down +zaxis = Left Trigger +rzaxis = Right Trigger +btn_start = Start +btn_back = Back/Select +*/ +/// This is used with the main UI menu lists, when a non-axis input event is called +/// such as pressing a button +/// It is called from the engine function UIMenuButtonList::onInputEvent(%this, %device, %action, %state) { if(%state) $activeMenuButtonContainer.processInputs(%device, %action); } +/// This is used with the main UI menu lists, when an axis input event is called +/// such as moving a joystick +/// It is called from the engine function UIMenuButtonList::onAxisEvent(%this, %device, %action, %axisVal) { + //Skip out of the value is too low as it could just be noise or miscalibrated defaults + if(%axisVal < 0.02) + return; + $activeMenuButtonContainer.processAxisEvent(%device, %action); } /// Sets the command and text for the specified button. If %text and %command /// are left empty, the button will be disabled and hidden. -/// Note: This command is not executed when the A button is pressed. That -/// command is executed directly from the GuiGameList___Ctrl. This command is -/// for the graphical hint and to allow a mouse equivalent. /// -/// \param %button (constant) The button to set. See: $BUTTON_A, _B, _X, _Y +/// \param %gamepadButton (string) The button to set for when using gamepad input. See the input map reference comment at the top of the file +/// \param %keyboardButton (string) The button to set for when using keyboard/mouse input. /// \param %text (string) The text to display next to the A button graphic. /// \param %command (string) The command executed when the A button is pressed. +/// \param %gamepadOnly (bool) If true, will only show the button when working in the gamepad input mode function MenuInputButton::set(%this, %gamepadButton, %keyboardButton, %text, %command, %gamepadOnly) { %set = (! ((%text $= "") && (%command $= ""))); @@ -53,13 +73,13 @@ function MenuInputButton::set(%this, %gamepadButton, %keyboardButton, %text, %co %this.Command = %command; } +/// Refreshes the specific button, updating it's visbility status and the displayed input image function MenuInputButton::refresh(%this) { - %set = (! ((%this.text $= "") && (%this.command $= ""))); //Special-case of where we're in keyboard+mouse mode, but the menubutton is gamepad only mode, so we early out - if(%this.gamepadOnly && $activeControllerName $= "K&M") + if(%this.gamepadOnly && $activeControllerType !$= "gamepad") %set = false; %this.setActive(%set); @@ -68,7 +88,7 @@ function MenuInputButton::refresh(%this) if(!%this.isActive()) return; - if($activeControllerName !$= "K&M") + if($activeControllerType $= "gamepad") { if(%this.gamepadButton !$= "") { @@ -77,53 +97,82 @@ function MenuInputButton::refresh(%this) { %path = "data/ui/images/inputs/PS4/PS4_"; - if(%this.gamepadButton $= "A") + if(%this.gamepadButton $= "btn_a") %path = %path @ "Cross"; - else if(%this.gamepadButton $= "B") + else if(%this.gamepadButton $= "btn_b") %path = %path @ "Circle"; - else if(%this.gamepadButton $= "X") + else if(%this.gamepadButton $= "btn_x") %path = %path @ "Square"; - else if(%this.gamepadButton $= "Y") + else if(%this.gamepadButton $= "btn_y") %path = %path @ "Triangle"; - else if(%this.gamepadButton $= "LB") + else if(%this.gamepadButton $= "btn_l") %path = %path @ "L1"; - else if(%this.gamepadButton $= "LT") + else if(%this.gamepadButton $= "zaxis") %path = %path @ "L2"; - else if(%this.gamepadButton $= "RB") + else if(%this.gamepadButton $= "btn_r") %path = %path @ "R1"; - else if(%this.gamepadButton $= "RT") + else if(%this.gamepadButton $= "rzaxis") %path = %path @ "R2"; - //else - // continue; + else if(%this.gamepadButton $= "btn_start") + %path = %path @ "Options"; + else if(%this.gamepadButton $= "btn_back") + %path = %path @ "Share"; + else + continue; } else if($activeControllerName $= "Nintendo Switch Pro Controller") { %path = "data/ui/images/inputs/Switch/Switch_"; - if(%this.gamepadButton $= "A") + if(%this.gamepadButton $= "btn_a") %path = %path @ "B"; - else if(%this.gamepadButton $= "B") + else if(%this.gamepadButton $= "btn_b") %path = %path @ "A"; - else if(%this.gamepadButton $= "X") + else if(%this.gamepadButton $= "btn_x") %path = %path @ "Y"; - else if(%this.gamepadButton $= "Y") + else if(%this.gamepadButton $= "btn_y") %path = %path @ "X"; - else if(%this.gamepadButton $= "LB") + else if(%this.gamepadButton $= "btn_l") %path = %path @ "LB"; - else if(%this.gamepadButton $= "LT") + else if(%this.gamepadButton $= "zaxis") %path = %path @ "LT"; - else if(%this.gamepadButton $= "RB") + else if(%this.gamepadButton $= "btn_r") %path = %path @ "RB"; - else if(%this.gamepadButton $= "RT") + else if(%this.gamepadButton $= "rzaxis") %path = %path @ "RT"; - //else - // continue; + else if(%this.gamepadButton $= "btn_start") + %path = %path @ "Plus"; + else if(%this.gamepadButton $= "btn_back") + %path = %path @ "Minus"; + else + continue; } else if($activeControllerName !$= "") { %path = "data/ui/images/inputs/Xbox/Xbox_"; - %path = %path @ %this.gamepadButton; + if(%this.gamepadButton $= "btn_a") + %path = %path @ "A"; + else if(%this.gamepadButton $= "btn_b") + %path = %path @ "B"; + else if(%this.gamepadButton $= "btn_x") + %path = %path @ "X"; + else if(%this.gamepadButton $= "btn_y") + %path = %path @ "Y"; + else if(%this.gamepadButton $= "btn_l") + %path = %path @ "LB"; + else if(%this.gamepadButton $= "zaxis") + %path = %path @ "LT"; + else if(%this.gamepadButton $= "btn_r") + %path = %path @ "RB"; + else if(%this.gamepadButton $= "rzaxis") + %path = %path @ "RT"; + else if(%this.gamepadButton $= "btn_start") + %path = %path @ "Menu"; + else if(%this.gamepadButton $= "btn_back") + %path = %path @ "Windows"; + else + continue; } } } @@ -140,6 +189,7 @@ function MenuInputButton::refresh(%this) return true; } +/// Refreshes a menu input container, updating the buttons inside it function MenuInputButtonContainer::refresh(%this) { %count = %this.getCount(); @@ -151,6 +201,8 @@ function MenuInputButtonContainer::refresh(%this) } } +/// Sets the given MenuInputButtonContainer as the active one. This directs input events +/// to it's buttons, ensures it's visible, and auto-hides the old active container if it was set function MenuInputButtonContainer::setActive(%this) { if(isObject($activeMenuButtonContainer)) @@ -161,6 +213,8 @@ function MenuInputButtonContainer::setActive(%this) $activeMenuButtonContainer.refresh(); } +/// Checks the input manager for if we have a gamepad active and gets it's name +/// If we have one, also sets the active input type to gamepad function MenuInputButtonContainer::checkGamepad(%this) { %controllerName = SDLInputManager::JoystickNameForIndex(0); @@ -168,101 +222,17 @@ function MenuInputButtonContainer::checkGamepad(%this) $activeControllerName = %controllerName; if($activeControllerName $= "") - $activeControllerName = "K&M"; + $activeControllerType = "K&M"; + else + $activeControllerType = "gamepad"; } -function MenuInputButtonContainer::refreshButtons(%this) -{ - //Set up our basic buttons - for(%i=0; %i < %this.getCount(); %i++) - { - %btn = %this.getObject(%i); - - %set = (! ((%btn.text $= "") && (%btn.command $= ""))); - - //Special-case of where we're in keyboard+mouse mode, but the menubutton is gamepad only mode, so we early out - if(%btn.gamepadOnly && $activeControllerName $= "K&M") - %set = false; - - %btn.setActive(%set); - %btn.setVisible(%set); - - if(!%btn.isActive()) - continue; - - if($activeControllerName !$= "K&M") - { - if(%btn.gamepadButton !$= "") - { - %path = ""; - if($activeControllerName $= "PS4 Controller") - { - %path = "data/ui/images/inputs/PS4/PS4_"; - - if(%btn.gamepadButton $= "A") - %path = %path @ "Cross"; - else if(%btn.gamepadButton $= "B") - %path = %path @ "Circle"; - else if(%btn.gamepadButton $= "X") - %path = %path @ "Square"; - else if(%btn.gamepadButton $= "Y") - %path = %path @ "Triangle"; - else if(%btn.gamepadButton $= "LB") - %path = %path @ "L1"; - else if(%btn.gamepadButton $= "LT") - %path = %path @ "L2"; - else if(%btn.gamepadButton $= "RB") - %path = %path @ "R1"; - else if(%btn.gamepadButton $= "RT") - %path = %path @ "R2"; - else - continue; - } - else if($activeControllerName $= "Nintendo Switch Pro Controller") - { - %path = "data/ui/images/inputs/Switch/Switch_"; - - if(%btn.gamepadButton $= "A") - %path = %path @ "B"; - else if(%btn.gamepadButton $= "B") - %path = %path @ "A"; - else if(%btn.gamepadButton $= "X") - %path = %path @ "Y"; - else if(%btn.gamepadButton $= "Y") - %path = %path @ "X"; - else if(%btn.gamepadButton $= "LB") - %path = %path @ "LB"; - else if(%btn.gamepadButton $= "LT") - %path = %path @ "LT"; - else if(%btn.gamepadButton $= "RB") - %path = %path @ "RB"; - else if(%btn.gamepadButton $= "RT") - %path = %path @ "RT"; - else - continue; - } - else if($activeControllerName !$= "") - { - %path = "data/ui/images/inputs/Xbox/Xbox_"; - - %path = %path @ %btn.gamepadButton; - } - } - } - else - { - if(%btn.keyboardButton !$= "") - { - %path = "data/ui/images/Inputs/Keyboard & Mouse/Keyboard_Black_" @ %btn.keyboardButton; - } - } - - %btn.setBitmap(%path); - } - - return true; -} - +/// This is called by the earlier inputs callback that comes from the menu list +/// this allows us to first check what the input type is, and if the device is different +/// (such as going from keyboard and mouse to gamepad) we can refresh the buttons to update +/// the display +/// Then we process the input to see if it matches to any of the button maps for our +/// MenuInputButtons. If we have a match, we execute it's command. function MenuInputButtonContainer::processInputs(%this, %device, %action) { //check to see if our status has changed @@ -270,25 +240,17 @@ function MenuInputButtonContainer::processInputs(%this, %device, %action) %oldDevice = $activeControllerName; - if(startsWith(%device, "Keyboard")) + %deviceName = stripTrailingNumber(%device); + + if(%deviceName $= "keyboard" || %deviceName $= "mouse") { - if($activeControllerName !$= %device) + if($activeControllerName !$= "K&M") %changed = true; $activeControllerName = "K&M"; + $activeControllerType = "K&M"; Canvas.showCursor(); } - else if(startsWith(%device, "Mouse")) - { - if(startsWith(%action, "button")) - { - if($activeControllerName !$= %device) - %changed = true; - - $activeControllerName = "K&M"; - Canvas.showCursor(); - } - } else { if(%this.checkGamepad()) @@ -296,7 +258,7 @@ function MenuInputButtonContainer::processInputs(%this, %device, %action) Canvas.hideCursor(); } - if($activeControllerName !$= %device) + if($activeControllerType !$= %oldDevice) %changed = true; } @@ -312,21 +274,8 @@ function MenuInputButtonContainer::processInputs(%this, %device, %action) if(!%btn.isActive()) continue; - if($activeControllerName !$= "K&M") + if($activeControllerType !$= "K&M") { - if(%action $= "btn_a") - %action = "A"; - else if(%action $= "btn_b") - %action = "B"; - else if(%action $= "btn_x") - %action = "X"; - else if(%action $= "btn_y") - %action = "Y"; - else if(%action $= "btn_r") - %action = "RB"; - else if(%action $= "btn_l") - %action = "LB"; - if(%btn.gamepadButton $= %action) { eval(%btn.command); @@ -334,11 +283,6 @@ function MenuInputButtonContainer::processInputs(%this, %device, %action) } else { - if(%action $= "return") - %action = "enter"; - else if(%action $= "escape") - %action = "esc"; - if(%btn.keyboardButton $= %action) { eval(%btn.command); @@ -347,22 +291,27 @@ function MenuInputButtonContainer::processInputs(%this, %device, %action) } } +/// This is called by the earlier inputs callback that comes from the menu list +/// this allows us to first check what the input type is, and if the device is different +/// (such as going from keyboard and mouse to gamepad) we can refresh the buttons to update +/// the display function MenuInputButtonContainer::processAxisEvent(%this, %device, %action, %axisVal) { + //check to see if our status has changed %changed = false; %oldDevice = $activeControllerName; - if(startsWith(%device, "Mouse")) + %deviceName = stripTrailingNumber(%device); + + if(%deviceName $= "mouse") { - if(startsWith(%action, "button")) - { - if($activeControllerName !$= %device) - %changed = true; - - $activeControllerName = "K&M"; - Canvas.showCursor(); - } + if($activeControllerName !$= "K&M") + %changed = true; + + $activeControllerName = "K&M"; + $activeControllerType = "K&M"; + Canvas.showCursor(); } else { @@ -371,13 +320,14 @@ function MenuInputButtonContainer::processAxisEvent(%this, %device, %action, %ax Canvas.hideCursor(); } - if($activeControllerName !$= %device) + if($activeControllerType !$= %oldDevice) %changed = true; } if(%changed) %this.refresh(); } + // // function onSDLDeviceConnected(%sdlIndex, %deviceName, %deviceType) diff --git a/Templates/BaseGame/game/data/ui/scripts/messageBoxes.cs b/Templates/BaseGame/game/data/ui/scripts/messageBoxes.cs index 7e3233e1a..024dd4132 100644 --- a/Templates/BaseGame/game/data/ui/scripts/messageBoxes.cs +++ b/Templates/BaseGame/game/data/ui/scripts/messageBoxes.cs @@ -97,15 +97,13 @@ function MessageBoxOK(%title, %message, %callback) Canvas.pushDialog(MessageBoxDlg); MessageBoxTitleText.text = %title; - MessageBoxButtonHolder-->OKButton.set("A", "Enter", "OK", "MessageCallback(MessageBoxDlg,MessageBoxDlg.callback);"); + MessageBoxOCButtonHolder.hidden = true; + MessageBoxYNCButtonHolder.hidden = true; + MessageBoxOKButtonHolder.hidden = false; - MessageBoxButtonHolder.setActive(); + MessageBoxOKButtonHolder-->OKButton.set("btn_a", "Return", "OK", "MessageCallback(MessageBoxDlg,MessageBoxDlg.callback);"); - MessageBoxButtonHolder-->oc_OKButton.hidden = true; - MessageBoxButtonHolder-->oc_CancelButton.hidden = true; - MessageBoxButtonHolder-->ync_yesButton.hidden = true; - MessageBoxButtonHolder-->ync_noButton.hidden = true; - MessageBoxButtonHolder-->ync_CancelButton.hidden = true; + MessageBoxOKButtonHolder.setActive(); MBSetText(MessageBoxText, MessageBoxCtrl, %message); MessageBoxDlg.callback = %callback; @@ -121,15 +119,14 @@ function MessageBoxOKCancel(%title, %message, %callback, %cancelCallback) Canvas.pushDialog(MessageBoxDlg); MessageBoxTitleText.text = %title; - MessageBoxButtonHolder-->oc_OKButton.set("A", "Enter", "OK", "MessageCallback(MessageBoxDlg,MessageBoxDlg.callback);"); - MessageBoxButtonHolder-->oc_CancelButton.set("B", "Esc", "Cancel", "MessageCallback(MessageBoxDlg,MessageBoxDlg.cancelCallback);"); - - MessageBoxButtonHolder.setActive(); + MessageBoxOCButtonHolder.hidden = false; + MessageBoxYNCButtonHolder.hidden = true; + MessageBoxOKButtonHolder.hidden = true; - MessageBoxButtonHolder-->OKButton.hidden = true; - MessageBoxButtonHolder-->ync_yesButton.hidden = true; - MessageBoxButtonHolder-->ync_noButton.hidden = true; - MessageBoxButtonHolder-->ync_CancelButton.hidden = true; + MessageBoxOCButtonHolder-->OKButton.set("btn_a", "Return", "OK", "MessageCallback(MessageBoxDlg,MessageBoxDlg.callback);"); + MessageBoxOCButtonHolder-->CancelButton.set("btn_b", "Escape", "Cancel", "MessageCallback(MessageBoxDlg,MessageBoxDlg.cancelCallback);"); + + MessageBoxOCButtonHolder.setActive(); MBSetText(MessageBoxText, MessageBoxCtrl, %message); MessageBoxDlg.callback = %callback; @@ -217,15 +214,14 @@ function MessageBoxYesNo(%title, %message, %yesCallback, %noCallback) Canvas.pushDialog(MessageBoxDlg); MessageBoxTitleText.text = %title; - MessageBoxButtonHolder-->oc_OKButton.set("A", "Enter", "Yes", "MessageCallback(MessageBoxDlg,MessageBoxDlg.yesCallBack);"); - MessageBoxButtonHolder-->oc_CancelButton.set("B", "Esc", "No", "MessageCallback(MessageBoxDlg,MessageBoxDlg.noCallback);"); + MessageBoxOCButtonHolder.hidden = false; + MessageBoxYNCButtonHolder.hidden = true; + MessageBoxOKButtonHolder.hidden = true; - MessageBoxButtonHolder.setActive(); + MessageBoxOCButtonHolder-->OKButton.set("btn_a", "Return", "Yes", "MessageCallback(MessageBoxDlg,MessageBoxDlg.yesCallBack);"); + MessageBoxOCButtonHolder-->CancelButton.set("btn_b", "Escape", "No", "MessageCallback(MessageBoxDlg,MessageBoxDlg.noCallback);"); - MessageBoxButtonHolder-->OKButton.hidden = true; - MessageBoxButtonHolder-->ync_yesButton.hidden = true; - MessageBoxButtonHolder-->ync_noButton.hidden = true; - MessageBoxButtonHolder-->ync_CancelButton.hidden = true; + MessageBoxOCButtonHolder.setActive(); MBSetText(MessageBoxText, MessageBoxCtrl, %message); MessageBoxDlg.yesCallBack = %yesCallback; @@ -237,15 +233,15 @@ function MessageBoxYesNoCancel(%title, %message, %yesCallback, %noCallback, %can Canvas.pushDialog(MessageBoxDlg); MessageBoxTitleText.text = %title; - MessageBoxButtonHolder-->ync_yesButton.set("A", "Enter", "Yes", "MessageCallback(MessageBoxDlg,MessageBoxDlg.yesCallBack);"); - MessageBoxButtonHolder-->ync_noButton.set("X", "Backspace", "No", "MessageCallback(MessageBoxDlg,MessageBoxDlg.noCallback);"); - MessageBoxButtonHolder-->ync_cancelButton.set("B", "Esc", "No", "MessageCallback(MessageBoxDlg,MessageBoxDlg.cancelCallback);"); + MessageBoxOCButtonHolder.hidden = true; + MessageBoxYNCButtonHolder.hidden = false; + MessageBoxOKButtonHolder.hidden = true; - MessageBoxButtonHolder.setActive(); + MessageBoxYNCButtonHolder-->yesButton.set("btn_a", "Return", "Yes", "MessageCallback(MessageBoxDlg,MessageBoxDlg.yesCallBack);"); + MessageBoxYNCButtonHolder-->noButton.set("btn_x", "backspace", "No", "MessageCallback(MessageBoxDlg,MessageBoxDlg.noCallback);"); + MessageBoxYNCButtonHolder-->cancelButton.set("btn_b", "Escape", "No", "MessageCallback(MessageBoxDlg,MessageBoxDlg.cancelCallback);"); - MessageBoxButtonHolder-->OKButton.hidden = true; - MessageBoxButtonHolder-->oc_OKButton.hidden = true; - MessageBoxButtonHolder-->oc_CancelButton.hidden = true; + MessageBoxYNCButtonHolder.setActive(); MBSetText(MessageBoxText, MessageBoxCtrl, %message); MessageBoxDlg.yesCallBack = %yesCallback;