# HG changeset patch
# User a.parshin
# Date 1431422902 -7200
# Node ID fb42e2662c38004f071c000f65293c22639313de
# Parent 3121fb54a11032b878d730fdd93cc331a26eba82
Chest UI refactored to a class
diff -r 3121fb54a110 -r fb42e2662c38 Build/Visual Studio 2013/World of Might and Magic.vcxproj
--- a/Build/Visual Studio 2013/World of Might and Magic.vcxproj Tue May 12 11:07:32 2015 +0200
+++ b/Build/Visual Studio 2013/World of Might and Magic.vcxproj Tue May 12 11:28:22 2015 +0200
@@ -167,6 +167,7 @@
+
@@ -345,6 +346,7 @@
+
diff -r 3121fb54a110 -r fb42e2662c38 Build/Visual Studio 2013/World of Might and Magic.vcxproj.filters
--- a/Build/Visual Studio 2013/World of Might and Magic.vcxproj.filters Tue May 12 11:07:32 2015 +0200
+++ b/Build/Visual Studio 2013/World of Might and Magic.vcxproj.filters Tue May 12 11:28:22 2015 +0200
@@ -598,6 +598,9 @@
GUI\UI
+
+ GUI\UI
+
@@ -1363,6 +1366,9 @@
GUI\UI
+
+ GUI\UI
+
diff -r 3121fb54a110 -r fb42e2662c38 Engine/Objects/Chest.cpp
--- a/Engine/Objects/Chest.cpp Tue May 12 11:07:32 2015 +0200
+++ b/Engine/Objects/Chest.cpp Tue May 12 11:28:22 2015 +0200
@@ -1,8 +1,7 @@
#define _CRTDBG_MAP_ALLOC
+#define _CRT_SECURE_NO_WARNINGS
#include
#include
-
-#define _CRT_SECURE_NO_WARNINGS
#include
#include "Engine/Engine.h"
@@ -16,26 +15,29 @@
#include "../Graphics/Outdoor.h"
#include "../Graphics/DecorationList.h"
#include "../Party.h"
-#include "Media/Audio/AudioPlayer.h"
#include "../OurMath.h"
#include "../Texts.h"
#include "ObjectList.h"
-#include "GUI/GUIWindow.h"
#include "../Timer.h"
#include "SpriteObject.h"
-#include "IO/Mouse.h"
#include "../Graphics/Viewport.h"
#include "../Graphics/Level/Decoration.h"
+#include "IO/Mouse.h"
+
+#include "GUI/UI/Chest.h"
+
+#include "Media/Audio/AudioPlayer.h"
+
+
+
size_t uNumChests; // idb
struct ChestList *pChestList;
std::array pChests;
+extern int pChestWidthsByType[8];
+extern int pChestHeightsByType[8];
-const int pChestPixelOffsetX[8] = {42, 18, 18, 42, 42, 42, 18, 42};
-const int pChestPixelOffsetY[8] = {34, 30, 30, 34, 34, 34, 30, 34};
-const int pChestWidthsByType[8] = {9, 9, 9, 9, 9, 9, 9, 9};
-const int pChestHeightsByType[8] = {9, 9, 9, 9, 9, 9, 9, 9};
//----- (0042041E) --------------------------------------------------------
@@ -185,11 +187,7 @@
pPlayers[uActiveCharacter]->PlaySound(SPEECH_4, 0);
}
OpenedTelekinesis = false;
- pChestWindow = pGUIWindow_CurrentMenu = new GUIWindow_Chest(0, 0, window->GetWidth(), window->GetHeight(), uChestID, 0);
- pBtn_ExitCancel = pChestWindow->CreateButton(471, 445, 169, 35, 1, 0, UIMSG_Escape, 0, 0, pGlobalTXT_LocalizationStrings[79], pIcons_LOD->GetTexture(uExitCancelTextureId), 0);// Exit
- pChestWindow->CreateButton( 7, 8, 460, 343, 1, 0, UIMSG_CHEST_ClickItem, 0, 0, "", 0);
- current_screen_type = SCREEN_CHEST;
- pEventTimer->Pause();
+ pChestWindow = pGUIWindow_CurrentMenu = new GUIWindow_Chest(uChestID);
return true;
}
@@ -214,68 +212,6 @@
}
}
-//----- (0042092D) --------------------------------------------------------
-void Chest::DrawChestUI(signed int uChestID)
- {
-
- int chestBitmapId; // eax@1
- unsigned int v5; // eax@1
- int chest_item_index; // ecx@3
- unsigned int item_texture_id; // eax@4
- Texture *item_texture; // esi@4
- signed int itemPixelWidth; // ecx@4
- signed int itemPixelHeght; // edx@4
-// signed int v11; // eax@4
- int v12; // eax@6
- int v13; // eax@6
- unsigned int itemPixelPosX; // ST34_4@8
- int itemPixelPosY; // edi@8
- int *v16; // [sp+Ch] [bp-28h]@1
-// int v17; // [sp+10h] [bp-24h]@4
- int chest_offs_y; // [sp+14h] [bp-20h]@1
- signed int chestHeghtCells; // [sp+18h] [bp-1Ch]@1
- int chest_offs_x; // [sp+1Ch] [bp-18h]@1
- signed int chestWidthCells; // [sp+20h] [bp-14h]@1
- signed int item_counter; // [sp+30h] [bp-4h]@1
-
- v16 = pRenderer->pActiveZBuffer;
- pRenderer->ClearZBuffer(0, 479);
- chestBitmapId = pChests[uChestID].uChestBitmapID;
- chest_offs_x = pChestPixelOffsetX[chestBitmapId];
- chest_offs_y = pChestPixelOffsetY[chestBitmapId];
- chestWidthCells = pChestWidthsByType[chestBitmapId];
- chestHeghtCells = pChestHeightsByType[chestBitmapId];
- sprintfex(pTmpBuf.data(), "chest%02d", pChestList->pChests[chestBitmapId].uTextureID);
- v5 = pIcons_LOD->LoadTexture(pTmpBuf.data(), TEXTURE_16BIT_PALETTE);
- pRenderer->DrawTextureIndexed(8u, 8u, pIcons_LOD->GetTexture(v5));
-
- for (item_counter = 0; item_counter < chestWidthCells * chestHeghtCells; ++item_counter)
- {
- chest_item_index = pChests[uChestID].pInventoryIndices[item_counter];
- if ( chest_item_index > 0 )
- {
- item_texture_id = pIcons_LOD->LoadTexture(
- //pItemsTable->pItems[*(int *)((char *)&pOtherOverlayList->pOverlays[49].field_4 + 36 * v6 + v3 * 5324)].pIconName,
- pChests[uChestID].igChestItems[chest_item_index - 1].GetIconName(), TEXTURE_16BIT_PALETTE);
- item_texture = pIcons_LOD->GetTexture(item_texture_id);
- itemPixelWidth = item_texture->uTextureWidth;
- itemPixelHeght = item_texture->uTextureHeight;
- if ( itemPixelWidth < 14 )
- itemPixelWidth = 14;
- v12 = itemPixelWidth - 14;
- v12 = v12 & 0xFFFFFFE0;
- v13 = v12 + 32;
- if ( itemPixelHeght < 14 )
- itemPixelHeght = 14;
- itemPixelPosX = chest_offs_x + 32 * (item_counter % chestWidthCells) + ((signed int)(v13 - itemPixelWidth)/2);
- itemPixelPosY = chest_offs_y + 32 * (item_counter / chestHeghtCells) +
- ((signed int)(((itemPixelHeght - 14) & 0xFFFFFFE0) + 32- item_texture->uTextureHeight ) /2);
- pRenderer->DrawTextureIndexedAlpha( itemPixelPosX, itemPixelPosY, item_texture);
- ZBuffer_DoFill2(&v16[itemPixelPosX + pSRZBufferLineOffsets[itemPixelPosY]], item_texture, item_counter + 1);
- }
- }
- pRenderer->DrawTextureIndexed(pBtn_ExitCancel->uX, pBtn_ExitCancel->uY, pIcons_LOD->GetTexture(uExitCancelTextureId));
- }
//----- (0041FE71) --------------------------------------------------------
diff -r 3121fb54a110 -r fb42e2662c38 Engine/Objects/Chest.h
--- a/Engine/Objects/Chest.h Tue May 12 11:07:32 2015 +0200
+++ b/Engine/Objects/Chest.h Tue May 12 11:28:22 2015 +0200
@@ -1,5 +1,5 @@
#pragma once
-
+#include "Engine/Objects/Items.h"
@@ -54,11 +54,10 @@
static bool CanPlaceItemAt(signed int a1, int a2, signed int uChestID);
static int CountChestItems(signed int uChestID);
- static int PutItemInChest(int a1, ItemGen *a2, signed int uChestID);
+ static int PutItemInChest(int a1, struct ItemGen *a2, signed int uChestID);
static void PlaceItemAt(unsigned int put_cell_pos, unsigned int uItemIdx, signed int uChestID);
static void PlaceItems(signed int uChestID);
static bool Open(signed int uChestID);
- static void DrawChestUI(signed int uChestID);
static void ToggleFlag(signed int uChestID, unsigned __int16 uFlag, unsigned int bToggle);
static void ChestUI_WritePointedObjectStatusString();
static void OnChestLeftClick();
diff -r 3121fb54a110 -r fb42e2662c38 GUI/GUIWindow.cpp
--- a/GUI/GUIWindow.cpp Tue May 12 11:07:32 2015 +0200
+++ b/GUI/GUIWindow.cpp Tue May 12 11:28:22 2015 +0200
@@ -1314,23 +1314,6 @@
GameUI_DrawBranchlessDialogue();
}
-void GUIWindow_Chest::Update()
-{
-// -----------------------------------
-// 004156F0 GUI_UpdateWindows --- part
- if (current_screen_type == SCREEN_CHEST)
- {
- Chest::DrawChestUI(par1C);
- }
- else if (current_screen_type == SCREEN_CHEST_INVENTORY)
- {
- pRenderer->ClearZBuffer(0, 479);
- draw_leather();
- CharacterUI_InventoryTab_Draw(pPlayers[uActiveCharacter], true);
- pRenderer->DrawTextureIndexed(pBtn_ExitCancel->uX, pBtn_ExitCancel->uY, pIcons_LOD->GetTexture(uExitCancelTextureId));
- }
-}
-
void GUIWindow_House::Update()
{
// -----------------------------------
diff -r 3121fb54a110 -r fb42e2662c38 GUI/GUIWindow.h
--- a/GUI/GUIWindow.h Tue May 12 11:07:32 2015 +0200
+++ b/GUI/GUIWindow.h Tue May 12 11:28:22 2015 +0200
@@ -395,21 +395,6 @@
virtual void Update();
virtual void Release();
};
-struct GUIWindow_Chest : public GUIWindow
-{
- GUIWindow_Chest(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint) :
- GUIWindow(x, y, width, height, button, hint)
- {
- CreateButton(61, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 1, '1', "", 0);
- CreateButton(177, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 2, '2', "", 0);
- CreateButton(292, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 3, '3', "", 0);
- CreateButton(407, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 4, '4', "", 0);
- CreateButton(0, 0, 0, 0, 1, 0, UIMSG_CycleCharacters, 0, 9, "", 0);
- }
- virtual ~GUIWindow_Chest() {}
-
- virtual void Update();
-};
struct GUIWindow_House : public GUIWindow
{
GUIWindow_House(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int button, const char *hint);
@@ -678,7 +663,6 @@
-// book ui
void DrawSpellDescriptionPopup(int spell_index);
diff -r 3121fb54a110 -r fb42e2662c38 GUI/UI/Chest.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/GUI/UI/Chest.cpp Tue May 12 11:28:22 2015 +0200
@@ -0,0 +1,117 @@
+#include "Engine/Engine.h"
+#include "Engine/Timer.h"
+#include "Engine/LOD.h"
+#include "Engine/texts.h"
+#include "Engine/Graphics/IRender.h"
+#include "Engine/Objects/Chest.h"
+
+#include "GUI/UI/Chest.h"
+
+
+
+int pChestPixelOffsetX[8] = { 42, 18, 18, 42, 42, 42, 18, 42 };
+int pChestPixelOffsetY[8] = { 34, 30, 30, 34, 34, 34, 30, 34 };
+int pChestWidthsByType[8] = { 9, 9, 9, 9, 9, 9, 9, 9 };
+int pChestHeightsByType[8] = { 9, 9, 9, 9, 9, 9, 9, 9 };
+
+
+
+GUIWindow_Chest::GUIWindow_Chest(unsigned int chest_id) :
+ GUIWindow(0, 0, window->GetWidth(), window->GetHeight(), chest_id, nullptr)
+{
+// --------------------------------------
+// 0041C432 GUIWindow::GUIWindow --- part
+ CreateButton(61, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 1, '1', "", 0);
+ CreateButton(177, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 2, '2', "", 0);
+ CreateButton(292, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 3, '3', "", 0);
+ CreateButton(407, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 4, '4', "", 0);
+ CreateButton(0, 0, 0, 0, 1, 0, UIMSG_CycleCharacters, 0, 9, "", 0);
+
+// --------------------------------------------------------
+// 0042041E bool Chest::Open( signed int uChestID ) -- part
+ pBtn_ExitCancel = CreateButton(471, 445, 169, 35, 1, 0, UIMSG_Escape, 0, 0, pGlobalTXT_LocalizationStrings[79], pIcons_LOD->GetTexture(uExitCancelTextureId), 0);// Exit
+ CreateButton(7, 8, 460, 343, 1, 0, UIMSG_CHEST_ClickItem, 0, 0, "", 0);
+ current_screen_type = SCREEN_CHEST;
+ pEventTimer->Pause();
+}
+
+
+
+void GUIWindow_Chest::Update()
+{
+ // -----------------------------------
+ // 004156F0 GUI_UpdateWindows --- part
+ if (current_screen_type == SCREEN_CHEST_INVENTORY)
+ {
+ pRenderer->ClearZBuffer(0, 479);
+ draw_leather();
+ CharacterUI_InventoryTab_Draw(pPlayers[uActiveCharacter], true);
+ pRenderer->DrawTextureIndexed(pBtn_ExitCancel->uX, pBtn_ExitCancel->uY, pIcons_LOD->GetTexture(uExitCancelTextureId));
+ }
+ else if (current_screen_type == SCREEN_CHEST)
+ {
+ //Chest::DrawChestUI(par1C);
+
+ // -----------------------------------------------------
+ // 0042092D void Chest::DrawChestUI(signed int uChestID)
+ auto uChestID = (unsigned int)ptr_1C;
+
+ int chestBitmapId; // eax@1
+ unsigned int v5; // eax@1
+ int chest_item_index; // ecx@3
+ unsigned int item_texture_id; // eax@4
+ Texture *item_texture; // esi@4
+ signed int itemPixelWidth; // ecx@4
+ signed int itemPixelHeght; // edx@4
+ // signed int v11; // eax@4
+ int v12; // eax@6
+ int v13; // eax@6
+ unsigned int itemPixelPosX; // ST34_4@8
+ int itemPixelPosY; // edi@8
+ int *v16; // [sp+Ch] [bp-28h]@1
+ // int v17; // [sp+10h] [bp-24h]@4
+ int chest_offs_y; // [sp+14h] [bp-20h]@1
+ signed int chestHeghtCells; // [sp+18h] [bp-1Ch]@1
+ int chest_offs_x; // [sp+1Ch] [bp-18h]@1
+ signed int chestWidthCells; // [sp+20h] [bp-14h]@1
+ signed int item_counter; // [sp+30h] [bp-4h]@1
+
+ v16 = pRenderer->pActiveZBuffer;
+ pRenderer->ClearZBuffer(0, 479);
+ chestBitmapId = pChests[uChestID].uChestBitmapID;
+ chest_offs_x = pChestPixelOffsetX[chestBitmapId];
+ chest_offs_y = pChestPixelOffsetY[chestBitmapId];
+ chestWidthCells = pChestWidthsByType[chestBitmapId];
+ chestHeghtCells = pChestHeightsByType[chestBitmapId];
+ sprintfex(pTmpBuf.data(), "chest%02d", pChestList->pChests[chestBitmapId].uTextureID);
+ v5 = pIcons_LOD->LoadTexture(pTmpBuf.data(), TEXTURE_16BIT_PALETTE);
+ pRenderer->DrawTextureIndexed(8u, 8u, pIcons_LOD->GetTexture(v5));
+
+ for (item_counter = 0; item_counter < chestWidthCells * chestHeghtCells; ++item_counter)
+ {
+ chest_item_index = pChests[uChestID].pInventoryIndices[item_counter];
+ if (chest_item_index > 0)
+ {
+ item_texture_id = pIcons_LOD->LoadTexture(
+ //pItemsTable->pItems[*(int *)((char *)&pOtherOverlayList->pOverlays[49].field_4 + 36 * v6 + v3 * 5324)].pIconName,
+ pChests[uChestID].igChestItems[chest_item_index - 1].GetIconName(), TEXTURE_16BIT_PALETTE);
+ item_texture = pIcons_LOD->GetTexture(item_texture_id);
+ itemPixelWidth = item_texture->uTextureWidth;
+ itemPixelHeght = item_texture->uTextureHeight;
+ if (itemPixelWidth < 14)
+ itemPixelWidth = 14;
+ v12 = itemPixelWidth - 14;
+ v12 = v12 & 0xFFFFFFE0;
+ v13 = v12 + 32;
+ if (itemPixelHeght < 14)
+ itemPixelHeght = 14;
+ itemPixelPosX = chest_offs_x + 32 * (item_counter % chestWidthCells) + ((signed int)(v13 - itemPixelWidth) / 2);
+ itemPixelPosY = chest_offs_y + 32 * (item_counter / chestHeghtCells) +
+ ((signed int)(((itemPixelHeght - 14) & 0xFFFFFFE0) + 32 - item_texture->uTextureHeight) / 2);
+ pRenderer->DrawTextureIndexedAlpha(itemPixelPosX, itemPixelPosY, item_texture);
+ ZBuffer_DoFill2(&v16[itemPixelPosX + pSRZBufferLineOffsets[itemPixelPosY]], item_texture, item_counter + 1);
+ }
+ }
+ pRenderer->DrawTextureIndexed(pBtn_ExitCancel->uX, pBtn_ExitCancel->uY, pIcons_LOD->GetTexture(uExitCancelTextureId));
+ }
+}
\ No newline at end of file
diff -r 3121fb54a110 -r fb42e2662c38 GUI/UI/Chest.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/GUI/UI/Chest.h Tue May 12 11:28:22 2015 +0200
@@ -0,0 +1,12 @@
+#pragma once
+#include "GUI/GUIWindow.h"
+
+
+
+struct GUIWindow_Chest : public GUIWindow
+{
+ GUIWindow_Chest(unsigned int chest_id);
+ virtual ~GUIWindow_Chest() {}
+
+ virtual void Update();
+};
\ No newline at end of file
diff -r 3121fb54a110 -r fb42e2662c38 GUI/UI/UIPopup.cpp
--- a/GUI/UI/UIPopup.cpp Tue May 12 11:07:32 2015 +0200
+++ b/GUI/UI/UIPopup.cpp Tue May 12 11:28:22 2015 +0200
@@ -1285,7 +1285,7 @@
spell_info_window.DrawTitleText(pFontComic, 12, spell_info_window.uFrameHeight - LOBYTE(pFontComic->uFontHeight) - 16, 0, pTmpBuf.data(), 3);
dword_507B00_spell_info_to_draw_in_popup = 0;
}
- // 507B00: using guessed type int dword_507B00_spell_info_to_draw_in_popup;
+
//----- (00416D62) --------------------------------------------------------
void UI_OnMouseRightClick(Vec2_int_ *_this)