annotate GUI/UI/Books/UISpellBook.cpp @ 2541:a902abdfc7f2

1. Renamed class Game to class Engine. 2. Separated game logic as state of FSM from game logic as engine. 3. Found out that many UI screen initializers were optimized away, intially they all returned newly created window as separate object like it is done in CharacterUI_Initialize.
author a.parshin
date Sun, 10 May 2015 01:29:11 +0200
parents 1bcadc6dd203
children 87e5590d034b
rev   line source
2501
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
1 #define _CRT_SECURE_NO_WARNINGS
2541
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2534
diff changeset
2
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2534
diff changeset
3 #include "Engine/Engine.h"
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2534
diff changeset
4
2501
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
5 #include "..\..\..\Engine/Graphics/Render.h"
2502
a77c34acdbc9 Media folder
Ritor1
parents: 2501
diff changeset
6 #include "..\..\..\IO/Mouse.h"
2501
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
7 #include "..\UIBooks.h"
2502
a77c34acdbc9 Media folder
Ritor1
parents: 2501
diff changeset
8 #include "..\..\..\GUI/GUIWindow.h"
a77c34acdbc9 Media folder
Ritor1
parents: 2501
diff changeset
9 #include "..\..\..\GUI/GUIFont.h"
2501
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
10 #include "..\..\..\Engine/Party.h"
2502
a77c34acdbc9 Media folder
Ritor1
parents: 2501
diff changeset
11 #include "..\..\..\Media/Audio/AudioPlayer.h"
2501
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
12 #include "..\..\..\Engine/LOD.h"
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
13 #include "..\..\..\Engine/Graphics/Viewport.h"
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
14 #include "..\..\..\Engine/texts.h"
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
15
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
16 std::array<char *, 9> spellbook_texture_filename_suffices = {{"f", "a", "w", "e", "s", "m", "b", "l", "d"}}; // weak
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
17
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
18 //----- (00411300) --------------------------------------------------------
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
19 void LoadSpellbook(unsigned int spell_school)
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
20 {
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
21 char pContainer[20]; // [sp+Ch] [bp-1Ch]@7
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
22
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
23 byte_506550 = 0;
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
24 if ( pPlayers[uActiveCharacter]->uQuickSpell && (unsigned __int8)pPlayers[uActiveCharacter]->uQuickSpell / 11 == spell_school )
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
25 quick_spell_at_page = (unsigned __int8)pPlayers[uActiveCharacter]->uQuickSpell - 11 * spell_school;
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
26 else
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
27 quick_spell_at_page = 0;
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
28
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
29 for (uint i = 1; i <= 11; ++i)
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
30 {
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
31 if (pPlayers[uActiveCharacter]->spellbook.pChapters[spell_school].bIsSpellAvailable[i - 1])
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
32 {
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
33 sprintf(pContainer, "SB%sS%02d", spellbook_texture_filename_suffices[spell_school], pSpellbookSpellIndices[spell_school][i]);
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
34 SBPageSSpellsTextureList[i] = pIcons_LOD->LoadTexturePtr(pContainer, TEXTURE_16BIT_PALETTE);
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
35
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
36 sprintf(pContainer, "SB%sC%02d", spellbook_texture_filename_suffices[spell_school], pSpellbookSpellIndices[spell_school][i]);
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
37 SBPageCSpellsTextureList[i] = pIcons_LOD->LoadTexturePtr(pContainer, TEXTURE_16BIT_PALETTE);
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
38 }
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
39 }
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
40 }
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
41
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
42 //----- (00411597) --------------------------------------------------------
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
43 void OnCloseBook()
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
44 {
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
45 free(pSpellFont);
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
46 pSpellFont = nullptr;
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
47 free(pBookFont);
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
48 pBookFont = nullptr;
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
49 free(pBook2Font);
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
50 pBook2Font = nullptr;
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
51 free(pAutonoteFont);
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
52 pAutonoteFont = nullptr;
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
53 pTexture_mapbordr->Release();
2534
1bcadc6dd203 enum SOUND_
Ritor1
parents: 2524
diff changeset
54 pAudioPlayer->PlaySound(SOUND_closebook, 0, 0, -1, 0, 0, 0, 0);
2501
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
55 pIcons_LOD->RemoveTexturesPackFromTextureList();
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
56 dword_506364 = 0;
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
57 }
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
58
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
59 //----- (00412AF9) --------------------------------------------------------
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
60 static void BookUI_Spellbook_DrawCurrentSchoolBackground()
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
61 {
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
62 int pTexID = 0;
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
63 if ( uActiveCharacter )
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
64 pTexID = pParty->pPlayers[uActiveCharacter - 1].lastOpenedSpellbookPage;
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
65 pRenderer->DrawTextureIndexed(8, 8, pSpellBookPagesTextr[pTexID]);
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
66 pRenderer->DrawTextureIndexed(476, 450, pSBQuickSpellBtnTextr);
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
67 pRenderer->DrawTextureIndexed(561, 450, pSpellBookCloseBtnTextr);
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
68 }
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
69
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
70 //----- (00412B58) --------------------------------------------------------
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
71 void DrawSpellBookContent(Player *player)
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
72 {
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
73 Texture *PendingTexture; // edi@1
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
74 Texture *pTexture; // edx@5
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
75 int v10; // eax@13
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
76 unsigned int pX_coord; // esi@18
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
77 unsigned int pY_coord; // edi@18
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
78 Texture *pPageTexture; // eax@21
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
79 // signed int v22; // [sp-4h] [bp-24h]@22
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
80 POINT a2; // [sp+18h] [bp-8h]@13
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
81
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
82 static unsigned int texture_tab_coord1[9][2]=
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
83 {{406, 9}, {406, 46}, {406, 84}, {406,121}, {407,158}, {405, 196}, {405, 234}, {405, 272}, {405,309} };
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
84
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
85 static unsigned int texture_tab_coord0[9][2]=
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
86 {{415, 10}, {415, 46}, {415, 83}, {415,121}, {415,158}, {416, 196}, {416, 234}, {416, 271}, {416,307} };
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
87
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
88 BookUI_Spellbook_DrawCurrentSchoolBackground();
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
89
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
90 PendingTexture = pIcons_LOD->GetTexture(pIcons_LOD->FindTextureByName("Pending"));
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
91 pRenderer->ClearZBuffer(0, 479);
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
92 if ( (11 * player->lastOpenedSpellbookPage) || ((11 * player->lastOpenedSpellbookPage) + 11) )//??? maybe structure need fix
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
93 {
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
94 for ( uint i = 1; i <= 11; ++i )
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
95 {
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
96 if (player->_achieved_awards_bits[(11 * player->lastOpenedSpellbookPage) + i + 63] )
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
97 {
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
98 if ( SBPageSSpellsTextureList[i] != PendingTexture )
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
99 {
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
100 if ( quick_spell_at_page == i )
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
101 pTexture = SBPageCSpellsTextureList[i];
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
102 else
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
103 pTexture = SBPageSSpellsTextureList[i];
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
104 if ( pTexture->pLevelOfDetail0_prolly_alpha_mask )
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
105 {
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
106 pX_coord = pViewport->uViewportTL_X + pIconPos[player->lastOpenedSpellbookPage][pSpellbookSpellIndices[player->lastOpenedSpellbookPage][i]].Xpos;
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
107 pY_coord = pViewport->uViewportTL_Y + pIconPos[player->lastOpenedSpellbookPage][pSpellbookSpellIndices[player->lastOpenedSpellbookPage][i]].Ypos;
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
108 if ( pTexture->pBits & 0x200 )
2524
c7264ab7132f Main menu rendered using d3d11
a.parshin
parents: 2502
diff changeset
109 pRenderer->DrawTextureIndexedAlpha(pX_coord, pY_coord, pTexture);
2501
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
110 else
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
111 pRenderer->DrawTextureIndexed(pX_coord, pY_coord, pTexture);
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
112 pRenderer->DrawMaskToZBuffer(pIconPos[player->lastOpenedSpellbookPage][pSpellbookSpellIndices[player->lastOpenedSpellbookPage][i]].Xpos,
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
113 pIconPos[player->lastOpenedSpellbookPage][pSpellbookSpellIndices[player->lastOpenedSpellbookPage][i]].Ypos, pTexture, i);
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
114 }
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
115 }
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
116 }
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
117 }
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
118 }
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
119
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
120 pMouse->GetCursorPos(&a2);
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
121 v10 = pRenderer->pActiveZBuffer[a2.x + pSRZBufferLineOffsets[a2.y]] & 0xFFFF;
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
122 if ( v10 )
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
123 {
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
124 if ( SBPageCSpellsTextureList[v10]->pLevelOfDetail0_prolly_alpha_mask )
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
125 {
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
126 pX_coord = pViewport->uViewportTL_X + pIconPos[player->lastOpenedSpellbookPage][pSpellbookSpellIndices[player->lastOpenedSpellbookPage][v10]].Xpos;
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
127 pY_coord = pViewport->uViewportTL_Y + pIconPos[player->lastOpenedSpellbookPage][pSpellbookSpellIndices[player->lastOpenedSpellbookPage][v10]].Ypos;
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
128 if ( SBPageCSpellsTextureList[v10]->pBits & 0x200 )
2524
c7264ab7132f Main menu rendered using d3d11
a.parshin
parents: 2502
diff changeset
129 pRenderer->DrawTextureIndexedAlpha(pX_coord, pY_coord, SBPageCSpellsTextureList[v10]);
2501
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
130 else
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
131 pRenderer->DrawTextureIndexed(pX_coord, pY_coord, SBPageCSpellsTextureList[v10]);
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
132 }
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
133 }
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
134 //pX_coord = (unsigned int)&player->pActiveSkills[PLAYER_SKILL_FIRE];
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
135 //pY_coord = (unsigned int)&player->pActiveSkills[PLAYER_SKILL_FIRE];
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
136 for ( uint i = 0; i < 9; i++ )
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
137 {
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
138 if ( player->pActiveSkills[PLAYER_SKILL_FIRE + i] )
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
139 {
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
140 if ( player->lastOpenedSpellbookPage == i )
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
141 {
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
142 pPageTexture = pTextures_tabs[i][1];
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
143 pX_coord = texture_tab_coord1[i][0];
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
144 pY_coord = texture_tab_coord1[i][1];
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
145 }
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
146 else
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
147 {
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
148 pPageTexture = pTextures_tabs[i][0];
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
149 pX_coord = texture_tab_coord0[i][0];
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
150 pY_coord = texture_tab_coord0[i][1];
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
151 }
2524
c7264ab7132f Main menu rendered using d3d11
a.parshin
parents: 2502
diff changeset
152 pRenderer->DrawTextureIndexedAlpha(pX_coord, pY_coord, pPageTexture);
2501
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
153 }
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
154 }
0ff6a9e9bf7f GUI folger
Ritor1
parents:
diff changeset
155 }