2550
|
1 #include "Engine/Engine.h"
|
|
2 #include "Engine/Timer.h"
|
|
3 #include "Engine/LOD.h"
|
|
4 #include "Engine/texts.h"
|
|
5 #include "Engine/Graphics/IRender.h"
|
|
6 #include "Engine/Objects/Chest.h"
|
|
7
|
|
8 #include "GUI/UI/Chest.h"
|
|
9
|
|
10
|
|
11
|
|
12 int pChestPixelOffsetX[8] = { 42, 18, 18, 42, 42, 42, 18, 42 };
|
|
13 int pChestPixelOffsetY[8] = { 34, 30, 30, 34, 34, 34, 30, 34 };
|
|
14 int pChestWidthsByType[8] = { 9, 9, 9, 9, 9, 9, 9, 9 };
|
|
15 int pChestHeightsByType[8] = { 9, 9, 9, 9, 9, 9, 9, 9 };
|
|
16
|
|
17
|
|
18
|
|
19 GUIWindow_Chest::GUIWindow_Chest(unsigned int chest_id) :
|
|
20 GUIWindow(0, 0, window->GetWidth(), window->GetHeight(), chest_id, nullptr)
|
|
21 {
|
|
22 // --------------------------------------
|
|
23 // 0041C432 GUIWindow::GUIWindow --- part
|
|
24 CreateButton(61, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 1, '1', "", 0);
|
|
25 CreateButton(177, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 2, '2', "", 0);
|
|
26 CreateButton(292, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 3, '3', "", 0);
|
|
27 CreateButton(407, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 4, '4', "", 0);
|
|
28 CreateButton(0, 0, 0, 0, 1, 0, UIMSG_CycleCharacters, 0, 9, "", 0);
|
|
29
|
|
30 // --------------------------------------------------------
|
|
31 // 0042041E bool Chest::Open( signed int uChestID ) -- part
|
|
32 pBtn_ExitCancel = CreateButton(471, 445, 169, 35, 1, 0, UIMSG_Escape, 0, 0, pGlobalTXT_LocalizationStrings[79], pIcons_LOD->GetTexture(uExitCancelTextureId), 0);// Exit
|
|
33 CreateButton(7, 8, 460, 343, 1, 0, UIMSG_CHEST_ClickItem, 0, 0, "", 0);
|
|
34 current_screen_type = SCREEN_CHEST;
|
|
35 pEventTimer->Pause();
|
|
36 }
|
|
37
|
|
38
|
|
39
|
|
40 void GUIWindow_Chest::Update()
|
|
41 {
|
|
42 // -----------------------------------
|
|
43 // 004156F0 GUI_UpdateWindows --- part
|
|
44 if (current_screen_type == SCREEN_CHEST_INVENTORY)
|
|
45 {
|
|
46 pRenderer->ClearZBuffer(0, 479);
|
|
47 draw_leather();
|
|
48 CharacterUI_InventoryTab_Draw(pPlayers[uActiveCharacter], true);
|
|
49 pRenderer->DrawTextureIndexed(pBtn_ExitCancel->uX, pBtn_ExitCancel->uY, pIcons_LOD->GetTexture(uExitCancelTextureId));
|
|
50 }
|
|
51 else if (current_screen_type == SCREEN_CHEST)
|
|
52 {
|
|
53 //Chest::DrawChestUI(par1C);
|
|
54
|
|
55 // -----------------------------------------------------
|
|
56 // 0042092D void Chest::DrawChestUI(signed int uChestID)
|
|
57 auto uChestID = (unsigned int)ptr_1C;
|
|
58
|
|
59 int chestBitmapId; // eax@1
|
|
60 unsigned int v5; // eax@1
|
|
61 int chest_item_index; // ecx@3
|
|
62 unsigned int item_texture_id; // eax@4
|
|
63 Texture *item_texture; // esi@4
|
|
64 signed int itemPixelWidth; // ecx@4
|
|
65 signed int itemPixelHeght; // edx@4
|
|
66 // signed int v11; // eax@4
|
|
67 int v12; // eax@6
|
|
68 int v13; // eax@6
|
|
69 unsigned int itemPixelPosX; // ST34_4@8
|
|
70 int itemPixelPosY; // edi@8
|
|
71 int *v16; // [sp+Ch] [bp-28h]@1
|
|
72 // int v17; // [sp+10h] [bp-24h]@4
|
|
73 int chest_offs_y; // [sp+14h] [bp-20h]@1
|
|
74 signed int chestHeghtCells; // [sp+18h] [bp-1Ch]@1
|
|
75 int chest_offs_x; // [sp+1Ch] [bp-18h]@1
|
|
76 signed int chestWidthCells; // [sp+20h] [bp-14h]@1
|
|
77 signed int item_counter; // [sp+30h] [bp-4h]@1
|
|
78
|
|
79 v16 = pRenderer->pActiveZBuffer;
|
|
80 pRenderer->ClearZBuffer(0, 479);
|
|
81 chestBitmapId = pChests[uChestID].uChestBitmapID;
|
|
82 chest_offs_x = pChestPixelOffsetX[chestBitmapId];
|
|
83 chest_offs_y = pChestPixelOffsetY[chestBitmapId];
|
|
84 chestWidthCells = pChestWidthsByType[chestBitmapId];
|
|
85 chestHeghtCells = pChestHeightsByType[chestBitmapId];
|
|
86 sprintfex(pTmpBuf.data(), "chest%02d", pChestList->pChests[chestBitmapId].uTextureID);
|
|
87 v5 = pIcons_LOD->LoadTexture(pTmpBuf.data(), TEXTURE_16BIT_PALETTE);
|
|
88 pRenderer->DrawTextureIndexed(8u, 8u, pIcons_LOD->GetTexture(v5));
|
|
89
|
|
90 for (item_counter = 0; item_counter < chestWidthCells * chestHeghtCells; ++item_counter)
|
|
91 {
|
|
92 chest_item_index = pChests[uChestID].pInventoryIndices[item_counter];
|
|
93 if (chest_item_index > 0)
|
|
94 {
|
|
95 item_texture_id = pIcons_LOD->LoadTexture(
|
|
96 //pItemsTable->pItems[*(int *)((char *)&pOtherOverlayList->pOverlays[49].field_4 + 36 * v6 + v3 * 5324)].pIconName,
|
|
97 pChests[uChestID].igChestItems[chest_item_index - 1].GetIconName(), TEXTURE_16BIT_PALETTE);
|
|
98 item_texture = pIcons_LOD->GetTexture(item_texture_id);
|
|
99 itemPixelWidth = item_texture->uTextureWidth;
|
|
100 itemPixelHeght = item_texture->uTextureHeight;
|
|
101 if (itemPixelWidth < 14)
|
|
102 itemPixelWidth = 14;
|
|
103 v12 = itemPixelWidth - 14;
|
|
104 v12 = v12 & 0xFFFFFFE0;
|
|
105 v13 = v12 + 32;
|
|
106 if (itemPixelHeght < 14)
|
|
107 itemPixelHeght = 14;
|
|
108 itemPixelPosX = chest_offs_x + 32 * (item_counter % chestWidthCells) + ((signed int)(v13 - itemPixelWidth) / 2);
|
|
109 itemPixelPosY = chest_offs_y + 32 * (item_counter / chestHeghtCells) +
|
|
110 ((signed int)(((itemPixelHeght - 14) & 0xFFFFFFE0) + 32 - item_texture->uTextureHeight) / 2);
|
|
111 pRenderer->DrawTextureIndexedAlpha(itemPixelPosX, itemPixelPosY, item_texture);
|
|
112 ZBuffer_DoFill2(&v16[itemPixelPosX + pSRZBufferLineOffsets[itemPixelPosY]], item_texture, item_counter + 1);
|
|
113 }
|
|
114 }
|
|
115 pRenderer->DrawTextureIndexed(pBtn_ExitCancel->uX, pBtn_ExitCancel->uY, pIcons_LOD->GetTexture(uExitCancelTextureId));
|
|
116 }
|
|
117 } |