Mercurial > might-and-magic-trilogy
view GUIProgressBar.cpp @ 1:ac0fb48cd27a
Texture, hwl loading, video player
author | Nomad |
---|---|
date | Tue, 09 Oct 2012 13:09:08 +0200 |
parents | 8b8875f5b359 |
children | 2ca04ccb612a |
line wrap: on
line source
#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(); }