From 630028887a32e2fe6a1579c971ee653ea4aafdf0 Mon Sep 17 00:00:00 2001 From: PTKay Date: Mon, 2 Dec 2024 11:40:51 +0000 Subject: [PATCH] Tweak install screen to better match the original --- UnleashedRecomp/CMakeLists.txt | 1 + UnleashedRecomp/ui/installer_wizard.cpp | 42 +++++++++++++++++-------- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/UnleashedRecomp/CMakeLists.txt b/UnleashedRecomp/CMakeLists.txt index 303210cc..3e5a400a 100644 --- a/UnleashedRecomp/CMakeLists.txt +++ b/UnleashedRecomp/CMakeLists.txt @@ -116,6 +116,7 @@ BIN2H(SOURCE_FILE "${INSTALLER_IMAGES_DIR}/install_005.dds" HEADER_FILE "res/ins BIN2H(SOURCE_FILE "${INSTALLER_IMAGES_DIR}/install_006.dds" HEADER_FILE "res/install_006_dds.h" ARRAY_TYPE "unsigned char" VARIABLE_NAME "g_install006DDS") BIN2H(SOURCE_FILE "${INSTALLER_IMAGES_DIR}/install_007.dds" HEADER_FILE "res/install_007_dds.h" ARRAY_TYPE "unsigned char" VARIABLE_NAME "g_install007DDS") BIN2H(SOURCE_FILE "${INSTALLER_IMAGES_DIR}/install_008.dds" HEADER_FILE "res/install_008_dds.h" ARRAY_TYPE "unsigned char" VARIABLE_NAME "g_install008DDS") +BIN2H(SOURCE_FILE "${INSTALLER_IMAGES_DIR}/miles_electric_icon.dds" HEADER_FILE "res/miles_electric_icon_dds.h" ARRAY_TYPE "unsigned char" VARIABLE_NAME "g_milesElectricIconDDS") set(LIBMSPACK_PATH ${SWA_THIRDPARTY_ROOT}/libmspack/libmspack/mspack) diff --git a/UnleashedRecomp/ui/installer_wizard.cpp b/UnleashedRecomp/ui/installer_wizard.cpp index 054b22e9..4ceb048a 100644 --- a/UnleashedRecomp/ui/installer_wizard.cpp +++ b/UnleashedRecomp/ui/installer_wizard.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #define SKIP_SOURCE_CHECKS 0 @@ -36,7 +37,7 @@ static constexpr double CONTAINER_BACKGROUND_DURATION = 16.0; static constexpr double ALL_ANIMATIONS_FULL_DURATION = CONTAINER_BACKGROUND_TIME + CONTAINER_BACKGROUND_DURATION; -constexpr float IMAGE_X = 140.0f; +constexpr float IMAGE_X = 165.0f; constexpr float IMAGE_Y = 106.0f; constexpr float IMAGE_WIDTH = 512.0f; constexpr float IMAGE_HEIGHT = 512.0f; @@ -71,6 +72,7 @@ static std::filesystem::path g_gameSourcePath; static std::filesystem::path g_updateSourcePath; static std::array g_dlcSourcePaths; static std::array, 8> g_installTextures; +static std::unique_ptr g_installHeaderIcon; static Journal g_installerJournal; static Installer::Sources g_installerSources; static uint64_t g_installerAvailableSize = 0; @@ -229,7 +231,15 @@ static void DrawScanlineBars() // TODO: localise this. const char *headerText = g_currentPage == WizardPage::Installing ? INSTALLING_TEXT : INSTALLER_TEXT; int textAlpha = std::lround(255.0f * ComputeMotionInstaller(g_appearTime, g_disappearTime, TITLE_ANIMATION_TIME, TITLE_ANIMATION_DURATION)); - DrawTextWithOutline(g_dfsogeistdFont, Scale(48.0f), { Scale(122.0f), Scale(56.0f) }, IM_COL32(255, 195, 0, textAlpha), headerText, 4, IM_COL32(0, 0, 0, textAlpha)); + DrawTextWithOutline(g_dfsogeistdFont, Scale(42.0f), { Scale(285.0f), Scale(57.0f) }, IM_COL32(255, 195, 0, textAlpha), headerText, 4, IM_COL32(0, 0, 0, textAlpha)); + + // Icon + float iconPosX = 225.0f; + float iconPosY = 50.0f; + GuestTexture* guestTexture = g_installHeaderIcon.get(); + ImVec2 min = { Scale(iconPosX), Scale(iconPosY) }; + ImVec2 max = { Scale(iconPosX + 58), Scale(iconPosY + 58) }; + drawList->AddImage(guestTexture, min, max, ImVec2(0, 0), ImVec2(1, 1), IM_COL32(255, 255, 255, 255)); // Top bar line drawList->AddLine @@ -255,7 +265,7 @@ static float AlignToNextGrid(float value) return floor(value / GRID_SIZE) * GRID_SIZE; } -static void DrawContainer(ImVec2 min, ImVec2 max, bool useInnerColor) +static void DrawContainer(ImVec2 min, ImVec2 max, bool isTextArea) { double containerHeight = ComputeMotionInstaller(g_appearTime, g_disappearTime, 0.0, CONTAINER_LINE_ANIMATION_DURATION); @@ -266,20 +276,25 @@ static void DrawContainer(ImVec2 min, ImVec2 max, bool useInnerColor) auto &res = ImGui::GetIO().DisplaySize; auto drawList = ImGui::GetForegroundDrawList(); - double outerAlpha = ComputeMotionInstaller(g_appearTime, g_disappearTime, CONTAINER_OUTER_TIME, CONTAINER_OUTER_DURATION); - double innerAlpha = ComputeMotionInstaller(g_appearTime, g_disappearTime, CONTAINER_INNER_TIME, CONTAINER_INNER_DURATION); - double backgroundAlpha = ComputeMotionInstaller(g_appearTime, g_disappearTime, CONTAINER_BACKGROUND_TIME, CONTAINER_BACKGROUND_DURATION); + double gridAlpha = ComputeMotionInstaller(g_appearTime, g_disappearTime, + isTextArea ? CONTAINER_INNER_TIME : CONTAINER_OUTER_TIME, + isTextArea ? CONTAINER_INNER_DURATION : CONTAINER_OUTER_DURATION + ); + double gridOverlayAlpha = ComputeMotionInstaller(g_appearTime, g_disappearTime, CONTAINER_OUTER_TIME, CONTAINER_OUTER_DURATION); - const uint32_t outerColor = IM_COL32(0, 60, 0, 128 * outerAlpha); - const uint32_t innerColor = IM_COL32(0, 40, 0, 96 * innerAlpha); - const uint32_t backgroundColor = IM_COL32(0, 60, 0, 96 * backgroundAlpha); + const uint32_t gridColor = IM_COL32(0, 33, 0, isTextArea ? 128 : 255 * gridAlpha); + const uint32_t gridOverlayColor = IM_COL32(0, 32, 0, 128 * gridOverlayAlpha); float gridSize = Scale(GRID_SIZE); - drawList->AddRectFilled(min, max, backgroundColor); + SetShaderModifier(IMGUI_SHADER_MODIFIER_CHECKERBOARD); - drawList->AddRectFilled(min, max, useInnerColor ? innerColor: outerColor); + drawList->AddRectFilled(min, max, gridColor); SetShaderModifier(IMGUI_SHADER_MODIFIER_NONE); + if (isTextArea) { + drawList->AddRectFilled(min, max, gridOverlayColor); + } + // The draw area drawList->PushClipRect({ min.x + gridSize * 2.0f, min.y + gridSize * 2.0f }, { max.x - gridSize * 2.0f + 1.0f, max.y - gridSize * 2.0f + 1.0f }); } @@ -291,7 +306,7 @@ static void DrawDescriptionContainer() ImVec2 descriptionMin = { Scale(AlignToNextGrid(CONTAINER_X)), Scale(AlignToNextGrid(CONTAINER_Y)) }; ImVec2 descriptionMax = { Scale(AlignToNextGrid(CONTAINER_X + CONTAINER_WIDTH)), Scale(AlignToNextGrid(CONTAINER_Y + CONTAINER_HEIGHT)) }; - DrawContainer(descriptionMin, descriptionMax, false); + DrawContainer(descriptionMin, descriptionMax, true); char descriptionText[512]; strncpy(descriptionText, WIZARD_TEXT[int(g_currentPage)], sizeof(descriptionText) - 1); @@ -331,7 +346,7 @@ static void DrawDescriptionContainer() ImVec2 sideMin = { descriptionMax.x, descriptionMin.y }; ImVec2 sideMax = { Scale(AlignToNextGrid(CONTAINER_X + CONTAINER_WIDTH + SIDE_CONTAINER_WIDTH)), descriptionMax.y }; - DrawContainer(sideMin, sideMax, true); + DrawContainer(sideMin, sideMax, false); drawList->PopClipRect(); } @@ -837,6 +852,7 @@ void InstallerWizard::Init() g_installTextures[5] = LoadTexture(g_install006DDS, g_install006DDS_size); g_installTextures[6] = LoadTexture(g_install007DDS, g_install007DDS_size); g_installTextures[7] = LoadTexture(g_install008DDS, g_install008DDS_size); + g_installHeaderIcon = LoadTexture(g_milesElectricIconDDS, g_milesElectricIconDDS_size); } void InstallerWizard::Draw()