mirror of
https://github.com/hedge-dev/UnleashedRecomp.git
synced 2025-10-30 07:11:05 +00:00
button_guide: support for PlayStation controller icons
This commit is contained in:
parent
0d1a5e1fa1
commit
d9d4ca2196
8 changed files with 74 additions and 38 deletions
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,9 +2,12 @@
|
|||
#include "imgui_utils.h"
|
||||
#include <gpu/imgui_snapshot.h>
|
||||
#include <gpu/video.h>
|
||||
#include <hid/hid_detail.h>
|
||||
#include <user/config.h>
|
||||
#include <app.h>
|
||||
#include <decompressor.h>
|
||||
#include <res/images/common/controller.dds.h>
|
||||
#include <res/images/common/kbm.dds.h>
|
||||
#include <res/images/common/mat_comon_x360_001.dds.h>
|
||||
#include <res/images/common/start_back.dds.h>
|
||||
|
||||
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<GuestTexture> g_upIcons;
|
||||
std::unique_ptr<GuestTexture> g_upControllerIcons;
|
||||
std::unique_ptr<GuestTexture> g_upKBMIcons;
|
||||
std::unique_ptr<GuestTexture> g_upStartBackIcons;
|
||||
|
||||
float g_sideMargins = DEFAULT_SIDE_MARGINS;
|
||||
|
||||
|
|
@ -61,56 +63,63 @@ std::tuple<std::tuple<ImVec2, ImVec2>, GuestTexture*> GetButtonIcon(EButtonIcon
|
|||
std::tuple<ImVec2, ImVec2> 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()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit bcad34ee648f69c448b204cb38337e7ef2e0aa18
|
||||
Subproject commit 13b47cd03c70f15f1f3deb2a31f0f15c5e26eac3
|
||||
Loading…
Add table
Reference in a new issue