From 6150973c1b109d8a0477fedd9fff73ecd0155554 Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Tue, 11 Oct 2022 09:22:03 +0900 Subject: [PATCH] Clean up gamepad icons code 1. Correctly defined button strings. 2. Clean up the printing code. 3. Use translatable strings for the generic gamepad type. --- Source/CMakeLists.txt | 1 + Source/controls/controller_buttons.cpp | 113 +++++++++++++ Source/controls/controller_buttons.h | 221 +++++++++++++------------ Source/items.cpp | 49 +++--- 4 files changed, 255 insertions(+), 129 deletions(-) create mode 100644 Source/controls/controller_buttons.cpp diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 9dd84eff2..739a783c2 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -59,6 +59,7 @@ set(libdevilutionx_SRCS controls/axis_direction.cpp controls/controller.cpp + controls/controller_buttons.cpp controls/controller_motion.cpp controls/devices/joystick.cpp controls/devices/kbcontroller.cpp diff --git a/Source/controls/controller_buttons.cpp b/Source/controls/controller_buttons.cpp new file mode 100644 index 000000000..69299ee70 --- /dev/null +++ b/Source/controls/controller_buttons.cpp @@ -0,0 +1,113 @@ +#include "controller_buttons.h" + +namespace devilution { +namespace controller_button_icon { +const string_view Playstation_Triangle = "\uE000"; +const string_view Playstation_Square = "\uE001"; +const string_view Playstation_X = "\uE002"; +const string_view Playstation_Circle = "\uE003"; +const string_view Playstation_Options = "\uE004"; +const string_view Playstation_Share = "\uE005"; +const string_view Playstation_L2 = "\uE006"; +const string_view Playstation_R2 = "\uE007"; +const string_view Playstation_L1 = "\uE008"; +const string_view Playstation_R1 = "\uE009"; +const string_view Playstation_DPad_Up = "\uE00A"; +const string_view Playstation_DPad_Right = "\uE00B"; +const string_view Playstation_DPad_Down = "\uE00C"; +const string_view Playstation_DPad_Left = "\uE00D"; +const string_view Playstation_LStick_NW = "\uE00E"; +const string_view Playstation_LStick_W = "\uE00F"; +const string_view Playstation_LStick_SW = "\uE010"; +const string_view Playstation_LStick_N = "\uE011"; +const string_view Playstation_LStick = "\uE012"; +const string_view Playstation_LStick_S = "\uE013"; +const string_view Playstation_LStick_NE = "\uE014"; +const string_view Playstation_LStick_E = "\uE015"; +const string_view Playstation_LStick_SE = "\uE016"; +const string_view Playstation_L3 = "\uE017"; +const string_view Playstation_RStick_NW = "\uE018"; +const string_view Playstation_RStick_W = "\uE019"; +const string_view Playstation_RStick_SW = "\uE01A"; +const string_view Playstation_RStick_N = "\uE01B"; +const string_view Playstation_RStick = "\uE01C"; +const string_view Playstation_RStick_S = "\uE01D"; +const string_view Playstation_RStick_NE = "\uE01E"; +const string_view Playstation_RStick_E = "\uE01F"; +const string_view Playstation_RStick_SE = "\uE020"; +const string_view Playstation_R3 = "\uE021"; +const string_view Playstation_Touchpad = "\uE022"; +const string_view Nintendo_X = "\uE023"; +const string_view Nintendo_Y = "\uE024"; +const string_view Nintendo_B = "\uE025"; +const string_view Nintendo_A = "\uE026"; +const string_view Nintendo_Plus = "\uE027"; +const string_view Nintendo_Minus = "\uE028"; +const string_view Nintendo_ZL = "\uE029"; +const string_view Nintendo_ZR = "\uE02A"; +const string_view Nintendo_L = "\uE02B"; +const string_view Nintendo_R = "\uE02C"; +const string_view Nintendo_DPad_Up = "\uE02D"; +const string_view Nintendo_DPad_Right = "\uE02E"; +const string_view Nintendo_DPad_Down = "\uE02F"; +const string_view Nintendo_DPad_Left = "\uE030"; +const string_view Nintendo_LStick_NW = "\uE031"; +const string_view Nintendo_LStick_W = "\uE032"; +const string_view Nintendo_LStick_SW = "\uE033"; +const string_view Nintendo_LStick_N = "\uE034"; +const string_view Nintendo_LStick = "\uE035"; +const string_view Nintendoo_LStick_S = "\uE036"; +const string_view Nintendo_LStick_NE = "\uE037"; +const string_view Nintendo_LStick_E = "\uE038"; +const string_view Nintendo_LStick_SE = "\uE039"; +const string_view Nintendo_LStick_Click = "\uE03A"; +const string_view Nintendo_RStick_NW = "\uE03B"; +const string_view Nintendo_RStick_W = "\uE03C"; +const string_view Nintendo_RStick_SW = "\uE03D"; +const string_view Nintendo_RStick_N = "\uE03E"; +const string_view Nintendo_RStick = "\uE03F"; +const string_view Nintendo_RStick_S = "\uE040"; +const string_view Nintendo_RStick_NE = "\uE041"; +const string_view Nintendo_RStick_E = "\uE042"; +const string_view Nintendo_RStick_SE = "\uE043"; +const string_view Nintendo_RStick_Click = "\uE044"; +const string_view Nintendo_Home = "\uE045"; +const string_view Nintendo_Screenshot = "\uE046"; +const string_view Nintendo_SL = "\uE047"; +const string_view Nintendo_SR = "\uE048"; +const string_view Xbox_Y = "\uE049"; +const string_view Xbox_X = "\uE04A"; +const string_view Xbox_A = "\uE04B"; +const string_view Xbox_B = "\uE04C"; +const string_view Xbox_Menu = "\uE04D"; +const string_view Xbox_View = "\uE04E"; +const string_view Xbox_LT = "\uE04F"; +const string_view Xbox_RT = "\uE050"; +const string_view Xbox_LB = "\uE051"; +const string_view Xbox_RB = "\uE052"; +const string_view Xbox_DPad_Up = "\uE053"; +const string_view Xbox_Dpad_Right = "\uE054"; +const string_view Xbox_Dpad_Down = "\uE055"; +const string_view Xbox_Dpad_Left = "\uE056"; +const string_view Xbox_LStick_NW = "\uE057"; +const string_view Xbox_LStick_W = "\uE058"; +const string_view Xbox_LStick_SW = "\uE059"; +const string_view Xbox_LStick_N = "\uE05A"; +const string_view Xbox_LStick = "\uE05B"; +const string_view Xbox_LStick_NE = "\uE05C"; +const string_view Xbox_LStick_E = "\uE05D"; +const string_view Xbox_LStick_SE = "\uE05E"; +const string_view Xbox_LStick_Click = "\uE05F"; +const string_view Xbox_RStick_NW = "\uE060"; +const string_view Xbox_RStick_W = "\uE061"; +const string_view Xbox_RStick_SW = "\uE062"; +const string_view Xbox_RStick_N = "\uE063"; +const string_view Xbox_RStick = "\uE064"; +const string_view Xbox_RStick_S = "\uE065"; +const string_view Xbox_RStick_NE = "\uE066"; +const string_view Xbox_RStick_E = "\uE067"; +const string_view Xbox_RStick_SE = "\uE068"; +const string_view Xbox_RStick_Click = "\uE069"; +const string_view Xbox_Xbox = "\uE06A"; +} // namespace controller_button_icon +} // namespace devilution diff --git a/Source/controls/controller_buttons.h b/Source/controls/controller_buttons.h index 76cc663f6..0309bd8ff 100644 --- a/Source/controls/controller_buttons.h +++ b/Source/controls/controller_buttons.h @@ -2,7 +2,8 @@ // Unifies joystick, gamepad, and keyboard controller APIs. #include -#include + +#include "utils/stdcompat/string_view.hpp" namespace devilution { @@ -37,113 +38,113 @@ inline bool IsDPadButton(ControllerButton button) || button == ControllerButton_BUTTON_DPAD_RIGHT; } -namespace controllerButtonIcon { -const std::string Playstation_Triangle = "\uE000"; -const std::string Playstation_Square = "\uE001"; -const std::string Playstation_X = "\uE002"; -const std::string Playstation_Circle = "\uE003"; -const std::string Playstation_Options = "\uE004"; -const std::string Playstation_Share = "\uE005"; -const std::string Playstation_L2 = "\uE006"; -const std::string Playstation_R2 = "\uE007"; -const std::string Playstation_L1 = "\uE008"; -const std::string Playstation_R1 = "\uE009"; -const std::string Playstation_DPad_Up = "\uE00A"; -const std::string Playstation_DPad_Right = "\uE00B"; -const std::string Playstation_DPad_Down = "\uE00C"; -const std::string Playstation_DPad_Left = "\uE00D"; -const std::string Playstation_LStick_NW = "\uE00E"; -const std::string Playstation_LStick_W = "\uE00F"; -const std::string Playstation_LStick_SW = "\uE010"; -const std::string Playstation_LStick_N = "\uE011"; -const std::string Playstation_LStick = "\uE012"; -const std::string Playstation_LStick_S = "\uE013"; -const std::string Playstation_LStick_NE = "\uE014"; -const std::string Playstation_LStick_E = "\uE015"; -const std::string Playstation_LStick_SE = "\uE016"; -const std::string Playstation_L3 = "\uE017"; -const std::string Playstation_RStick_NW = "\uE018"; -const std::string Playstation_RStick_W = "\uE019"; -const std::string Playstation_RStick_SW = "\uE01A"; -const std::string Playstation_RStick_N = "\uE01B"; -const std::string Playstation_RStick = "\uE01C"; -const std::string Playstation_RStick_S = "\uE01D"; -const std::string Playstation_RStick_NE = "\uE01E"; -const std::string Playstation_RStick_E = "\uE01F"; -const std::string Playstation_RStick_SE = "\uE020"; -const std::string Playstation_R3 = "\uE021"; -const std::string Playstation_Touchpad = "\uE022"; -const std::string Nintendo_X = "\uE023"; -const std::string Nintendo_Y = "\uE024"; -const std::string Nintendo_B = "\uE025"; -const std::string Nintendo_A = "\uE026"; -const std::string Nintendo_Plus = "\uE027"; -const std::string Nintendo_Minus = "\uE028"; -const std::string Nintendo_ZL = "\uE029"; -const std::string Nintendo_ZR = "\uE02A"; -const std::string Nintendo_L = "\uE02B"; -const std::string Nintendo_R = "\uE02C"; -const std::string Nintendo_DPad_Up = "\uE02D"; -const std::string Nintendo_DPad_Right = "\uE02E"; -const std::string Nintendo_DPad_Down = "\uE02F"; -const std::string Nintendo_DPad_Left = "\uE030"; -const std::string Nintendo_LStick_NW = "\uE031"; -const std::string Nintendo_LStick_W = "\uE032"; -const std::string Nintendo_LStick_SW = "\uE033"; -const std::string Nintendo_LStick_N = "\uE034"; -const std::string Nintendo_LStick = "\uE035"; -const std::string Nintendoo_LStick_S = "\uE036"; -const std::string Nintendo_LStick_NE = "\uE037"; -const std::string Nintendo_LStick_E = "\uE038"; -const std::string Nintendo_LStick_SE = "\uE039"; -const std::string Nintendo_LStick_Click = "\uE03A"; -const std::string Nintendo_RStick_NW = "\uE03B"; -const std::string Nintendo_RStick_W = "\uE03C"; -const std::string Nintendo_RStick_SW = "\uE03D"; -const std::string Nintendo_RStick_N = "\uE03E"; -const std::string Nintendo_RStick = "\uE03F"; -const std::string Nintendo_RStick_S = "\uE040"; -const std::string Nintendo_RStick_NE = "\uE041"; -const std::string Nintendo_RStick_E = "\uE042"; -const std::string Nintendo_RStick_SE = "\uE043"; -const std::string Nintendo_RStick_Click = "\uE044"; -const std::string Nintendo_Home = "\uE045"; -const std::string Nintendo_Screenshot = "\uE046"; -const std::string Nintendo_SL = "\uE047"; -const std::string Nintendo_SR = "\uE048"; -const std::string Xbox_Y = "\uE049"; -const std::string Xbox_X = "\uE04A"; -const std::string Xbox_A = "\uE04B"; -const std::string Xbox_B = "\uE04C"; -const std::string Xbox_Menu = "\uE04D"; -const std::string Xbox_View = "\uE04E"; -const std::string Xbox_LT = "\uE04F"; -const std::string Xbox_RT = "\uE050"; -const std::string Xbox_LB = "\uE051"; -const std::string Xbox_RB = "\uE052"; -const std::string Xbox_DPad_Up = "\uE053"; -const std::string Xbox_Dpad_Right = "\uE054"; -const std::string Xbox_Dpad_Down = "\uE055"; -const std::string Xbox_Dpad_Left = "\uE056"; -const std::string Xbox_LStick_NW = "\uE057"; -const std::string Xbox_LStick_W = "\uE058"; -const std::string Xbox_LStick_SW = "\uE059"; -const std::string Xbox_LStick_N = "\uE05A"; -const std::string Xbox_LStick = "\uE05B"; -const std::string Xbox_LStick_NE = "\uE05C"; -const std::string Xbox_LStick_E = "\uE05D"; -const std::string Xbox_LStick_SE = "\uE05E"; -const std::string Xbox_LStick_Click = "\uE05F"; -const std::string Xbox_RStick_NW = "\uE060"; -const std::string Xbox_RStick_W = "\uE061"; -const std::string Xbox_RStick_SW = "\uE062"; -const std::string Xbox_RStick_N = "\uE063"; -const std::string Xbox_RStick = "\uE064"; -const std::string Xbox_RStick_S = "\uE065"; -const std::string Xbox_RStick_NE = "\uE066"; -const std::string Xbox_RStick_E = "\uE067"; -const std::string Xbox_RStick_SE = "\uE068"; -const std::string Xbox_RStick_Click = "\uE069"; -const std::string Xbox_Xbox = "\uE06A"; -} // namespace controllerButtonIcon +namespace controller_button_icon { +extern const string_view Playstation_Triangle; +extern const string_view Playstation_Square; +extern const string_view Playstation_X; +extern const string_view Playstation_Circle; +extern const string_view Playstation_Options; +extern const string_view Playstation_Share; +extern const string_view Playstation_L2; +extern const string_view Playstation_R2; +extern const string_view Playstation_L1; +extern const string_view Playstation_R1; +extern const string_view Playstation_DPad_Up; +extern const string_view Playstation_DPad_Right; +extern const string_view Playstation_DPad_Down; +extern const string_view Playstation_DPad_Left; +extern const string_view Playstation_LStick_NW; +extern const string_view Playstation_LStick_W; +extern const string_view Playstation_LStick_SW; +extern const string_view Playstation_LStick_N; +extern const string_view Playstation_LStick; +extern const string_view Playstation_LStick_S; +extern const string_view Playstation_LStick_NE; +extern const string_view Playstation_LStick_E; +extern const string_view Playstation_LStick_SE; +extern const string_view Playstation_L3; +extern const string_view Playstation_RStick_NW; +extern const string_view Playstation_RStick_W; +extern const string_view Playstation_RStick_SW; +extern const string_view Playstation_RStick_N; +extern const string_view Playstation_RStick; +extern const string_view Playstation_RStick_S; +extern const string_view Playstation_RStick_NE; +extern const string_view Playstation_RStick_E; +extern const string_view Playstation_RStick_SE; +extern const string_view Playstation_R3; +extern const string_view Playstation_Touchpad; +extern const string_view Nintendo_X; +extern const string_view Nintendo_Y; +extern const string_view Nintendo_B; +extern const string_view Nintendo_A; +extern const string_view Nintendo_Plus; +extern const string_view Nintendo_Minus; +extern const string_view Nintendo_ZL; +extern const string_view Nintendo_ZR; +extern const string_view Nintendo_L; +extern const string_view Nintendo_R; +extern const string_view Nintendo_DPad_Up; +extern const string_view Nintendo_DPad_Right; +extern const string_view Nintendo_DPad_Down; +extern const string_view Nintendo_DPad_Left; +extern const string_view Nintendo_LStick_NW; +extern const string_view Nintendo_LStick_W; +extern const string_view Nintendo_LStick_SW; +extern const string_view Nintendo_LStick_N; +extern const string_view Nintendo_LStick; +extern const string_view Nintendoo_LStick_S; +extern const string_view Nintendo_LStick_NE; +extern const string_view Nintendo_LStick_E; +extern const string_view Nintendo_LStick_SE; +extern const string_view Nintendo_LStick_Click; +extern const string_view Nintendo_RStick_NW; +extern const string_view Nintendo_RStick_W; +extern const string_view Nintendo_RStick_SW; +extern const string_view Nintendo_RStick_N; +extern const string_view Nintendo_RStick; +extern const string_view Nintendo_RStick_S; +extern const string_view Nintendo_RStick_NE; +extern const string_view Nintendo_RStick_E; +extern const string_view Nintendo_RStick_SE; +extern const string_view Nintendo_RStick_Click; +extern const string_view Nintendo_Home; +extern const string_view Nintendo_Screenshot; +extern const string_view Nintendo_SL; +extern const string_view Nintendo_SR; +extern const string_view Xbox_Y; +extern const string_view Xbox_X; +extern const string_view Xbox_A; +extern const string_view Xbox_B; +extern const string_view Xbox_Menu; +extern const string_view Xbox_View; +extern const string_view Xbox_LT; +extern const string_view Xbox_RT; +extern const string_view Xbox_LB; +extern const string_view Xbox_RB; +extern const string_view Xbox_DPad_Up; +extern const string_view Xbox_Dpad_Right; +extern const string_view Xbox_Dpad_Down; +extern const string_view Xbox_Dpad_Left; +extern const string_view Xbox_LStick_NW; +extern const string_view Xbox_LStick_W; +extern const string_view Xbox_LStick_SW; +extern const string_view Xbox_LStick_N; +extern const string_view Xbox_LStick; +extern const string_view Xbox_LStick_NE; +extern const string_view Xbox_LStick_E; +extern const string_view Xbox_LStick_SE; +extern const string_view Xbox_LStick_Click; +extern const string_view Xbox_RStick_NW; +extern const string_view Xbox_RStick_W; +extern const string_view Xbox_RStick_SW; +extern const string_view Xbox_RStick_N; +extern const string_view Xbox_RStick; +extern const string_view Xbox_RStick_S; +extern const string_view Xbox_RStick_NE; +extern const string_view Xbox_RStick_E; +extern const string_view Xbox_RStick_SE; +extern const string_view Xbox_RStick_Click; +extern const string_view Xbox_Xbox; +} // namespace controller_button_icon } // namespace devilution diff --git a/Source/items.cpp b/Source/items.cpp index 2af5060df..0877b60c7 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -1751,7 +1751,7 @@ void printItemMiscKBM(const Item &item, const bool isOil, const bool isCastOnTar } } -void printItemMiscVirtualGamepad(const Item &item, const bool isOil, bool isCastOnTarget) +void printItemMiscGenericGamepad(const Item &item, const bool isOil, bool isCastOnTarget) { if (item._iMiscId == IMISC_MAPOFDOOM) { AddPanelString(_("Activate to view")); @@ -1764,26 +1764,31 @@ void printItemMiscVirtualGamepad(const Item &item, const bool isOil, bool isCast } } else if (isCastOnTarget) { AddPanelString(_("Select from spell book, then\ncast to read")); - } else { + } else if (IsAnyOf(item._iMiscId, IMISC_BOOK, IMISC_NOTE, IMISC_SCROLL, IMISC_SCROLLT)) { AddPanelString(_("Activate to read")); } } void printItemMiscGamepad(const Item &item, bool isOil, bool isCastOnTarget) { - using namespace controllerButtonIcon; - std::string activateButton = "Activate"; - std::string castButton = "Cast"; - - if (GamepadType == GamepadLayout::Xbox) { - activateButton = Xbox_Y; - castButton = Xbox_X; - } else if (GamepadType == GamepadLayout::PlayStation) { - activateButton = Playstation_Triangle; - castButton = Playstation_Square; - } else if (GamepadType == GamepadLayout::Nintendo) { - activateButton = Nintendo_Y; - castButton = Nintendo_X; + string_view activateButton; + string_view castButton; + switch (GamepadType) { + case GamepadLayout::Generic: + printItemMiscGenericGamepad(item, isOil, isCastOnTarget); + return; + case GamepadLayout::Xbox: + activateButton = controller_button_icon::Xbox_Y; + castButton = controller_button_icon::Xbox_X; + break; + case GamepadLayout::PlayStation: + activateButton = controller_button_icon::Playstation_Triangle; + castButton = controller_button_icon::Playstation_Square; + break; + case GamepadLayout::Nintendo: + activateButton = controller_button_icon::Nintendo_Y; + castButton = controller_button_icon::Nintendo_X; + break; } if (item._iMiscId == IMISC_MAPOFDOOM) { @@ -1818,12 +1823,18 @@ void PrintItemMisc(const Item &item) const bool isCastOnTarget = (item._iMiscId == IMISC_SCROLLT && item._iSpell != SPL_FLASH) || (item._iMiscId == IMISC_SCROLL && IsAnyOf(item._iSpell, SPL_TOWN, SPL_IDENTIFY)); - if (ControlMode == ControlTypes::KeyboardAndMouse) { + switch (ControlMode) { + case ControlTypes::None: + break; + case ControlTypes::KeyboardAndMouse: printItemMiscKBM(item, isOil, isCastOnTarget); - } else if (ControlMode == ControlTypes::VirtualGamepad) { - printItemMiscVirtualGamepad(item, isOil, isCastOnTarget); - } else { + break; + case ControlTypes::VirtualGamepad: + printItemMiscGenericGamepad(item, isOil, isCastOnTarget); + break; + case ControlTypes::Gamepad: printItemMiscGamepad(item, isOil, isCastOnTarget); + break; } }