From bd0b446fdfbcb5d18e37719e1061d24b74c75fd9 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 20 Feb 2023 22:26:26 +0100 Subject: [PATCH] Implement game hub --- CMake/Assets.cmake | 1 + .../resources/assets/ui_art/bnconnbgw.clx | Bin 0 -> 197431 bytes Source/CMakeLists.txt | 5 + Source/DiabloUI/button.cpp | 12 + Source/DiabloUI/diabloui.cpp | 16 +- Source/DiabloUI/diabloui.h | 1 + Source/DiabloUI/hero/selhero.cpp | 4 +- Source/DiabloUI/hub/chat.cpp | 141 +++++++++++ Source/DiabloUI/hub/chat.h | 9 + Source/DiabloUI/hub/create.cpp | 51 ++++ Source/DiabloUI/hub/create.h | 8 + Source/DiabloUI/hub/friends.cpp | 22 ++ Source/DiabloUI/hub/friends.h | 8 + Source/DiabloUI/hub/hub.cpp | 221 ++++++++++++++++++ Source/DiabloUI/hub/hub.h | 31 +++ Source/DiabloUI/hub/join.cpp | 135 +++++++++++ Source/DiabloUI/hub/join.h | 8 + Source/DiabloUI/scrollbar.cpp | 10 + Source/DiabloUI/scrollbar.h | 20 +- Source/DiabloUI/ui_flags.hpp | 1 + Source/multi.cpp | 11 +- 21 files changed, 694 insertions(+), 21 deletions(-) create mode 100644 Packaging/resources/assets/ui_art/bnconnbgw.clx create mode 100644 Source/DiabloUI/hub/chat.cpp create mode 100644 Source/DiabloUI/hub/chat.h create mode 100644 Source/DiabloUI/hub/create.cpp create mode 100644 Source/DiabloUI/hub/create.h create mode 100644 Source/DiabloUI/hub/friends.cpp create mode 100644 Source/DiabloUI/hub/friends.h create mode 100644 Source/DiabloUI/hub/hub.cpp create mode 100644 Source/DiabloUI/hub/hub.h create mode 100644 Source/DiabloUI/hub/join.cpp create mode 100644 Source/DiabloUI/hub/join.h diff --git a/CMake/Assets.cmake b/CMake/Assets.cmake index e4731a299..139882adc 100644 --- a/CMake/Assets.cmake +++ b/CMake/Assets.cmake @@ -173,6 +173,7 @@ set(devilutionx_assets nlevels/l5data/uberroom.dun ui_art/diablo.pal ui_art/hellfire.pal + ui_art/bnconnbgw.clx ui_art/creditsw.clx ui_art/dvl_but_sml.clx ui_art/dvl_lrpopup.clx diff --git a/Packaging/resources/assets/ui_art/bnconnbgw.clx b/Packaging/resources/assets/ui_art/bnconnbgw.clx new file mode 100644 index 0000000000000000000000000000000000000000..f4d3584f7a6f458c6372e25b104758c704008969 GIT binary patch literal 197431 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 gen+^(>QD$zPzEg>gD#(JU-ACVF3CIhsD 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 literal 0 HcmV?d00001 diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 7a9969d6e..a7323689e 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -73,6 +73,11 @@ set(libdevilutionx_SRCS DiabloUI/diabloui.cpp DiabloUI/dialogs.cpp DiabloUI/hero/selhero.cpp + DiabloUI/hub/chat.cpp + DiabloUI/hub/create.cpp + DiabloUI/hub/friends.cpp + DiabloUI/hub/hub.cpp + DiabloUI/hub/join.cpp DiabloUI/mainmenu.cpp DiabloUI/multi/selconn.cpp DiabloUI/multi/selgame.cpp diff --git a/Source/DiabloUI/button.cpp b/Source/DiabloUI/button.cpp index 3a702dbed..0af3e4f65 100644 --- a/Source/DiabloUI/button.cpp +++ b/Source/DiabloUI/button.cpp @@ -13,6 +13,8 @@ namespace devilution { namespace { OptionalOwnedClxSpriteList ButtonSprites; +OptionalOwnedClxSpriteList ButtonXsSprites; +OptionalOwnedClxSpriteList ButtonBnSprites; } // namespace @@ -22,11 +24,21 @@ void LoadDialogButtonGraphics() if (!ButtonSprites) { ButtonSprites = LoadPcxSpriteList("ui_art\\but_sml", 15); } + ButtonXsSprites = LoadOptionalClx("ui_art\\but_xsm.clx"); + if (!ButtonXsSprites) { + ButtonXsSprites = LoadPcxSpriteList("ui_art\\but_xsm", -35); + } + ButtonBnSprites = LoadOptionalClx("ui_art\\bnbuttns.clx"); + if (!ButtonBnSprites) { + ButtonBnSprites = LoadPcxSpriteList("ui_art\\bnbuttns", -71); + } } void FreeDialogButtonGraphics() { ButtonSprites = std::nullopt; + ButtonXsSprites = std::nullopt; + ButtonBnSprites = std::nullopt; } ClxSprite ButtonSprite(bool pressed) diff --git a/Source/DiabloUI/diabloui.cpp b/Source/DiabloUI/diabloui.cpp index c2fb5c826..5fe0f06de 100644 --- a/Source/DiabloUI/diabloui.cpp +++ b/Source/DiabloUI/diabloui.cpp @@ -818,7 +818,11 @@ void Render(const UiImageClx &uiImage) if (uiImage.isCentered()) { x += GetCenterOffset(sprite.width(), uiImage.m_rect.w); } - RenderClxSprite(Surface(DiabloUiSurface()), sprite, { x, uiImage.m_rect.y }); + const Surface &out = Surface(DiabloUiSurface()); + if (uiImage.m_rect.w != 0) + RenderClxSprite(out.subregion(x, 0, uiImage.m_rect.w, out.h()), sprite, { 0, uiImage.m_rect.y }); + else + RenderClxSprite(out, sprite, { x, uiImage.m_rect.y }); } void Render(const UiImageAnimatedClx &uiImage) @@ -863,7 +867,7 @@ void Render(const UiScrollbar &uiSb) { const int bgY = uiSb.m_rect.y + uiSb.m_arrow[0].height(); const int bgH = DownArrowRect(uiSb).y - bgY; - const Surface backgroundOut = out.subregion(uiSb.m_rect.x, bgY, ScrollBarBgWidth, bgH); + const Surface backgroundOut = out.subregion(uiSb.m_rect.x, bgY, ScrollBarWidth, bgH); int y = 0; while (y < bgH) { RenderClxSprite(backgroundOut, uiSb.m_bg, { 0, y }); @@ -874,13 +878,13 @@ void Render(const UiScrollbar &uiSb) // Arrows: { const SDL_Rect rect = UpArrowRect(uiSb); - const auto frame = static_cast(scrollBarState.upArrowPressed ? ScrollBarArrowFrame_UP_ACTIVE : ScrollBarArrowFrame_UP); - RenderClxSprite(out.subregion(rect.x, 0, ScrollBarArrowWidth, out.h()), uiSb.m_arrow[frame], { 0, rect.y }); + const uint16_t frame = scrollBarState.upArrowPressed ? ScrollBarArrowFrame_UP_ACTIVE : ScrollBarArrowFrame_UP; + RenderClxSprite(out.subregion(rect.x, 0, ScrollBarWidth, out.h()), uiSb.m_arrow[frame], { 0, rect.y }); } { const SDL_Rect rect = DownArrowRect(uiSb); - const auto frame = static_cast(scrollBarState.downArrowPressed ? ScrollBarArrowFrame_DOWN_ACTIVE : ScrollBarArrowFrame_DOWN); - RenderClxSprite(out.subregion(rect.x, 0, ScrollBarArrowWidth, out.h()), uiSb.m_arrow[frame], { 0, rect.y }); + const uint16_t frame = scrollBarState.downArrowPressed ? ScrollBarArrowFrame_DOWN_ACTIVE : ScrollBarArrowFrame_DOWN; + RenderClxSprite(out.subregion(rect.x, 0, ScrollBarWidth, out.h()), uiSb.m_arrow[frame], { 0, rect.y }); } // Thumb: diff --git a/Source/DiabloUI/diabloui.h b/Source/DiabloUI/diabloui.h index 5c5e99412..e0dab36dd 100644 --- a/Source/DiabloUI/diabloui.h +++ b/Source/DiabloUI/diabloui.h @@ -89,6 +89,7 @@ bool UiCreditsDialog(); bool UiSupportDialog(); bool UiMainMenuDialog(const char *name, _mainmenu_selections *pdwResult, int attractTimeOut); bool UiProgressDialog(int (*fnfunc)()); +bool UiHubMain(); bool UiSelectGame(GameData *gameData, int *playerId); bool UiSelectProvider(GameData *gameData); void UiFadeIn(); diff --git a/Source/DiabloUI/hero/selhero.cpp b/Source/DiabloUI/hero/selhero.cpp index 844625bf7..6bd1d6880 100644 --- a/Source/DiabloUI/hero/selhero.cpp +++ b/Source/DiabloUI/hero/selhero.cpp @@ -8,6 +8,7 @@ #include "DiabloUI/diabloui.h" #include "DiabloUI/dialogs.h" +#include "DiabloUI/hub/hub.h" #include "DiabloUI/multi/selgame.h" #include "DiabloUI/scrollbar.h" #include "DiabloUI/selok.h" @@ -336,6 +337,7 @@ void SelheroLoadSelect(int value) } if (!selhero_isMultiPlayer) { + // TODO fix this :( // This is part of a dangerous hack to enable difficulty selection in single-player. // FIXME: Dialogs should not refer to each other's variables. @@ -350,7 +352,7 @@ void SelheroLoadSelect(int value) selhero_isSavegame = false; SelheroFree(); - LoadBackgroundArt("ui_art\\selgame"); + LoadBackgroundArt("ui_art\\bnconnbg"); selgame_GameSelection_Select(0); } diff --git a/Source/DiabloUI/hub/chat.cpp b/Source/DiabloUI/hub/chat.cpp new file mode 100644 index 000000000..40f23161d --- /dev/null +++ b/Source/DiabloUI/hub/chat.cpp @@ -0,0 +1,141 @@ +#include "DiabloUI/hub/chat.h" + +#include "DiabloUI/hub/hub.h" +#include "DiabloUI/scrollbar.h" +#include "engine/load_pcx.hpp" + +namespace devilution { + +namespace { + +char ChatMessage[129]; + +OptionalOwnedClxSpriteList MainButton; +std::vector PlayerList; + +struct ColoredText { + std::string text; + UiFlags color; +}; + +struct MultiColoredText { + std::string text; + std::vector colors; + int offset = 0; +}; + +std::vector ChatLogLines; + +void BuildFixtures() +{ + PlayerList.emplace_back(PlayerInfo { "KPhoenix", HeroClass::Warrior, 35, 2, GameIdDiabloFull, 50 }); + PlayerList.emplace_back(PlayerInfo { "AJenbo", HeroClass::Rogue, 23, 1, GameIdHellfireFull, 320 }); + PlayerList.emplace_back(PlayerInfo { "FireIceTalon", HeroClass::Sorcerer, 50, 3, GameIdDiabloFull, 150 }); + PlayerList.emplace_back(PlayerInfo { "glebm", HeroClass::Monk, 12, 0, GameIdHellfireFull, 1400 }); + PlayerList.emplace_back(PlayerInfo { "qndel", HeroClass::Warrior, 1, 0, GameIdDiabloSpawn, 450 }); + + ChatLogLines.emplace_back(MultiColoredText { "{0}", { { "KPhoenix has appeared on the network", UiFlags::ColorUiGreen } } }); + ChatLogLines.emplace_back(MultiColoredText { "{0} {1}", { { "", UiFlags::ColorYellow }, { "Hello", UiFlags::ColorDialogWhite } } }); + ChatLogLines.emplace_back(MultiColoredText { "{0} {1}", { { "", UiFlags::ColorBlue }, { "Ready?", UiFlags::ColorUiSilverDark } } }); + ChatLogLines.emplace_back(MultiColoredText { "{0}", { { "FireIceTalon started a new game", UiFlags::ColorRed } } }); +} + +void hubmain_Free() +{ + PlayerList.clear(); + ChatLogLines.clear(); +} + +void DialogActionOK() +{ +} + +} // namespace + +void hubmain_Init() +{ + Layout = LoadPcx("ui_art\\chat_bkg", /*transparentColor=*/0); + MainButton = LoadPcxSpriteList("ui_art\\bnbuttns", -71); + + BuildFixtures(); +} + +void UiHubInitPlayerList() +{ + const Point uiPosition = GetUIRectangle().position + Displacement { 460, 200 }; + int yOffset = 0; + + for (const PlayerInfo &player : PlayerList) { + UiHubPlacePlayerIcon({ uiPosition.x, uiPosition.y + yOffset }, player.gameMode, player); + + const SDL_Rect rect3 = MakeSdlRect(uiPosition.x + 30, uiPosition.y + yOffset - 6, 89, 20); + vecHubMainDialog.push_back(std::make_unique(player.name.data(), rect3, UiFlags::FontSizeDialog | UiFlags::ColorYellow, -1)); + + UiHubPlaceLatencyMeter(player.latency, { uiPosition.x + 121, uiPosition.y + yOffset + 2 }); + + yOffset += 16; + } +} + +void hubmain_GameSelection_Init() +{ + const Point uiPosition = GetUIRectangle().position; + + const SDL_Rect rect2 = MakeSdlRect(uiPosition.x + 445, uiPosition.y + 148, 179, 28); + vecHubMainDialog.push_back(std::make_unique(_("Global Chat").data(), rect2, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite | UiFlags::AlignCenter | UiFlags::VerticalCenter, -1)); + + vecHubMainDialog.push_back(std::make_unique((*MainButton)[0], MakeSdlRect(uiPosition.x + 10, uiPosition.y + 140, 85, 71))); + const SDL_Rect rect3 = MakeSdlRect(uiPosition.x + 10, uiPosition.y + 140 + 43, 85, 71); + vecHubMainDialog.push_back(std::make_unique(_("Friends").data(), rect3, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite | UiFlags::AlignCenter, -1)); + vecHubMainDialog.push_back(std::make_unique((*MainButton)[5], MakeSdlRect(uiPosition.x + 10, uiPosition.y + 227, 85, 71))); + const SDL_Rect rect4 = MakeSdlRect(uiPosition.x + 10, uiPosition.y + 227 + 43, 85, 71); + vecHubMainDialog.push_back(std::make_unique(_("Create").data(), rect4, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite | UiFlags::AlignCenter, -1)); + vecHubMainDialog.push_back(std::make_unique((*MainButton)[10], MakeSdlRect(uiPosition.x + 10, uiPosition.y + 315, 85, 71))); + const SDL_Rect rect5 = MakeSdlRect(uiPosition.x + 10, uiPosition.y + 315 + 43, 85, 71); + vecHubMainDialog.push_back(std::make_unique(_("Join").data(), rect5, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite | UiFlags::AlignCenter, -1)); + vecHubMainDialog.push_back(std::make_unique((*MainButton)[15], MakeSdlRect(uiPosition.x + 10, uiPosition.y + 402, 85, 71))); + const SDL_Rect rect6 = MakeSdlRect(uiPosition.x + 10, uiPosition.y + 402 + 43, 85, 71); + vecHubMainDialog.push_back(std::make_unique(_("Quit").data(), rect6, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite | UiFlags::AlignCenter, -1)); + + UiHubInitPlayerList(); + + const SDL_Rect rectScrollbar1 = MakeSdlRect(uiPosition.x + 402, uiPosition.y + 158, 17, 251); + vecHubMainDialog.push_back(std::make_unique((*ArtScrollBarBackground)[0], (*ArtScrollBarThumb)[0], *ArtScrollBarArrow, rectScrollbar1)); + + const SDL_Rect rectScrollbar2 = MakeSdlRect(uiPosition.x + 602, uiPosition.y + 199, 17, 209); + vecHubMainDialog.push_back(std::make_unique((*ArtScrollBarBackground)[0], (*ArtScrollBarThumb)[0], *ArtScrollBarArrow, rectScrollbar2)); + + const SDL_Rect rect7 = MakeSdlRect(uiPosition.x + 264 + 188, uiPosition.y + 335 + 103, 85, 35); + vecHubMainDialog.push_back(std::make_unique(_("Send"), &DialogActionOK, rect7)); + + const SDL_Rect rect8 = MakeSdlRect(uiPosition.x + 264 + 283, uiPosition.y + 335 + 103, 85, 35); + vecHubMainDialog.push_back(std::make_unique(_("Whisper"), &DialogActionOK, rect8)); + + const SDL_Rect rect9 = MakeSdlRect(uiPosition.x + 117, uiPosition.y + 433, 306, 30); + vecHubMainDialog.push_back(std::make_unique(_("Enter chat message"), ChatMessage, 128, false, rect9, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite)); +} + +void DrawChat() +{ + const Point uiPosition = GetUIRectangle().position + Displacement { 116, 161 }; + + const Surface &out = Surface(DiabloUiSurface()); + int displayLines = ChatLogLines.size(); + displayLines = std::min(100, displayLines); + int SkipLines = 0; + int lineHeight = 22; + for (int i = 0; i < displayLines; i++) { + if (i + SkipLines >= ChatLogLines.size()) + break; + MultiColoredText &text = ChatLogLines[ChatLogLines.size() - (i + SkipLines + 1)]; + const string_view line = text.text; + + std::vector args; + for (auto &x : text.colors) { + args.emplace_back(DrawStringFormatArg { x.text, x.color }); + } + DrawStringWithColors(out, line, args, { { (uiPosition.x + text.offset), uiPosition.y + i * lineHeight }, { 280 - text.offset * 2, lineHeight } }, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite, /*spacing=*/1, lineHeight); + } +} + +} // namespace devilution diff --git a/Source/DiabloUI/hub/chat.h b/Source/DiabloUI/hub/chat.h new file mode 100644 index 000000000..7ed12b0ea --- /dev/null +++ b/Source/DiabloUI/hub/chat.h @@ -0,0 +1,9 @@ +#pragma once + +namespace devilution { + +void hubmain_Init(); +void hubmain_GameSelection_Init(); +void DrawChat(); + +} // namespace devilution diff --git a/Source/DiabloUI/hub/create.cpp b/Source/DiabloUI/hub/create.cpp new file mode 100644 index 000000000..d42663ece --- /dev/null +++ b/Source/DiabloUI/hub/create.cpp @@ -0,0 +1,51 @@ +#include "DiabloUI/hub/create.h" + +#include "DiabloUI/hub/hub.h" +#include "engine/load_pcx.hpp" + +namespace devilution { + +namespace { + +OptionalOwnedClxSpriteList CreateButton; + +void DialogActionOK() +{ +} + +} // namespace + +void HubLoadCreate() +{ + Layout = LoadPcx("ui_art\\creat_bg", /*transparentColor=*/0); + CreateButton = LoadPcxSpriteList("ui_art\\diffbtns", -68); +} + +void HubInitCreate() +{ + const Point uiPosition = GetUIRectangle().position; + + const SDL_Rect rect0 = MakeSdlRect(uiPosition.x + 17, uiPosition.y + 154, 274, 26); + vecHubMainDialog.push_back(std::make_unique(_("Difficulty").data(), rect0, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite | UiFlags::AlignCenter, -1)); + + vecHubMainDialog.push_back(std::make_unique((*CreateButton)[1], MakeSdlRect(uiPosition.x + 115, uiPosition.y + 187, 85, 68))); + const SDL_Rect rect1 = MakeSdlRect(uiPosition.x + 115, uiPosition.y + 227, 85, 26); + vecHubMainDialog.push_back(std::make_unique(_("Normal").data(), rect1, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite | UiFlags::AlignCenter, -2)); + vecHubMainDialog.push_back(std::make_unique((*CreateButton)[2], MakeSdlRect(uiPosition.x + 62, uiPosition.y + 263, 85, 68))); + const SDL_Rect rect2 = MakeSdlRect(uiPosition.x + 62, uiPosition.y + 303, 85, 26); + vecHubMainDialog.push_back(std::make_unique(_("Nightmare").data(), rect2, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite | UiFlags::AlignCenter, -2)); + vecHubMainDialog.push_back(std::make_unique((*CreateButton)[4], MakeSdlRect(uiPosition.x + 167, uiPosition.y + 263, 85, 68))); + const SDL_Rect rect3 = MakeSdlRect(uiPosition.x + 167, uiPosition.y + 303, 85, 26); + vecHubMainDialog.push_back(std::make_unique(_("Hell").data(), rect3, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite | UiFlags::AlignCenter, -2)); + + const SDL_Rect rect4 = MakeSdlRect(uiPosition.x + 26, uiPosition.y + 340, 262, 110); + vecHubMainDialog.push_back(std::make_unique(_("Normal Difficulty\nThis is where a starting\ncharacter should begin the quest\nto defeat Diablo.").data(), rect4, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite, -1, 19)); + + const SDL_Rect rect7 = MakeSdlRect(uiPosition.x + 264 + 188, uiPosition.y + 335 + 103, 85, 35); + vecHubMainDialog.push_back(std::make_unique(_("OK"), &DialogActionOK, rect7)); + + const SDL_Rect rect8 = MakeSdlRect(uiPosition.x + 264 + 283, uiPosition.y + 335 + 103, 85, 35); + vecHubMainDialog.push_back(std::make_unique(_("Cancel"), &DialogActionOK, rect8)); +} + +} // namespace devilution diff --git a/Source/DiabloUI/hub/create.h b/Source/DiabloUI/hub/create.h new file mode 100644 index 000000000..cb9bafa73 --- /dev/null +++ b/Source/DiabloUI/hub/create.h @@ -0,0 +1,8 @@ +#pragma once + +namespace devilution { + +void HubLoadCreate(); +void HubInitCreate(); + +} // namespace devilution diff --git a/Source/DiabloUI/hub/friends.cpp b/Source/DiabloUI/hub/friends.cpp new file mode 100644 index 000000000..e84c3542b --- /dev/null +++ b/Source/DiabloUI/hub/friends.cpp @@ -0,0 +1,22 @@ +#include "DiabloUI/hub/friends.h" + +#include "DiabloUI/hub/hub.h" +#include "engine/load_pcx.hpp" + +namespace devilution { + +namespace { + +} // namespace + +void HubLoadFriends() +{ + Layout = LoadPcx("ui_art\\bnselchn", /*transparentColor=*/0); +} + +void HubInitFriends() +{ + const Point uiPosition = GetUIRectangle().position; +} + +} // namespace devilution diff --git a/Source/DiabloUI/hub/friends.h b/Source/DiabloUI/hub/friends.h new file mode 100644 index 000000000..2ef641329 --- /dev/null +++ b/Source/DiabloUI/hub/friends.h @@ -0,0 +1,8 @@ +#pragma once + +namespace devilution { + +void HubLoadFriends(); +void HubInitFriends(); + +} // namespace devilution diff --git a/Source/DiabloUI/hub/hub.cpp b/Source/DiabloUI/hub/hub.cpp new file mode 100644 index 000000000..e6ad30ba0 --- /dev/null +++ b/Source/DiabloUI/hub/hub.cpp @@ -0,0 +1,221 @@ +#include "DiabloUI/hub/hub.h" + +#include + +#include "DiabloUI/button.h" +#include "DiabloUI/diabloui.h" +#include "DiabloUI/dialogs.h" +#include "DiabloUI/hero/selhero.h" +#include "DiabloUI/hub/chat.h" +#include "DiabloUI/hub/create.h" +#include "DiabloUI/hub/friends.h" +#include "DiabloUI/hub/join.h" +#include "DiabloUI/scrollbar.h" +#include "DiabloUI/selok.h" +#include "config.h" +#include "control.h" +#include "engine/assets.hpp" +#include "engine/load_clx.hpp" +#include "menu.h" +#include "options.h" +#include "storm/storm_net.hpp" +#include "utils/language.h" +#include "utils/str_cat.hpp" +#include "utils/utf8.hpp" + +namespace devilution { + +bool hubmain_endMenu; +std::vector> vecHubMainDialog; +OptionalOwnedClxSpriteList Layout; + +namespace { + +enum class HubPanels : uint8_t { + Chat, + Friends, + Create, + Join, +}; + +HubPanels HubPanel = HubPanels::Join; + +OptionalOwnedClxSpriteList PlayerIcons; +OptionalOwnedClxSpriteList PlayerSpawnIcon; +OptionalOwnedClxSpriteList PlayerLevelFont; +OptionalOwnedClxSpriteList LagGreen; +OptionalOwnedClxSpriteList LagYellow; +OptionalOwnedClxSpriteList LagRed; + +void LoadHubPlayerGraphics() +{ + PlayerIcons = LoadPcxSpriteList("ui_art\\heroport", -14); + PlayerSpawnIcon = LoadPcx("ui_art\\spwnport"); + PlayerLevelFont = LoadPcxSpriteList("ui_art\\heronum", 10); + LagGreen = LoadPcx("ui_art\\greenlag"); + LagYellow = LoadPcx("ui_art\\yellolag"); + LagRed = LoadPcx("ui_art\\redlag"); +} + +std::vector> vecHubBackground; + +void hub_Init() +{ + LoadDialogButtonGraphics(); + LoadHubScrollBar(); + + LoadBackgroundArt("ui_art\\bnconnbg"); + ArtBackgroundWidescreen = LoadOptionalClx("ui_art\\bnconnbgw.clx"); + + uint8_t transparentColor = 250; + AssetRef ref = FindAsset("ui_art\\xsmlogo"); + if (ref.ok() && ref.size() == 167723) + transparentColor = 32; + ArtLogo = LoadPcxSpriteList("ui_art\\xsmlogo", /*numFrames=*/15, transparentColor); + + switch (HubPanel) { + case HubPanels::Chat: + hubmain_Init(); + break; + case HubPanels::Friends: + break; + case HubPanels::Create: + HubLoadCreate(); + break; + case HubPanels::Join: + HubLoadJoin(); + break; + } + + LoadHubPlayerGraphics(); +} + +void hubmain_Free() +{ + FreeDialogButtonGraphics(); + ArtBackground = std::nullopt; + ArtBackgroundWidescreen = std::nullopt; + Layout = std::nullopt; + vecHubMainDialog.clear(); +} + +bool IsKnownHeroType(uint32_t gameMode, HeroClass heroClass) +{ + if (gameMode != GameIdDiabloFull && gameMode != GameIdHellfireFull) + return false; + + return heroClass == HeroClass::Warrior + || heroClass == HeroClass::Rogue + || heroClass == HeroClass::Sorcerer; +} + +} // namespace + +void LoadHubScrollBar() +{ + ScrollBarWidth = 17; + ScrollBarArrowFrame_UP_ACTIVE = 2; + ScrollBarArrowFrame_UP = 0; + ScrollBarArrowFrame_DOWN_ACTIVE = 3; + ScrollBarArrowFrame_DOWN = 1; + ArtScrollBarArrow = LoadPcxSpriteList("ui_art\\scrlarrw", 4); + ArtScrollBarBackground = LoadPcx("ui_art\\scrlbar"); + ArtScrollBarThumb = LoadPcx("ui_art\\scrlthmb"); +} + +void UiHubPlacePlayerIcon(Point position, uint32_t gameMode, const PlayerInfo &player) +{ + ClxSprite sprite = (*PlayerSpawnIcon)[0]; + if (IsKnownHeroType(gameMode, player.heroClass)) { + int level = player.diabloKillLevel * 3; + sprite = (*PlayerIcons)[level + static_cast(player.heroClass)]; + } + const SDL_Rect rect0 = MakeSdlRect(position.x, position.y, 0, 0); + vecHubMainDialog.push_back(std::make_unique(sprite, rect0)); + + const SDL_Rect rect1 = MakeSdlRect(position.x + 20, position.y + 5, 0, 0); + vecHubMainDialog.push_back(std::make_unique((*PlayerLevelFont)[player.level % 10], rect1)); + if (player.level > 9) { + const SDL_Rect rect2 = MakeSdlRect(position.x + 14, position.y + 5, 0, 0); + vecHubMainDialog.push_back(std::make_unique((*PlayerLevelFont)[player.level / 10], rect2)); + } +} + +void UiHubPlaceLatencyMeter(int latency, Point position) +{ + int bars = latency / 50 + 1; + bars = std::min(bars, 6); + + ClxSprite lagSprite = (*LagRed)[0]; + if (bars <= 2) + lagSprite = (*LagGreen)[0]; + else if (bars <= 4) + lagSprite = (*LagYellow)[0]; + + const SDL_Rect rect4 = MakeSdlRect(position.x, position.y, 3 * bars, 11); + vecHubMainDialog.push_back(std::make_unique(lagSprite, rect4)); +} + +void hubmain_GameSelection_Focus(int value) +{ +} + +void hubmain_Diff_Select(int value) +{ +} + +void hubmain_GameSelection_Esc() +{ + UiInitList_clear(); + hubmain_endMenu = true; +} + +void hub_GameSelection_Init() +{ + const Point uiPosition = GetUIRectangle().position; + + const SDL_Rect rect0 = MakeSdlRect(0, uiPosition.y, 0, 0); + vecHubBackground.push_back(std::make_unique((*ArtBackground)[0], rect0, UiFlags::AlignCenter)); + vecHubBackground.push_back(std::make_unique((*ArtBackgroundWidescreen)[0], rect0, UiFlags::AlignCenter)); + + vecHubBackground.push_back(std::make_unique(*ArtLogo, MakeSdlRect(uiPosition.x, uiPosition.y, 0, 0))); + + const SDL_Rect rect1 = MakeSdlRect(uiPosition.x, uiPosition.y + (*ArtBackground)[0].height() - (*Layout)[0].height(), (*Layout)[0].width(), (*Layout)[0].height()); + vecHubBackground.push_back(std::make_unique((*Layout)[0], rect1, UiFlags::AlignCenter)); + + switch (HubPanel) { + case HubPanels::Chat: + hubmain_GameSelection_Init(); + break; + case HubPanels::Friends: + break; + case HubPanels::Create: + HubInitCreate(); + break; + case HubPanels::Join: + HubInitJoin(); + break; + } + + UiInitList(hubmain_GameSelection_Focus, hubmain_Diff_Select, hubmain_GameSelection_Esc, vecHubMainDialog, true); +} + +bool UiHubMain() +{ + hub_Init(); + hub_GameSelection_Init(); + + hubmain_endMenu = false; + + while (!hubmain_endMenu) { + UiClearScreen(); + UiRenderItems(vecHubBackground); + if (HubPanel == HubPanels::Chat) + DrawChat(); + UiPollAndRender(); + } + hubmain_Free(); + + return true; +} +} // namespace devilution diff --git a/Source/DiabloUI/hub/hub.h b/Source/DiabloUI/hub/hub.h new file mode 100644 index 000000000..6b1e65e34 --- /dev/null +++ b/Source/DiabloUI/hub/hub.h @@ -0,0 +1,31 @@ +#pragma once + +#include +#include + +#include "DiabloUI/diabloui.h" +#include "engine/point.hpp" + +namespace devilution { + +struct PlayerInfo { + std::string name; + HeroClass heroClass; + uint8_t level; + uint8_t diabloKillLevel; + uint32_t gameMode; + int latency; +}; + +extern std::vector> vecHubMainDialog; +extern OptionalOwnedClxSpriteList Layout; + +void selgame_GameSelection_Init(); +void selgame_GameSelection_Focus(int value); +void selgame_GameSelection_Esc(); +void selgame_Diff_Select(int value); +void LoadHubScrollBar(); +void UiHubPlacePlayerIcon(Point position, uint32_t gameMode, const PlayerInfo &player); +void UiHubPlaceLatencyMeter(int latency, Point position); + +} // namespace devilution diff --git a/Source/DiabloUI/hub/join.cpp b/Source/DiabloUI/hub/join.cpp new file mode 100644 index 000000000..e78640818 --- /dev/null +++ b/Source/DiabloUI/hub/join.cpp @@ -0,0 +1,135 @@ +#include "DiabloUI/hub/join.h" + +#include "DiabloUI/hub/hub.h" +#include "DiabloUI/scrollbar.h" +#include "engine/load_pcx.hpp" + +namespace devilution { + +namespace { + +void DialogActionOK() +{ +} + +std::vector PlayerList; + +std::string relativeTime; +std::string difficultyString; +std::string GetDifficultyString(int difficulty) +{ + constexpr std::array DifficultyStrs = { N_("Normal"), N_("Nightmare"), N_("Hell") }; + const string_view difficultyStr = _(DifficultyStrs[difficulty]); + return fmt::format(fmt::runtime(_(/* TRANSLATORS: "Nightmare Difficulty" */ "{:s} Difficulty")), difficultyStr); +} + +char GameNameInput[32]; +char GamePasswordInput[32]; + +} // namespace + +void HubLoadJoin() +{ + Layout = LoadPcx("ui_art\\bnjoinbg", /*transparentColor=*/0); +} + +void HubInitJoin() +{ + const Point uiPosition = GetUIRectangle().position; + + const SDL_Rect rect0 = MakeSdlRect(uiPosition.x + 17, uiPosition.y + 150, 274, 26); + vecHubMainDialog.push_back(std::make_unique(_("Matching Public Games").data(), rect0, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite | UiFlags::AlignCenter, -1)); + + const SDL_Rect rect1 = MakeSdlRect(uiPosition.x + 312, uiPosition.y + 150, 311, 26); + vecHubMainDialog.push_back(std::make_unique(_("Join Game").data(), rect1, UiFlags::FontSizeDialog | UiFlags::ColorYellow | UiFlags::AlignCenter, -1)); + + const SDL_Rect rect2 = MakeSdlRect(uiPosition.x + 326, uiPosition.y + 185, 274, 26 * 2); + vecHubMainDialog.push_back(std::make_unique(_("To Join a game, enter the game\ninfomration below.").data(), rect2, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite, -1)); + + const SDL_Rect rect3 = MakeSdlRect(uiPosition.x + 326, uiPosition.y + 249, 86, 26); + vecHubMainDialog.push_back(std::make_unique(_("Name:").data(), rect3, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite | UiFlags::AlignRight, -1)); + const SDL_Rect rect4 = MakeSdlRect(uiPosition.x + 421, uiPosition.y + 250, 192, 29); + vecHubMainDialog.push_back(std::make_unique(_("Enter game name"), GameNameInput, 32, false, rect4, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite)); + + const SDL_Rect rect5 = MakeSdlRect(uiPosition.x + 326, uiPosition.y + 294, 86, 26); + vecHubMainDialog.push_back(std::make_unique(_("Password:").data(), rect5, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite | UiFlags::AlignRight, -1)); + const SDL_Rect rect6 = MakeSdlRect(uiPosition.x + 421, uiPosition.y + 295, 192, 29); + vecHubMainDialog.push_back(std::make_unique(_("Enter game password"), GamePasswordInput, 32, false, rect6, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite)); + + const SDL_Rect rectScrollbar = MakeSdlRect(uiPosition.x + 269, uiPosition.y + 189, 17, 274); + vecHubMainDialog.push_back(std::make_unique((*ArtScrollBarBackground)[0], (*ArtScrollBarThumb)[0], *ArtScrollBarArrow, rectScrollbar)); + + UiHubPlaceLatencyMeter(75, { uiPosition.x + 245, uiPosition.y + 195 }); + + const SDL_Rect rect7 = MakeSdlRect(uiPosition.x + 27, uiPosition.y + 186, 218, 26); + vecHubMainDialog.push_back(std::make_unique("CWEJZ", rect7, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite, -1)); + + const Point detailsPosition = uiPosition + Displacement { 326, 342 }; + int yOffset = 0; + + difficultyString = GetDifficultyString(1); + const SDL_Rect rect8 = MakeSdlRect(detailsPosition.x, detailsPosition.y + yOffset - 6, 149, 18); + vecHubMainDialog.push_back(std::make_unique(difficultyString.data(), rect8, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite, -1)); + yOffset += 16; + + int seconds = 76 * 60; + int hours = seconds / 3600; + int minutes = (seconds % 3600) / 60; + relativeTime = fmt::format(fmt::runtime(ngettext("{:d} minute", "{:d} minutes", minutes)), minutes); + if (hours > 0) { + if (minutes > 0) { + relativeTime = fmt::format(fmt::runtime(ngettext("{:d} minute", "{:d} minutes", minutes)), minutes); + relativeTime = fmt::format(fmt::runtime(ngettext( + /* TRANSLATORS: {:s} the translated minuts (3 minuts).*/ + "Time: {:d} hour and {:s}", + "Time: {:d} hours and {:s}", + hours)), + hours, relativeTime); + } else { + relativeTime = fmt::format(fmt::runtime(ngettext("Time: {:d} hour", "Time: {:d} hours", hours)), hours); + } + } else { + relativeTime = fmt::format(fmt::runtime(_("Time: {:s}")), relativeTime); + } + const SDL_Rect rect9 = MakeSdlRect(detailsPosition.x, detailsPosition.y + yOffset - 6, 149, 18); + vecHubMainDialog.push_back(std::make_unique(relativeTime.data(), rect9, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite, -1)); + yOffset += 16; + + const SDL_Rect rect10 = MakeSdlRect(detailsPosition.x, detailsPosition.y + yOffset - 6, 51, 18); + vecHubMainDialog.push_back(std::make_unique(_("Players:").data(), rect10, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite, -1)); + + PlayerList.emplace_back(PlayerInfo { "KPhoenix", HeroClass::Warrior, 35, 2, GameIdDiabloFull, 0 }); + PlayerList.emplace_back(PlayerInfo { "AJenbo", HeroClass::Rogue, 23, 1, GameIdDiabloFull, 0 }); + PlayerList.emplace_back(PlayerInfo { "glebm", HeroClass::Sorcerer, 19, 0, GameIdDiabloFull, 0 }); + + for (auto &player : PlayerList) { + UiHubPlacePlayerIcon({ detailsPosition.x + 52, detailsPosition.y + yOffset }, GameIdDiabloFull, player); + const SDL_Rect rect = MakeSdlRect(detailsPosition.x + 52 + 30, detailsPosition.y + yOffset - 6, 149 - 30, 18); + vecHubMainDialog.push_back(std::make_unique(player.name.data(), rect, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite, -1)); + + yOffset += 16; + } + + const Point detailsPosition2 = detailsPosition + Displacement { 184, 0 }; + yOffset = 0; + + const SDL_Rect rect11 = MakeSdlRect(detailsPosition2.x, detailsPosition2.y + yOffset - 6, 149, 18); + vecHubMainDialog.push_back(std::make_unique(_("Run in Town").data(), rect11, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite, -1)); + yOffset += 16; + + const SDL_Rect rect12 = MakeSdlRect(detailsPosition2.x, detailsPosition2.y + yOffset - 6, 149, 18); + vecHubMainDialog.push_back(std::make_unique(_("Theo Quest").data(), rect12, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite, -1)); + yOffset += 16; + + const SDL_Rect rect13 = MakeSdlRect(detailsPosition2.x, detailsPosition2.y + yOffset - 6, 149, 18); + vecHubMainDialog.push_back(std::make_unique(_("Friendly Fire").data(), rect13, UiFlags::FontSizeDialog | UiFlags::ColorDialogWhite, -1)); + yOffset += 16; + + const SDL_Rect rect14 = MakeSdlRect(uiPosition.x + 264 + 188, uiPosition.y + 335 + 103, 85, 35); + vecHubMainDialog.push_back(std::make_unique(_("OK"), &DialogActionOK, rect14)); + + const SDL_Rect rect15 = MakeSdlRect(uiPosition.x + 264 + 283, uiPosition.y + 335 + 103, 85, 35); + vecHubMainDialog.push_back(std::make_unique(_("Cancel"), &DialogActionOK, rect15)); +} + +} // namespace devilution diff --git a/Source/DiabloUI/hub/join.h b/Source/DiabloUI/hub/join.h new file mode 100644 index 000000000..872f2750f --- /dev/null +++ b/Source/DiabloUI/hub/join.h @@ -0,0 +1,8 @@ +#pragma once + +namespace devilution { + +void HubLoadJoin(); +void HubInitJoin(); + +} // namespace devilution diff --git a/Source/DiabloUI/scrollbar.cpp b/Source/DiabloUI/scrollbar.cpp index 7ca5d587b..d80518738 100644 --- a/Source/DiabloUI/scrollbar.cpp +++ b/Source/DiabloUI/scrollbar.cpp @@ -7,9 +7,19 @@ namespace devilution { OptionalOwnedClxSpriteList ArtScrollBarBackground; OptionalOwnedClxSpriteList ArtScrollBarThumb; OptionalOwnedClxSpriteList ArtScrollBarArrow; +Uint16 ScrollBarWidth; +uint16_t ScrollBarArrowFrame_UP_ACTIVE; +uint16_t ScrollBarArrowFrame_UP; +uint16_t ScrollBarArrowFrame_DOWN_ACTIVE; +uint16_t ScrollBarArrowFrame_DOWN; void LoadScrollBar() { + ScrollBarWidth = 25; + ScrollBarArrowFrame_UP_ACTIVE = 0; + ScrollBarArrowFrame_UP = 1; + ScrollBarArrowFrame_DOWN_ACTIVE = 2; + ScrollBarArrowFrame_DOWN = 3; ArtScrollBarBackground = LoadPcx("ui_art\\sb_bg"); ArtScrollBarThumb = LoadPcx("ui_art\\sb_thumb"); ArtScrollBarArrow = LoadPcxSpriteList("ui_art\\sb_arrow", 4); diff --git a/Source/DiabloUI/scrollbar.h b/Source/DiabloUI/scrollbar.h index 1bfddcfac..de2da1a58 100644 --- a/Source/DiabloUI/scrollbar.h +++ b/Source/DiabloUI/scrollbar.h @@ -11,23 +11,19 @@ namespace devilution { extern OptionalOwnedClxSpriteList ArtScrollBarBackground; extern OptionalOwnedClxSpriteList ArtScrollBarThumb; extern OptionalOwnedClxSpriteList ArtScrollBarArrow; -constexpr Uint16 ScrollBarBgWidth = 25; +extern Uint16 ScrollBarWidth; -enum ScrollBarArrowFrame : uint8_t { - ScrollBarArrowFrame_UP_ACTIVE, - ScrollBarArrowFrame_UP, - ScrollBarArrowFrame_DOWN_ACTIVE, - ScrollBarArrowFrame_DOWN, -}; - -constexpr Uint16 ScrollBarArrowWidth = 25; +extern uint16_t ScrollBarArrowFrame_UP_ACTIVE; +extern uint16_t ScrollBarArrowFrame_UP; +extern uint16_t ScrollBarArrowFrame_DOWN_ACTIVE; +extern uint16_t ScrollBarArrowFrame_DOWN; inline SDL_Rect UpArrowRect(const UiScrollbar &bar) { return MakeSdlRect( bar.m_rect.x, bar.m_rect.y, - ScrollBarArrowWidth, + ScrollBarWidth, bar.m_arrow[0].height()); } @@ -36,7 +32,7 @@ inline SDL_Rect DownArrowRect(const UiScrollbar &bar) return MakeSdlRect( bar.m_rect.x, bar.m_rect.y + bar.m_rect.h - bar.m_arrow[0].height(), - ScrollBarArrowWidth, + ScrollBarWidth, bar.m_arrow[0].height()); } @@ -50,7 +46,7 @@ inline SDL_Rect BarRect(const UiScrollbar &bar) return MakeSdlRect( bar.m_rect.x, bar.m_rect.y + bar.m_arrow[0].height(), - ScrollBarArrowWidth, + ScrollBarWidth, BarHeight(bar)); } diff --git a/Source/DiabloUI/ui_flags.hpp b/Source/DiabloUI/ui_flags.hpp index 9c3c9d33a..f9d9811a3 100644 --- a/Source/DiabloUI/ui_flags.hpp +++ b/Source/DiabloUI/ui_flags.hpp @@ -21,6 +21,7 @@ enum class UiFlags : uint32_t { ColorUiSilver = 1 << 7, ColorUiGoldDark = 1 << 8, ColorUiSilverDark = 1 << 9, + ColorUiGreen = 1 << 6, ColorDialogWhite = 1 << 10, ColorYellow = 1 << 11, ColorGold = 1 << 12, diff --git a/Source/multi.cpp b/Source/multi.cpp index 9d8498b26..31a58fe86 100644 --- a/Source/multi.cpp +++ b/Source/multi.cpp @@ -440,6 +440,8 @@ bool InitSingle(GameData *gameData) return true; } +extern int provider; + bool InitMulti(GameData *gameData) { Players.resize(MAX_PLRS); @@ -452,8 +454,13 @@ bool InitMulti(GameData *gameData) } RegisterNetEventHandlers(); - if (UiSelectGame(gameData, &playerId)) - break; + if (true) { + if (UiHubMain()) + break; + } else { + if (UiSelectGame(gameData, &playerId)) + break; + } gbSelectProvider = true; }