diff --git a/UnleashedRecomp/CMakeLists.txt b/UnleashedRecomp/CMakeLists.txt index 23c75bb..1ad1855 100644 --- a/UnleashedRecomp/CMakeLists.txt +++ b/UnleashedRecomp/CMakeLists.txt @@ -329,12 +329,11 @@ BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/bc_diff/b BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/font/im_font_atlas.bin" DEST_FILE "${RESOURCES_OUTPUT_PATH}/font/im_font_atlas.bin" ARRAY_NAME "g_im_font_atlas" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/font/im_font_atlas.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/font/im_font_atlas.dds" ARRAY_NAME "g_im_font_atlas_texture" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/achievements_menu/trophy.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/achievements_menu/trophy.dds" ARRAY_NAME "g_trophy" COMPRESSION_TYPE "zstd") +BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/common/controller.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/common/controller.dds" ARRAY_NAME "g_controller" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/common/general_window.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/common/general_window.dds" ARRAY_NAME "g_general_window" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/common/kbm.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/common/kbm.dds" ARRAY_NAME "g_kbm" COMPRESSION_TYPE "zstd") -BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/common/mat_comon_x360_001.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/common/mat_comon_x360_001.dds" ARRAY_NAME "g_mat_comon_x360_001" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/common/select_fade.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/common/select_fade.dds" ARRAY_NAME "g_select_fade" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/common/select_fill.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/common/select_fill.dds" ARRAY_NAME "g_select_fill" COMPRESSION_TYPE "zstd") -BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/common/start_back.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/common/start_back.dds" ARRAY_NAME "g_start_back" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/game_icon.bmp" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/game_icon.bmp" ARRAY_NAME "g_game_icon") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/game_icon_night.bmp" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/game_icon_night.bmp" ARRAY_NAME "g_game_icon_night") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/installer/arrow_circle.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/installer/arrow_circle.dds" ARRAY_NAME "g_arrow_circle" COMPRESSION_TYPE "zstd") diff --git a/UnleashedRecomp/hid/driver/sdl_hid.cpp b/UnleashedRecomp/hid/driver/sdl_hid.cpp index 6a49c77..2aab5f5 100644 --- a/UnleashedRecomp/hid/driver/sdl_hid.cpp +++ b/UnleashedRecomp/hid/driver/sdl_hid.cpp @@ -15,9 +15,14 @@ public: SDL_JoystickID id{ -1 }; XAMINPUT_GAMEPAD state{}; XAMINPUT_VIBRATION vibration{ 0, 0 }; + int index{}; Controller() = default; - explicit Controller(int index) : Controller(SDL_GameControllerOpen(index)) {} + + explicit Controller(int index) : Controller(SDL_GameControllerOpen(index)) + { + this->index = index; + } Controller(SDL_GameController* controller) : controller(controller) { @@ -28,6 +33,24 @@ public: id = SDL_JoystickInstanceID(joystick); } + SDL_GameControllerType GetControllerType() const + { + return SDL_GameControllerTypeForIndex(index); + } + + hid::detail::EInputDevice GetInputDevice() const + { + switch (GetControllerType()) + { + case SDL_CONTROLLER_TYPE_PS3: + case SDL_CONTROLLER_TYPE_PS4: + case SDL_CONTROLLER_TYPE_PS5: + return hid::detail::EInputDevice::PlayStation; + } + + return hid::detail::EInputDevice::Xbox; + } + void Close() { if (!controller) @@ -167,7 +190,7 @@ int HID_OnSDLEvent(void*, SDL_Event* event) controller->Poll(); } - hid::detail::g_inputDevice = hid::detail::EInputDevice::Controller; + hid::detail::g_inputDevice = controller->GetInputDevice(); } } } diff --git a/UnleashedRecomp/hid/hid.cpp b/UnleashedRecomp/hid/hid.cpp index 8f5b70d..2c0d860 100644 --- a/UnleashedRecomp/hid/hid.cpp +++ b/UnleashedRecomp/hid/hid.cpp @@ -23,3 +23,9 @@ uint32_t hid::GetCapabilities(uint32_t dwUserIndex, XAMINPUT_CAPABILITIES* pCaps { return detail::GetCapabilities(dwUserIndex, pCaps); } + +bool hid::detail::IsInputDeviceController() +{ + return hid::detail::g_inputDevice != hid::detail::EInputDevice::Keyboard && + hid::detail::g_inputDevice != hid::detail::EInputDevice::Mouse; +} diff --git a/UnleashedRecomp/hid/hid_detail.h b/UnleashedRecomp/hid/hid_detail.h index 7c9d1f5..ab6eb70 100644 --- a/UnleashedRecomp/hid/hid_detail.h +++ b/UnleashedRecomp/hid/hid_detail.h @@ -6,7 +6,8 @@ namespace hid::detail { Keyboard, Mouse, - Controller + Xbox, + PlayStation }; extern EInputDevice g_inputDevice; @@ -16,4 +17,6 @@ namespace hid::detail uint32_t GetState(uint32_t dwUserIndex, XAMINPUT_STATE* pState); uint32_t SetState(uint32_t dwUserIndex, XAMINPUT_VIBRATION* pVibration); uint32_t GetCapabilities(uint32_t dwUserIndex, XAMINPUT_CAPABILITIES* pCaps); + + bool IsInputDeviceController(); } diff --git a/UnleashedRecomp/ui/button_guide.cpp b/UnleashedRecomp/ui/button_guide.cpp index 40410c0..508e1f0 100644 --- a/UnleashedRecomp/ui/button_guide.cpp +++ b/UnleashedRecomp/ui/button_guide.cpp @@ -2,9 +2,12 @@ #include "imgui_utils.h" #include #include +#include +#include +#include #include +#include #include -#include #include constexpr float DEFAULT_SIDE_MARGINS = 379; @@ -12,9 +15,8 @@ constexpr float DEFAULT_SIDE_MARGINS = 379; ImFont* g_fntNewRodin; ImFont* g_fntNewRodinLQ; -std::unique_ptr g_upIcons; +std::unique_ptr g_upControllerIcons; std::unique_ptr g_upKBMIcons; -std::unique_ptr g_upStartBackIcons; float g_sideMargins = DEFAULT_SIDE_MARGINS; @@ -61,56 +63,63 @@ std::tuple, GuestTexture*> GetButtonIcon(EButtonIcon std::tuple btn; GuestTexture* texture; + auto isPlayStation = g_isAppInit + ? Config::ControllerIcons == EControllerIcons::PlayStation + : hid::detail::g_inputDevice == hid::detail::EInputDevice::PlayStation; + + auto yOffsetCmn = isPlayStation ? 42 : 0; + auto yOffsetStartBack = isPlayStation ? 47 : 0; + switch (icon) { case EButtonIcon::A: - btn = PIXELS_TO_UV_COORDS(512, 512, 0, 0, 40, 40); - texture = g_upIcons.get(); + btn = PIXELS_TO_UV_COORDS(512, 128, 0, yOffsetCmn, 40, 40); + texture = g_upControllerIcons.get(); break; case EButtonIcon::B: - btn = PIXELS_TO_UV_COORDS(512, 512, 40, 0, 40, 40); - texture = g_upIcons.get(); + btn = PIXELS_TO_UV_COORDS(512, 128, 40, yOffsetCmn, 40, 40); + texture = g_upControllerIcons.get(); break; case EButtonIcon::X: - btn = PIXELS_TO_UV_COORDS(512, 512, 80, 0, 40, 40); - texture = g_upIcons.get(); + btn = PIXELS_TO_UV_COORDS(512, 128, 80, yOffsetCmn, 40, 40); + texture = g_upControllerIcons.get(); break; case EButtonIcon::Y: - btn = PIXELS_TO_UV_COORDS(512, 512, 120, 0, 40, 40); - texture = g_upIcons.get(); + btn = PIXELS_TO_UV_COORDS(512, 128, 120, yOffsetCmn, 40, 40); + texture = g_upControllerIcons.get(); break; case EButtonIcon::LB: - btn = PIXELS_TO_UV_COORDS(512, 512, 166, 0, 70, 40); - texture = g_upIcons.get(); + btn = PIXELS_TO_UV_COORDS(512, 128, 166, yOffsetCmn, 70, 40); + texture = g_upControllerIcons.get(); break; case EButtonIcon::RB: - btn = PIXELS_TO_UV_COORDS(512, 512, 246, 0, 70, 40); - texture = g_upIcons.get(); + btn = PIXELS_TO_UV_COORDS(512, 128, 246, yOffsetCmn, 70, 40); + texture = g_upControllerIcons.get(); break; case EButtonIcon::LT: - btn = PIXELS_TO_UV_COORDS(512, 512, 319, 0, 42, 42); - texture = g_upIcons.get(); + btn = PIXELS_TO_UV_COORDS(512, 128, 320, yOffsetCmn, 40, 42); + texture = g_upControllerIcons.get(); break; case EButtonIcon::RT: - btn = PIXELS_TO_UV_COORDS(512, 512, 359, 0, 42, 42); - texture = g_upIcons.get(); + btn = PIXELS_TO_UV_COORDS(512, 128, 360, yOffsetCmn, 40, 42); + texture = g_upControllerIcons.get(); break; case EButtonIcon::Start: - btn = PIXELS_TO_UV_COORDS(256, 256, 0, 0, 128, 128); - texture = g_upStartBackIcons.get(); + btn = PIXELS_TO_UV_COORDS(512, 128, 455, yOffsetStartBack, 47, 47); + texture = g_upControllerIcons.get(); break; case EButtonIcon::Back: - btn = PIXELS_TO_UV_COORDS(256, 256, 0, 128, 128, 128); - texture = g_upStartBackIcons.get(); + btn = PIXELS_TO_UV_COORDS(512, 128, 407, yOffsetStartBack, 47, 47); + texture = g_upControllerIcons.get(); break; case EButtonIcon::LMB: @@ -210,17 +219,13 @@ void ButtonGuide::Init() g_fntNewRodin = ImFontAtlasSnapshot::GetFont("FOT-NewRodinPro-M.otf", 24.0f * FONT_SCALE); g_fntNewRodinLQ = ImFontAtlasSnapshot::GetFont("FOT-NewRodinPro-M.otf", 19.0f); - g_upIcons = LoadTexture( - decompressZstd(g_mat_comon_x360_001, g_mat_comon_x360_001_uncompressed_size).get(), - g_mat_comon_x360_001_uncompressed_size); + g_upControllerIcons = LoadTexture( + decompressZstd(g_controller, g_controller_uncompressed_size).get(), + g_controller_uncompressed_size); g_upKBMIcons = LoadTexture( decompressZstd(g_kbm, g_kbm_uncompressed_size).get(), g_kbm_uncompressed_size); - - g_upStartBackIcons = LoadTexture( - decompressZstd(g_start_back, g_start_back_uncompressed_size).get(), - g_start_back_uncompressed_size); } void ButtonGuide::Draw() diff --git a/UnleashedRecomp/ui/installer_wizard.cpp b/UnleashedRecomp/ui/installer_wizard.cpp index 5b5e649..40d98d9 100644 --- a/UnleashedRecomp/ui/installer_wizard.cpp +++ b/UnleashedRecomp/ui/installer_wizard.cpp @@ -681,7 +681,7 @@ static void DrawDescriptionContainer() if (g_currentPage != WizardPage::Installing && textAlpha >= 1.0) { - auto icon = hid::detail::g_inputDevice == hid::detail::EInputDevice::Controller + auto icon = hid::detail::IsInputDeviceController() ? EButtonIcon::A : hid::detail::g_inputDevice == hid::detail::EInputDevice::Keyboard ? EButtonIcon::Enter diff --git a/UnleashedRecomp/ui/message_window.cpp b/UnleashedRecomp/ui/message_window.cpp index 988e334..b8d47e6 100644 --- a/UnleashedRecomp/ui/message_window.cpp +++ b/UnleashedRecomp/ui/message_window.cpp @@ -273,7 +273,7 @@ void MessageWindow::Draw() auto textMarginX = Scale(37); auto textMarginY = Scale(45); - bool isController = g_isAppInit ? true : hid::detail::g_inputDevice == hid::detail::EInputDevice::Controller; + bool isController = g_isAppInit ? true : hid::detail::IsInputDeviceController(); bool isKeyboard = g_isAppInit ? false : hid::detail::g_inputDevice == hid::detail::EInputDevice::Keyboard; if (DrawContainer(g_appearTime, centre, { textSize.x / 2 + textMarginX, textSize.y / 2 + textMarginY }, !g_isControlsVisible)) diff --git a/UnleashedRecompResources b/UnleashedRecompResources index bcad34e..13b47cd 160000 --- a/UnleashedRecompResources +++ b/UnleashedRecompResources @@ -1 +1 @@ -Subproject commit bcad34ee648f69c448b204cb38337e7ef2e0aa18 +Subproject commit 13b47cd03c70f15f1f3deb2a31f0f15c5e26eac3