Browse Source

DiabloUI: Handle logo like all the other elements

Adds the `animated` flag to `UiImage`, allowing us to
remove special handling for the logo.
pull/319/head
Gleb Mazovetskiy 7 years ago committed by Anders Jenbo
parent
commit
b536d0efa2
  1. 17
      SourceX/DiabloUI/diabloui.cpp
  2. 4
      SourceX/DiabloUI/diabloui.h
  3. 1
      SourceX/DiabloUI/dialogs.cpp
  4. 3
      SourceX/DiabloUI/mainmenu.cpp
  5. 3
      SourceX/DiabloUI/selconn.cpp
  6. 13
      SourceX/DiabloUI/selgame.cpp
  7. 3
      SourceX/DiabloUI/selhero.cpp
  8. 3
      SourceX/DiabloUI/selyesno.cpp
  9. 4
      SourceX/DiabloUI/title.cpp
  10. 17
      SourceX/DiabloUI/ui_item.h

17
SourceX/DiabloUI/diabloui.cpp

@ -627,7 +627,6 @@ void UiPollAndRender() {
UiFocusNavigation(&event); UiFocusNavigation(&event);
} }
UiRenderItems(gUiItems, gUiItemCnt); UiRenderItems(gUiItems, gUiItemCnt);
DrawLogo();
DrawMouse(); DrawMouse();
UiFadeIn(); UiFadeIn();
} }
@ -651,7 +650,16 @@ void Render(const UiArtText &ui_art_text)
void Render(const UiImage &ui_image) void Render(const UiImage &ui_image)
{ {
DrawArt(ui_image.rect.x, ui_image.rect.y, ui_image.art, ui_image.frame, ui_image.rect.w); int x = ui_image.rect.x;
if ((ui_image.flags & UIS_CENTER) && ui_image.art != nullptr) {
const int x_offset = GetCenterOffset(ui_image.art->w(), ui_image.rect.w);
x += x_offset;
}
if (ui_image.animated) {
DrawAnimatedArt(ui_image.art, x, ui_image.rect.y);
} else {
DrawArt(x, ui_image.rect.y, ui_image.art, ui_image.frame, ui_image.rect.w);
}
} }
void Render(const UiArtTextButton &ui_button) void Render(const UiArtTextButton &ui_button)
@ -863,11 +871,6 @@ bool UiItemMouseEvents(SDL_Event *event, UiItem *items, std::size_t size)
return handled; return handled;
} }
void DrawLogo(int t, int size)
{
DrawAnimatedArt(&ArtLogos[size], GetCenterOffset(ArtLogos[size].w()), t);
}
void DrawMouse() void DrawMouse()
{ {
SDL_GetMouseState(&MouseX, &MouseY); SDL_GetMouseState(&MouseX, &MouseY);

4
SourceX/DiabloUI/diabloui.h

@ -27,6 +27,9 @@ extern Art ArtCursor;
extern Art ArtHero; extern Art ArtHero;
extern bool gbSpawned; extern bool gbSpawned;
constexpr auto MAINMENU_BACKGROUND = UiImage(&ArtBackground, { 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT });
constexpr auto MAINMENU_LOGO = UiImage(&ArtLogos[LOGO_MED], /*animated=*/true, /*frame=*/0, { 0, 0, 0, 0 }, UIS_CENTER);
template <class T, size_t N> template <class T, size_t N>
constexpr size_t size(T (&)[N]) constexpr size_t size(T (&)[N])
{ {
@ -41,7 +44,6 @@ bool UiFocusNavigation(SDL_Event *event);
bool UiItemMouseEvents(SDL_Event *event, UiItem *items, std::size_t size); bool UiItemMouseEvents(SDL_Event *event, UiItem *items, std::size_t size);
int GetCenterOffset(int w, int bw = 0); int GetCenterOffset(int w, int bw = 0);
void LoadPalInMem(const PALETTEENTRY *pPal); void LoadPalInMem(const PALETTEENTRY *pPal);
void DrawLogo(int t = 0, int size = LOGO_MED);
void DrawMouse(); void DrawMouse();
void LoadBackgroundArt(char *pszFile); void LoadBackgroundArt(char *pszFile);
void SetMenu(int MenuId); void SetMenu(int MenuId);

1
SourceX/DiabloUI/dialogs.cpp

@ -180,7 +180,6 @@ void DialogLoop(UiItem *items, std::size_t num_items, UiItem *render_behind, std
} }
} }
UiRenderItems(render_behind, render_behind_size); UiRenderItems(render_behind, render_behind_size);
DrawLogo();
UiRenderItems(items, num_items); UiRenderItems(items, num_items);
DrawMouse(); DrawMouse();
UiFadeIn(); UiFadeIn();

3
SourceX/DiabloUI/mainmenu.cpp

@ -15,7 +15,8 @@ UiListItem MAINMENU_DIALOG_ITEMS[] = {
{"Exit Diablo", MAINMENU_EXIT_DIABLO} {"Exit Diablo", MAINMENU_EXIT_DIABLO}
}; };
UiItem MAINMENU_DIALOG[] = { UiItem MAINMENU_DIALOG[] = {
UiImage(&ArtBackground, { 0, 0, 640, 480 }), MAINMENU_BACKGROUND,
MAINMENU_LOGO,
UiList(MAINMENU_DIALOG_ITEMS, 64, 192, 510, 43, UIS_HUGE | UIS_GOLD | UIS_CENTER), UiList(MAINMENU_DIALOG_ITEMS, 64, 192, 510, 43, UIS_HUGE | UIS_GOLD | UIS_CENTER),
UiArtText(nullptr, { 17, 444, 605, 21 }, UIS_SMALL) UiArtText(nullptr, { 17, 444, 605, 21 }, UIS_SMALL)
}; };

3
SourceX/DiabloUI/selconn.cpp

@ -29,7 +29,8 @@ UiListItem SELCONN_DIALOG_ITEMS[] = {
#endif #endif
}; };
UiItem SELCONNECT_DIALOG[] = { UiItem SELCONNECT_DIALOG[] = {
UiImage(&ArtBackground, { 0, 0, 640, 480 }), MAINMENU_BACKGROUND,
MAINMENU_LOGO,
UiArtText("Multi Player Game", { 24, 161, 590, 35 }, UIS_CENTER | UIS_BIG), UiArtText("Multi Player Game", { 24, 161, 590, 35 }, UIS_CENTER | UIS_BIG),
UiArtText(selconn_MaxPlayers, { 35, 218, 205, 21 }), UiArtText(selconn_MaxPlayers, { 35, 218, 205, 21 }),
UiArtText("Requirements:", { 35, 256, 205, 21 }), UiArtText("Requirements:", { 35, 256, 205, 21 }),

13
SourceX/DiabloUI/selgame.cpp

@ -21,7 +21,6 @@ int gbDifficulty;
static _SNETPROGRAMDATA *m_client_info; static _SNETPROGRAMDATA *m_client_info;
extern DWORD provider; extern DWORD provider;
constexpr UiImage SELGAME_BACKGROUND = UiImage(&ArtBackground, { 0, 0, 640, 480 });
constexpr UiArtTextButton SELGAME_OK = UiArtTextButton("OK", &UiFocusNavigationSelect, { 299, 427, 140, 35 }, UIS_CENTER | UIS_VCENTER | UIS_BIG | UIS_GOLD); constexpr UiArtTextButton SELGAME_OK = UiArtTextButton("OK", &UiFocusNavigationSelect, { 299, 427, 140, 35 }, UIS_CENTER | UIS_VCENTER | UIS_BIG | UIS_GOLD);
constexpr UiArtTextButton SELGAME_CANCEL = UiArtTextButton("CANCEL", &UiFocusNavigationEsc, { 449, 427, 140, 35 }, UIS_CENTER | UIS_VCENTER | UIS_BIG | UIS_GOLD); constexpr UiArtTextButton SELGAME_CANCEL = UiArtTextButton("CANCEL", &UiFocusNavigationEsc, { 449, 427, 140, 35 }, UIS_CENTER | UIS_VCENTER | UIS_BIG | UIS_GOLD);
@ -33,7 +32,8 @@ UiListItem SELDIFF_DIALOG_ITEMS[] = {
{ "Hell", DIFF_HELL } { "Hell", DIFF_HELL }
}; };
UiItem SELDIFF_DIALOG[] = { UiItem SELDIFF_DIALOG[] = {
SELGAME_BACKGROUND, MAINMENU_BACKGROUND,
MAINMENU_LOGO,
UiArtText("Create Game", { 24, 161, 590, 35 }, UIS_CENTER | UIS_BIG), UiArtText("Create Game", { 24, 161, 590, 35 }, UIS_CENTER | UIS_BIG),
UiArtText(selgame_Label, { 34, 211, 205, 33 }, UIS_CENTER | UIS_BIG), // DIFF UiArtText(selgame_Label, { 34, 211, 205, 33 }, UIS_CENTER | UIS_BIG), // DIFF
SELGAME_DESCRIPTION, SELGAME_DESCRIPTION,
@ -51,7 +51,8 @@ UiListItem SELUDPGAME_DIALOG_ITEMS[] = {
{ "Enter IP", 1 }, { "Enter IP", 1 },
}; };
UiItem SELUDPGAME_DIALOG[] = { UiItem SELUDPGAME_DIALOG[] = {
SELGAME_BACKGROUND, MAINMENU_BACKGROUND,
MAINMENU_LOGO,
SELUDPGAME_TITLE, SELUDPGAME_TITLE,
SELUDPGAME_DESCRIPTION_LABEL, SELUDPGAME_DESCRIPTION_LABEL,
SELGAME_DESCRIPTION, SELGAME_DESCRIPTION,
@ -62,7 +63,8 @@ UiItem SELUDPGAME_DIALOG[] = {
}; };
UiItem ENTERIP_DIALOG[] = { UiItem ENTERIP_DIALOG[] = {
SELGAME_BACKGROUND, MAINMENU_BACKGROUND,
MAINMENU_LOGO,
SELUDPGAME_TITLE, SELUDPGAME_TITLE,
SELUDPGAME_DESCRIPTION_LABEL, SELUDPGAME_DESCRIPTION_LABEL,
SELGAME_DESCRIPTION, SELGAME_DESCRIPTION,
@ -73,7 +75,8 @@ UiItem ENTERIP_DIALOG[] = {
}; };
UiItem ENTERPASSWORD_DIALOG[] = { UiItem ENTERPASSWORD_DIALOG[] = {
SELGAME_BACKGROUND, MAINMENU_BACKGROUND,
MAINMENU_LOGO,
SELUDPGAME_TITLE, SELUDPGAME_TITLE,
SELUDPGAME_DESCRIPTION_LABEL, SELUDPGAME_DESCRIPTION_LABEL,
SELGAME_DESCRIPTION, SELGAME_DESCRIPTION,

3
SourceX/DiabloUI/selhero.cpp

@ -35,7 +35,8 @@ BOOL(*gfnHeroDelete)
namespace { namespace {
UiItem SELHERO_DIALOG[] = { UiItem SELHERO_DIALOG[] = {
UiImage(&ArtBackground, { 0, 0, 640, 480 }), MAINMENU_BACKGROUND,
MAINMENU_LOGO,
UiArtText(title, { 24, 161, 590, 35 }, UIS_CENTER | UIS_BIG), UiArtText(title, { 24, 161, 590, 35 }, UIS_CENTER | UIS_BIG),
UiImage(&ArtHero, UI_NUM_CLASSES, { 30, 211, 180, 76 }), UiImage(&ArtHero, UI_NUM_CLASSES, { 30, 211, 180, 76 }),
UiArtText("Level:", { 39, 323, 110, 21 }, UIS_RIGHT), UiArtText("Level:", { 39, 323, 110, 21 }, UIS_RIGHT),

3
SourceX/DiabloUI/selyesno.cpp

@ -19,7 +19,8 @@ UiListItem SELYESNO_DIALOG_ITEMS[] = {
}; };
UiItem SELYESNO_DIALOG[] = { UiItem SELYESNO_DIALOG[] = {
UiImage(&ArtBackground, { 0, 0, 640, 480 }), MAINMENU_BACKGROUND,
MAINMENU_LOGO,
UiArtText(selyesno_title, { 24, 161, 590, 35 }, UIS_CENTER | UIS_BIG), UiArtText(selyesno_title, { 24, 161, 590, 35 }, UIS_CENTER | UIS_BIG),
UiArtText(selyesno_confirmationMessage, { 120, 236, 280, 168 }, UIS_MED), UiArtText(selyesno_confirmationMessage, { 120, 236, 280, 168 }, UIS_MED),
UiList(SELYESNO_DIALOG_ITEMS, 230, 390, 180, 35, UIS_CENTER | UIS_BIG | UIS_GOLD) UiList(SELYESNO_DIALOG_ITEMS, 230, 390, 180, 35, UIS_CENTER | UIS_BIG | UIS_GOLD)

4
SourceX/DiabloUI/title.cpp

@ -18,7 +18,8 @@ void title_Free()
BOOL UiTitleDialog(int a1) BOOL UiTitleDialog(int a1)
{ {
UiItem TITLESCREEN_DIALOG[] = { UiItem TITLESCREEN_DIALOG[] = {
UiImage(&ArtBackground, { 0, 0, 640, 480 }), MAINMENU_BACKGROUND,
UiImage(&ArtLogos[LOGO_BIG], /*animated=*/true, /*frame=*/0, { 0, 182, 0, 0 }, UIS_CENTER),
UiArtText("Copyright \xA9 1996-2001 Blizzard Entertainment", { 49, 410, 550, 26 }, UIS_MED | UIS_CENTER) UiArtText("Copyright \xA9 1996-2001 Blizzard Entertainment", { 49, 410, 550, 26 }, UIS_MED | UIS_CENTER)
}; };
@ -30,7 +31,6 @@ BOOL UiTitleDialog(int a1)
SDL_Event event; SDL_Event event;
while (!endMenu && SDL_GetTicks() < timeOut) { while (!endMenu && SDL_GetTicks() < timeOut) {
UiRenderItems(TITLESCREEN_DIALOG, size(TITLESCREEN_DIALOG)); UiRenderItems(TITLESCREEN_DIALOG, size(TITLESCREEN_DIALOG));
DrawLogo(182, LOGO_BIG);
UiFadeIn(); UiFadeIn();
while (SDL_PollEvent(&event)) { while (SDL_PollEvent(&event)) {

17
SourceX/DiabloUI/ui_item.h

@ -70,19 +70,26 @@ struct UiItemBase {
}; };
struct UiImage : public UiItemBase { struct UiImage : public UiItemBase {
constexpr UiImage(Art *art, SDL_Rect rect, int flags = 0) constexpr UiImage(Art *art, bool animated, int frame, SDL_Rect rect, int flags = 0)
: UiImage(art, /*frame=*/0, rect, flags) : UiItemBase(rect, flags)
, art(art)
, animated(animated)
, frame(frame)
{ {
} }
constexpr UiImage(Art *art, int frame, SDL_Rect rect, int flags = 0) constexpr UiImage(Art *art, int frame, SDL_Rect rect, int flags = 0)
: UiItemBase(rect, flags) : UiImage(art, /*animated=*/false, frame, rect, flags)
, art(art) {
, frame(frame) }
constexpr UiImage(Art *art, SDL_Rect rect, int flags = 0)
: UiImage(art, /*frame=*/0, rect, flags)
{ {
} }
Art *art; Art *art;
bool animated;
int frame; int frame;
}; };

Loading…
Cancel
Save