From eb458574224dccc29cbb6316d8166cf409d32354 Mon Sep 17 00:00:00 2001 From: Nicholas Calaway Date: Mon, 10 Oct 2022 12:30:58 -0400 Subject: [PATCH] Gamepad icons (#5357) --- CMake/Assets.cmake | 2 + Packaging/resources/assets/fonts/12-e0.bin | Bin 0 -> 256 bytes Packaging/resources/assets/fonts/12-e0.clx | Bin 0 -> 16760 bytes Source/controls/controller_buttons.h | 110 +++++++++++++++++++++ Source/items.cpp | 23 +++-- 5 files changed, 123 insertions(+), 12 deletions(-) create mode 100644 Packaging/resources/assets/fonts/12-e0.bin create mode 100644 Packaging/resources/assets/fonts/12-e0.clx diff --git a/CMake/Assets.cmake b/CMake/Assets.cmake index 7c6227ee1..b1c9b1441 100644 --- a/CMake/Assets.cmake +++ b/CMake/Assets.cmake @@ -76,6 +76,8 @@ set(devilutionx_assets fonts/12-20.bin fonts/12-20.clx fonts/12-26.clx + fonts/12-e0.clx + fonts/12-e0.bin fonts/22-00.bin fonts/22-00.clx fonts/22-01.bin diff --git a/Packaging/resources/assets/fonts/12-e0.bin b/Packaging/resources/assets/fonts/12-e0.bin new file mode 100644 index 0000000000000000000000000000000000000000..688e324cf061131a9db7421c820a2b0317e32a63 GIT binary patch literal 256 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 literal 0 HcmV?d00001 diff --git a/Source/controls/controller_buttons.h b/Source/controls/controller_buttons.h index 32cf84ec6..76cc663f6 100644 --- a/Source/controls/controller_buttons.h +++ b/Source/controls/controller_buttons.h @@ -2,6 +2,7 @@ // Unifies joystick, gamepad, and keyboard controller APIs. #include +#include namespace devilution { @@ -36,4 +37,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 devilution diff --git a/Source/items.cpp b/Source/items.cpp index b2ab64896..2af5060df 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -1745,8 +1745,7 @@ void printItemMiscKBM(const Item &item, const bool isOil, const bool isCastOnTar PrintItemOil(item._iMiscId); AddPanelString(_("Right-click to use")); } else if (isCastOnTarget) { - AddPanelString(_("Right-click to read, then")); - AddPanelString(_("left-click to target")); + AddPanelString(_("Right-click to read, then\nleft-click to target")); } else if (IsAnyOf(item._iMiscId, IMISC_BOOK, IMISC_NOTE, IMISC_SCROLL, IMISC_SCROLLT)) { AddPanelString(_("Right-click to read")); } @@ -1764,27 +1763,27 @@ void printItemMiscVirtualGamepad(const Item &item, const bool isOil, bool isCast AddPanelString(_("Activate to use")); } } else if (isCastOnTarget) { - AddPanelString(_("Select from spell book, then")); - AddPanelString(_("cast to read")); - } else if (IsAnyOf(item._iMiscId, IMISC_BOOK, IMISC_NOTE, IMISC_SCROLL, IMISC_SCROLLT)) { + AddPanelString(_("Select from spell book, then\ncast to read")); + } else { 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 = "Y"; - castButton = "X"; + activateButton = Xbox_Y; + castButton = Xbox_X; } else if (GamepadType == GamepadLayout::PlayStation) { - activateButton = "Triangle"; - castButton = "Square"; + activateButton = Playstation_Triangle; + castButton = Playstation_Square; } else if (GamepadType == GamepadLayout::Nintendo) { - activateButton = "Y"; - castButton = "X"; + activateButton = Nintendo_Y; + castButton = Nintendo_X; } if (item._iMiscId == IMISC_MAPOFDOOM) { @@ -1797,7 +1796,7 @@ void printItemMiscGamepad(const Item &item, bool isOil, bool isCastOnTarget) AddPanelString(fmt::format(fmt::runtime(_("{} to use")), activateButton)); } } else if (isCastOnTarget) { - AddPanelString(fmt::format(fmt::runtime(_("Select from spell book, then {} to read")), castButton)); + AddPanelString(fmt::format(fmt::runtime(_("Select from spell book,\nthen {} to read")), castButton)); } else if (IsAnyOf(item._iMiscId, IMISC_BOOK, IMISC_NOTE, IMISC_SCROLL, IMISC_SCROLLT)) { AddPanelString(fmt::format(fmt::runtime(_("{} to read")), activateButton)); }