Mercurial > might-and-magic-trilogy
diff GUIProgressBar.cpp @ 0:8b8875f5b359
Initial commit
author | Nomad |
---|---|
date | Fri, 05 Oct 2012 16:07:14 +0200 |
parents | |
children | 2ca04ccb612a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/GUIProgressBar.cpp Fri Oct 05 16:07:14 2012 +0200 @@ -0,0 +1,206 @@ +#include "GUIProgressBar.h" +#include "LOD.h" +#include "Mouse.h" +#include "Party.h" +#include "Render.h" +#include "IconFrameTable.h" + +#include "mm7_data.h" + + + + +struct GUIProgressBar *pGameLoadingUI_ProgressBar; + + + + +//----- (00443484) -------------------------------------------------------- +bool GUIProgressBar::_443484(int a2) +{ + GUIProgressBar *v2; // esi@1 + signed int v4; // eax@7 + int v5; // ecx@8 + int v6; // edi@8 + int v7; // edx@14 + const char *v8; // [sp-8h] [bp-84h]@20 + unsigned int v9; // [sp-4h] [bp-80h]@20 + char Str1[64]; // [sp+4h] [bp-78h]@16 + + v2 = this; + if ( pAsyncMouse ) + pAsyncMouse->Suspend(); + if ( v2->pLoadingBg.pPixels ) + return 0; + if ( a2 ) + v2->uType = a2; + v4 = 1; + if ( v2->uType == 1 ) + { + v5 = 0; + v6 = (int)&v2->field_10; + do + { + if ( *(char *)(v6 + v4) == 1 ) + ++v5; + ++v4; + } + while ( v4 <= 5 ); + if ( v5 == 5 ) + memset(&v2->field_10, 0, 8u); + v7 = rand() % 5 + 1; + if ( *(&v2->field_10 + v7) == 1 ) + { + do + v7 = rand() % 5 + 1; + while ( *(char *)(v6 + v7) == 1 ); + } + sprintfex(Str1, "loading%d.pcx", v7); + v2->pLoadingBg.Load(Str1, 2); + v2->uProgressCurrent = 0; + v2->uX = 122; + v2->uY = 151; + v2->uWidth = 449; + v2->uHeight = 56; + v2->uProgressMax = 26; + pIcons_LOD->_410522(&v2->pLoadingProgress, "loadprog", 2u); + Draw(); + return 1; + } + if ( !pParty->uAlignment ) + { + v9 = 2; + v8 = "bardata-b"; + goto LABEL_23; + } + if ( pParty->uAlignment == 1 ) + { + v9 = 2; + v8 = "bardata"; + goto LABEL_23; + } + if ( pParty->uAlignment == 2 ) + { + v9 = 2; + v8 = "bardata-c"; +LABEL_23: + pIcons_LOD->_410522(&v2->pBardata, v8, v9); + } + v2->uProgressCurrent = 0; + v2->uProgressMax = 26; + Draw(); + return 1; +} + +//----- (004435BB) -------------------------------------------------------- +void GUIProgressBar::Reset(unsigned __int8 uMaxProgress) +{ + this->field_9 = 0; + this->uProgressCurrent = 0; + this->uProgressMax = uMaxProgress; +} + +//----- (004435CD) -------------------------------------------------------- +void GUIProgressBar::Progress() +{ + unsigned __int8 v1; // al@1 + + ++this->uProgressCurrent; + v1 = this->uProgressMax; + if ( this->uProgressCurrent > v1 ) + this->uProgressCurrent = v1; + Draw(); +} + +//----- (004435E2) -------------------------------------------------------- +void GUIProgressBar::Release() +{ + GUIProgressBar *v1; // esi@1 + char v2; // al@5 + int v3; // edi@7 + + v1 = this; + if ( pAsyncMouse ) + pAsyncMouse->Resume(); + if ( v1->uType == 1 ) + { + if ( !v1->pLoadingBg.pPixels ) + return; + v2 = v1->uProgressMax; + if ( v1->uProgressCurrent != v2 ) + { + v1->uProgressCurrent = v2 - 1; + Progress(); + } + free(v1->pLoadingBg.pPixels); + v3 = (int)&v1->pLoadingProgress.pLevelOfDetail0; + free(v1->pLoadingProgress.pLevelOfDetail0); + free(v1->pLoadingProgress.pPalette16); + v1->pLoadingProgress.pPalette16 = 0; + v1->pLoadingBg.pPixels = 0; + } + else + { + if ( !v1->pBardata.pLevelOfDetail0 ) + return; + free(v1->pBardata.pLevelOfDetail0); + v3 = (int)&v1->pBardata.pPalette16; + free(v1->pBardata.pPalette16); + v1->pBardata.pLevelOfDetail0 = 0; + } + *(int *)v3 = 0; +} + +//----- (00443670) -------------------------------------------------------- +void GUIProgressBar::Draw() +{ + GUIProgressBar *v1; // edi@1 + Render *v2; // ecx@2 + IconFrame *v3; // eax@10 + float v4; // ST2C_4@10 + + v1 = this; + pRenderer->BeginScene(); + if ( v1->uType != 1 ) + { + if ( v1->pBardata.pLevelOfDetail0 ) + { + if ( pRenderer->pRenderD3D ) + { + if ( !pRenderer->bWindowMode ) + pRenderer->_49FD3A((int)v1); + } + pRenderer->DrawTextureIndexed(0x50u, 0x7Au, &v1->pBardata); + v3 = pIconsFrameTable->GetFrame(uIconID_TurnHour, 0); + pRenderer->DrawTextureTransparent(0x64u, 0x92u, &pIcons_LOD->pTextures[v3->uTextureID]); + v4 = (double)(113 * v1->uProgressCurrent) / (double)v1->uProgressMax; + pRenderer->FillRect2( + 0, + 174, + 164, + COERCE_UNSIGNED_INT64(v4 + 6.7553994e15), + 16, + LOWORD(pRenderer->uTargetRMask)); + goto LABEL_11; + } + v2 = pRenderer; +LABEL_6: + pRenderer->EndScene(); + return; + } + v2 = pRenderer; + if ( !v1->pLoadingBg.pPixels ) + goto LABEL_6; + pRenderer->DrawTextureRGB(0, 0, &v1->pLoadingBg); + pRenderer->Clip_v2(0, 0, 0x27Fu, 0x1DFu); + pRenderer->Clip( + 0xACu, + 0x1CBu, + 15 * (signed int)(signed __int64)((double)(300 * v1->uProgressCurrent) / (double)v1->uProgressMax) / 15 + 172, + 0x1D7u); + pRenderer->DrawTextureTransparent(0xACu, 0x1CBu, &v1->pLoadingProgress); + pRenderer->ResetClip(); +LABEL_11: + pRenderer->EndScene(); + pRenderer->Present(); +} \ No newline at end of file