annotate GUIProgressBar.cpp @ 408:f660fc16ceb6

m
author Ritor1
date Sat, 23 Feb 2013 18:40:15 +0600
parents edd2d8b7e3c4
children 137c59c3dbc4
rev   line source
373
edd2d8b7e3c4 Interface reloading fix & party alignment enum
Nomad
parents: 0
diff changeset
1 #include <assert.h>
edd2d8b7e3c4 Interface reloading fix & party alignment enum
Nomad
parents: 0
diff changeset
2
0
Ritor1
parents:
diff changeset
3 #include "GUIProgressBar.h"
Ritor1
parents:
diff changeset
4 #include "LOD.h"
Ritor1
parents:
diff changeset
5 #include "Mouse.h"
Ritor1
parents:
diff changeset
6 #include "Party.h"
Ritor1
parents:
diff changeset
7 #include "Render.h"
Ritor1
parents:
diff changeset
8 #include "IconFrameTable.h"
Ritor1
parents:
diff changeset
9
Ritor1
parents:
diff changeset
10 #include "mm7_data.h"
Ritor1
parents:
diff changeset
11
Ritor1
parents:
diff changeset
12
Ritor1
parents:
diff changeset
13
Ritor1
parents:
diff changeset
14
Ritor1
parents:
diff changeset
15 struct GUIProgressBar *pGameLoadingUI_ProgressBar = new GUIProgressBar;
Ritor1
parents:
diff changeset
16
Ritor1
parents:
diff changeset
17
Ritor1
parents:
diff changeset
18
Ritor1
parents:
diff changeset
19
Ritor1
parents:
diff changeset
20 //----- (00443484) --------------------------------------------------------
Ritor1
parents:
diff changeset
21 bool GUIProgressBar::_443484(Type type)
Ritor1
parents:
diff changeset
22 {
Ritor1
parents:
diff changeset
23 //GUIProgressBar *v2; // esi@1
Ritor1
parents:
diff changeset
24 signed int v4; // eax@7
Ritor1
parents:
diff changeset
25 int v5; // ecx@8
Ritor1
parents:
diff changeset
26 int v6; // edi@8
Ritor1
parents:
diff changeset
27 int v7; // edx@14
373
edd2d8b7e3c4 Interface reloading fix & party alignment enum
Nomad
parents: 0
diff changeset
28 //const char *v8; // [sp-8h] [bp-84h]@20
edd2d8b7e3c4 Interface reloading fix & party alignment enum
Nomad
parents: 0
diff changeset
29 //unsigned int v9; // [sp-4h] [bp-80h]@20
0
Ritor1
parents:
diff changeset
30 char Str1[64]; // [sp+4h] [bp-78h]@16
Ritor1
parents:
diff changeset
31
Ritor1
parents:
diff changeset
32 if (type < 1 || type > 1)
Ritor1
parents:
diff changeset
33 {
Ritor1
parents:
diff changeset
34 __debugbreak();
Ritor1
parents:
diff changeset
35 return false;
Ritor1
parents:
diff changeset
36 }
Ritor1
parents:
diff changeset
37
Ritor1
parents:
diff changeset
38 //v2 = this;
Ritor1
parents:
diff changeset
39 if (pAsyncMouse)
Ritor1
parents:
diff changeset
40 pAsyncMouse->Suspend();
Ritor1
parents:
diff changeset
41 if (pLoadingBg.pPixels)
Ritor1
parents:
diff changeset
42 return false;
Ritor1
parents:
diff changeset
43
Ritor1
parents:
diff changeset
44 uType = type;
Ritor1
parents:
diff changeset
45
Ritor1
parents:
diff changeset
46 v4 = 1;
Ritor1
parents:
diff changeset
47 if (uType == TYPE_Fullscreen)
Ritor1
parents:
diff changeset
48 {
Ritor1
parents:
diff changeset
49 v5 = 0;
Ritor1
parents:
diff changeset
50 v6 = (int)&field_10;
Ritor1
parents:
diff changeset
51 do
Ritor1
parents:
diff changeset
52 {
Ritor1
parents:
diff changeset
53 if ( *(char *)(v6 + v4) == 1 )
Ritor1
parents:
diff changeset
54 ++v5;
Ritor1
parents:
diff changeset
55 ++v4;
Ritor1
parents:
diff changeset
56 }
Ritor1
parents:
diff changeset
57 while ( v4 <= 5 );
Ritor1
parents:
diff changeset
58 if ( v5 == 5 )
Ritor1
parents:
diff changeset
59 memset(&field_10, 0, 8u);
Ritor1
parents:
diff changeset
60 v7 = rand() % 5 + 1;
Ritor1
parents:
diff changeset
61 if ( *(&field_10 + v7) == 1 )
Ritor1
parents:
diff changeset
62 {
Ritor1
parents:
diff changeset
63 do
Ritor1
parents:
diff changeset
64 v7 = rand() % 5 + 1;
Ritor1
parents:
diff changeset
65 while ( *(char *)(v6 + v7) == 1 );
Ritor1
parents:
diff changeset
66 }
Ritor1
parents:
diff changeset
67 sprintf(Str1, "loading%d.pcx", v7);
Ritor1
parents:
diff changeset
68 pLoadingBg.Load(Str1, 2);
Ritor1
parents:
diff changeset
69 uProgressCurrent = 0;
Ritor1
parents:
diff changeset
70 uX = 122;
Ritor1
parents:
diff changeset
71 uY = 151;
Ritor1
parents:
diff changeset
72 uWidth = 449;
Ritor1
parents:
diff changeset
73 uHeight = 56;
Ritor1
parents:
diff changeset
74 uProgressMax = 26;
Ritor1
parents:
diff changeset
75 pIcons_LOD->_410522(&pLoadingProgress, "loadprog", 2u);
Ritor1
parents:
diff changeset
76 Draw();
Ritor1
parents:
diff changeset
77 return true;
Ritor1
parents:
diff changeset
78 }
373
edd2d8b7e3c4 Interface reloading fix & party alignment enum
Nomad
parents: 0
diff changeset
79
edd2d8b7e3c4 Interface reloading fix & party alignment enum
Nomad
parents: 0
diff changeset
80 /*if ( !pParty->uAlignment )
0
Ritor1
parents:
diff changeset
81 {
Ritor1
parents:
diff changeset
82 v9 = 2;
Ritor1
parents:
diff changeset
83 v8 = "bardata-b";
Ritor1
parents:
diff changeset
84 goto LABEL_23;
Ritor1
parents:
diff changeset
85 }
Ritor1
parents:
diff changeset
86 if ( pParty->uAlignment == 1 )
Ritor1
parents:
diff changeset
87 {
Ritor1
parents:
diff changeset
88 v9 = 2;
Ritor1
parents:
diff changeset
89 v8 = "bardata";
Ritor1
parents:
diff changeset
90 goto LABEL_23;
Ritor1
parents:
diff changeset
91 }
Ritor1
parents:
diff changeset
92 if ( pParty->uAlignment == 2 )
Ritor1
parents:
diff changeset
93 {
Ritor1
parents:
diff changeset
94 v9 = 2;
Ritor1
parents:
diff changeset
95 v8 = "bardata-c";
Ritor1
parents:
diff changeset
96 LABEL_23:
Ritor1
parents:
diff changeset
97 pIcons_LOD->_410522(&pBardata, v8, v9);
373
edd2d8b7e3c4 Interface reloading fix & party alignment enum
Nomad
parents: 0
diff changeset
98 }*/
edd2d8b7e3c4 Interface reloading fix & party alignment enum
Nomad
parents: 0
diff changeset
99 switch (pParty->alignment)
edd2d8b7e3c4 Interface reloading fix & party alignment enum
Nomad
parents: 0
diff changeset
100 {
edd2d8b7e3c4 Interface reloading fix & party alignment enum
Nomad
parents: 0
diff changeset
101 case PartyAlignment_Good: pIcons_LOD->_410522(&pBardata, "bardata-b", 2); break;
edd2d8b7e3c4 Interface reloading fix & party alignment enum
Nomad
parents: 0
diff changeset
102 case PartyAlignment_Neutral: pIcons_LOD->_410522(&pBardata, "bardata", 2); break;
edd2d8b7e3c4 Interface reloading fix & party alignment enum
Nomad
parents: 0
diff changeset
103 case PartyAlignment_Evil: pIcons_LOD->_410522(&pBardata, "bardata-c", 2); break;
edd2d8b7e3c4 Interface reloading fix & party alignment enum
Nomad
parents: 0
diff changeset
104 default: assert(false);
0
Ritor1
parents:
diff changeset
105 }
373
edd2d8b7e3c4 Interface reloading fix & party alignment enum
Nomad
parents: 0
diff changeset
106
0
Ritor1
parents:
diff changeset
107 uProgressCurrent = 0;
Ritor1
parents:
diff changeset
108 uProgressMax = 26;
Ritor1
parents:
diff changeset
109 Draw();
Ritor1
parents:
diff changeset
110 return true;
Ritor1
parents:
diff changeset
111 }
Ritor1
parents:
diff changeset
112
Ritor1
parents:
diff changeset
113 //----- (004435BB) --------------------------------------------------------
Ritor1
parents:
diff changeset
114 void GUIProgressBar::Reset(unsigned __int8 uMaxProgress)
Ritor1
parents:
diff changeset
115 {
Ritor1
parents:
diff changeset
116 field_9 = 0;
Ritor1
parents:
diff changeset
117 uProgressCurrent = 0;
Ritor1
parents:
diff changeset
118 uProgressMax = uMaxProgress;
Ritor1
parents:
diff changeset
119 }
Ritor1
parents:
diff changeset
120
Ritor1
parents:
diff changeset
121 //----- (004435CD) --------------------------------------------------------
Ritor1
parents:
diff changeset
122 void GUIProgressBar::Progress()
Ritor1
parents:
diff changeset
123 {
Ritor1
parents:
diff changeset
124 unsigned __int8 v1; // al@1
Ritor1
parents:
diff changeset
125
Ritor1
parents:
diff changeset
126 ++this->uProgressCurrent;
Ritor1
parents:
diff changeset
127 v1 = this->uProgressMax;
Ritor1
parents:
diff changeset
128 if ( this->uProgressCurrent > v1 )
Ritor1
parents:
diff changeset
129 this->uProgressCurrent = v1;
Ritor1
parents:
diff changeset
130 Draw();
Ritor1
parents:
diff changeset
131 }
Ritor1
parents:
diff changeset
132
Ritor1
parents:
diff changeset
133 //----- (004435E2) --------------------------------------------------------
Ritor1
parents:
diff changeset
134 void GUIProgressBar::Release()
Ritor1
parents:
diff changeset
135 {
Ritor1
parents:
diff changeset
136 GUIProgressBar *v1; // esi@1
Ritor1
parents:
diff changeset
137 char v2; // al@5
Ritor1
parents:
diff changeset
138 int v3; // edi@7
Ritor1
parents:
diff changeset
139
Ritor1
parents:
diff changeset
140 v1 = this;
Ritor1
parents:
diff changeset
141 if (pAsyncMouse)
Ritor1
parents:
diff changeset
142 pAsyncMouse->Resume();
Ritor1
parents:
diff changeset
143 if ( v1->uType == 1 )
Ritor1
parents:
diff changeset
144 {
Ritor1
parents:
diff changeset
145 if ( !v1->pLoadingBg.pPixels )
Ritor1
parents:
diff changeset
146 return;
Ritor1
parents:
diff changeset
147 v2 = v1->uProgressMax;
Ritor1
parents:
diff changeset
148 if ( v1->uProgressCurrent != v2 )
Ritor1
parents:
diff changeset
149 {
Ritor1
parents:
diff changeset
150 v1->uProgressCurrent = v2 - 1;
Ritor1
parents:
diff changeset
151 Progress();
Ritor1
parents:
diff changeset
152 }
Ritor1
parents:
diff changeset
153 free(v1->pLoadingBg.pPixels);
Ritor1
parents:
diff changeset
154 v3 = (int)&v1->pLoadingProgress.pLevelOfDetail0;
Ritor1
parents:
diff changeset
155 free(v1->pLoadingProgress.pLevelOfDetail0);
Ritor1
parents:
diff changeset
156 free(v1->pLoadingProgress.pPalette16);
Ritor1
parents:
diff changeset
157 v1->pLoadingProgress.pPalette16 = 0;
Ritor1
parents:
diff changeset
158 v1->pLoadingBg.pPixels = 0;
Ritor1
parents:
diff changeset
159 }
Ritor1
parents:
diff changeset
160 else
Ritor1
parents:
diff changeset
161 {
Ritor1
parents:
diff changeset
162 if ( !v1->pBardata.pLevelOfDetail0 )
Ritor1
parents:
diff changeset
163 return;
Ritor1
parents:
diff changeset
164 free(v1->pBardata.pLevelOfDetail0);
Ritor1
parents:
diff changeset
165 v3 = (int)&v1->pBardata.pPalette16;
Ritor1
parents:
diff changeset
166 free(v1->pBardata.pPalette16);
Ritor1
parents:
diff changeset
167 v1->pBardata.pLevelOfDetail0 = 0;
Ritor1
parents:
diff changeset
168 }
Ritor1
parents:
diff changeset
169 *(int *)v3 = 0;
Ritor1
parents:
diff changeset
170 }
Ritor1
parents:
diff changeset
171
Ritor1
parents:
diff changeset
172 //----- (00443670) --------------------------------------------------------
Ritor1
parents:
diff changeset
173 void GUIProgressBar::Draw()
Ritor1
parents:
diff changeset
174 {
Ritor1
parents:
diff changeset
175 IconFrame *v3; // eax@10
Ritor1
parents:
diff changeset
176 float v4; // ST2C_4@10
Ritor1
parents:
diff changeset
177
Ritor1
parents:
diff changeset
178 //v1 = this;
Ritor1
parents:
diff changeset
179 pRenderer->BeginScene();
Ritor1
parents:
diff changeset
180 if (uType != TYPE_Fullscreen)
Ritor1
parents:
diff changeset
181 {
Ritor1
parents:
diff changeset
182 if (pBardata.pLevelOfDetail0)
Ritor1
parents:
diff changeset
183 {
Ritor1
parents:
diff changeset
184 if (pRenderer->pRenderD3D)
Ritor1
parents:
diff changeset
185 {
Ritor1
parents:
diff changeset
186 if (!pRenderer->bWindowMode)
Ritor1
parents:
diff changeset
187 pRenderer->_49FD3A();
Ritor1
parents:
diff changeset
188 }
Ritor1
parents:
diff changeset
189 pRenderer->DrawTextureIndexed(0x50u, 0x7Au, &pBardata);
Ritor1
parents:
diff changeset
190 v3 = pIconsFrameTable->GetFrame(uIconID_TurnHour, 0);
Ritor1
parents:
diff changeset
191 pRenderer->DrawTextureTransparent(0x64u, 0x92u, &pIcons_LOD->pTextures[v3->uTextureID]);
Ritor1
parents:
diff changeset
192 v4 = (double)(113 * uProgressCurrent) / (double)uProgressMax;
Ritor1
parents:
diff changeset
193 pRenderer->FillRectFast(
Ritor1
parents:
diff changeset
194 174,
Ritor1
parents:
diff changeset
195 164,
Ritor1
parents:
diff changeset
196 floorf(v4 + 0.5f),//COERCE_UNSIGNED_INT64(v4 + 6.7553994e15),
Ritor1
parents:
diff changeset
197 16,
Ritor1
parents:
diff changeset
198 pRenderer->uTargetRMask);
Ritor1
parents:
diff changeset
199 goto LABEL_11;
Ritor1
parents:
diff changeset
200 }
Ritor1
parents:
diff changeset
201 LABEL_6:
Ritor1
parents:
diff changeset
202 pRenderer->EndScene();
Ritor1
parents:
diff changeset
203 return;
Ritor1
parents:
diff changeset
204 }
Ritor1
parents:
diff changeset
205
Ritor1
parents:
diff changeset
206 if (!pLoadingBg.pPixels)
Ritor1
parents:
diff changeset
207 goto LABEL_6;
Ritor1
parents:
diff changeset
208
Ritor1
parents:
diff changeset
209 pRenderer->DrawTextureRGB(0, 0, &pLoadingBg);
Ritor1
parents:
diff changeset
210 pRenderer->Clip_v2(0, 0, 0x27Fu, 0x1DFu);
Ritor1
parents:
diff changeset
211 pRenderer->Clip(0xACu, 0x1CBu,
Ritor1
parents:
diff changeset
212 15 * (signed int)(signed __int64)((double)(300 * uProgressCurrent) / (double)uProgressMax) / 15 + 172,
Ritor1
parents:
diff changeset
213 0x1D7u);
Ritor1
parents:
diff changeset
214 pRenderer->DrawTextureTransparent(0xACu, 0x1CBu, &pLoadingProgress);
Ritor1
parents:
diff changeset
215 pRenderer->ResetClip();
Ritor1
parents:
diff changeset
216 LABEL_11:
Ritor1
parents:
diff changeset
217 pRenderer->EndScene();
Ritor1
parents:
diff changeset
218 pRenderer->Present();
Ritor1
parents:
diff changeset
219 }