diff GUI/GUIProgressBar.cpp @ 2502:a77c34acdbc9

Media folder
author Ritor1
date Fri, 19 Sep 2014 05:13:32 +0600
parents
children c7264ab7132f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GUI/GUIProgressBar.cpp	Fri Sep 19 05:13:32 2014 +0600
@@ -0,0 +1,186 @@
+#define _CRTDBG_MAP_ALLOC
+#include <stdlib.h>
+#include <crtdbg.h>
+
+#define _CRT_SECURE_NO_WARNINGS
+#include "GUIProgressBar.h"
+#include "Engine/ErrorHandling.h"
+#include "Engine/LOD.h"
+#include "Engine/Party.h"
+#include "Engine/Graphics/Render.h"
+#include "Engine/Tables/IconFrameTable.h"
+
+#include "Engine/mm7_data.h"
+
+
+
+
+struct GUIProgressBar *pGameLoadingUI_ProgressBar = new GUIProgressBar;
+
+
+
+
+//----- (00Initialize) --------------------------------------------------------
+bool GUIProgressBar::Initialize(Type type)
+{
+  //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
+
+  switch (type)
+  {
+    case TYPE_None:
+      return true;
+
+    case TYPE_Box:
+    case TYPE_Fullscreen:
+      break;
+
+    default:
+      Error("Invalid GUIProgressBar type: %u", type);
+  }
+
+  //v2 = this;
+  if (pLoadingBg.pPixels)
+    return false;
+
+  uType = type;
+
+  v4 = 1;
+  if (uType == TYPE_Fullscreen)
+  {
+    v5 = 0;
+    //v6 = (int)&field_10;
+    do
+    {
+      if ( field_10[v4] == 1 )
+        ++v5;
+      ++v4;
+    }
+    while ( v4 <= 5 );
+    if ( v5 == 5 )
+      memset(field_10, 0, 8);
+    v7 = rand() % 5 + 1;
+    if ( field_10[v7] == 1 )
+    {
+      do
+        v7 = rand() % 5 + 1;
+      while ( field_10[v7] == 1 );
+    }
+    sprintf(Str1, "loading%d.pcx", v7);
+    pLoadingBg.Load(Str1, 2);
+    uProgressCurrent = 0;
+    uX = 122;
+    uY = 151;
+    uWidth = 449;
+    uHeight = 56;
+    uProgressMax = 26;
+    pIcons_LOD->_410522(&pLoadingProgress, "loadprog", 2u);
+    Draw();
+    return true;
+  }
+
+  switch (pParty->alignment)
+  {
+    case PartyAlignment_Good:    pIcons_LOD->_410522(&pBardata, "bardata-b", 2); break;
+    case PartyAlignment_Neutral: pIcons_LOD->_410522(&pBardata, "bardata", 2); break;
+    case PartyAlignment_Evil:    pIcons_LOD->_410522(&pBardata, "bardata-c", 2); break;
+    default: Error("Invalid alignment type: %u", pParty->alignment);
+  }
+
+  uProgressCurrent = 0;
+  uProgressMax = 26;
+  Draw();
+  return true;
+}
+
+//----- (004435BB) --------------------------------------------------------
+void GUIProgressBar::Reset(unsigned __int8 uMaxProgress)
+{
+  field_9 = 0;
+  uProgressCurrent = 0;
+  uProgressMax = uMaxProgress;
+}
+
+//----- (004435CD) --------------------------------------------------------
+void GUIProgressBar::Progress()
+{
+  ++this->uProgressCurrent;
+  if ( this->uProgressCurrent > this->uProgressMax )
+    this->uProgressCurrent = this->uProgressMax;
+  Draw();
+}
+
+//----- (004435E2) --------------------------------------------------------
+void GUIProgressBar::Release()
+{
+  int v3; // edi@7
+
+  pLoadingBg.Release();
+  if ( this->uType == 1 )
+  {
+    if ( this->uProgressCurrent != this->uProgressMax )
+    {
+      this->uProgressCurrent = this->uProgressMax - 1;
+      Progress();
+    }
+    v3 = (int)&this->pLoadingProgress.pLevelOfDetail0_prolly_alpha_mask;
+    free(this->pLoadingProgress.pLevelOfDetail0_prolly_alpha_mask);
+    free(this->pLoadingProgress.pPalette16);
+    this->pLoadingProgress.pPalette16 = 0;
+  }
+  else
+  {
+    if ( !this->pBardata.pLevelOfDetail0_prolly_alpha_mask )
+      return;
+    free(this->pBardata.pLevelOfDetail0_prolly_alpha_mask);
+    v3 = (int)&this->pBardata.pPalette16;
+    free(this->pBardata.pPalette16);
+    this->pBardata.pLevelOfDetail0_prolly_alpha_mask = 0;
+  }
+  *(int *)v3 = 0;
+}
+
+//----- (00443670) --------------------------------------------------------
+void GUIProgressBar::Draw()
+{
+  pRenderer->BeginScene();
+  if (uType != TYPE_Fullscreen)
+  {
+    if (pBardata.pLevelOfDetail0_prolly_alpha_mask)
+    {
+      pRenderer->Sub01();
+
+      pRenderer->DrawTextureIndexed(80, 122, &pBardata);//прогрессбар для данжей
+      pRenderer->DrawTextureTransparent(100, 146, &pIcons_LOD->pTextures[pIconsFrameTable->GetFrame(uIconID_TurnHour, 0)->uTextureID]);
+      //pRenderer->FillRectFast(174, 164, floorf(((double)(113 * uProgressCurrent) / (double)uProgressMax) + 0.5f),//COERCE_UNSIGNED_INT64(v4 + 6.7553994e15),
+        //16, pRenderer->uTargetRMask);
+      pRenderer->FillRectFast(174, 164, floorf(((double)(113 * uProgressCurrent) / (double)uProgressMax) + 0.5f),//COERCE_UNSIGNED_INT64(v4 + 6.7553994e15),
+        16, 0xF800);
+      pRenderer->EndScene();
+      pRenderer->Present();
+      return;
+    }
+    pRenderer->EndScene();
+    return;
+  }
+
+  if (!pLoadingBg.pPixels)
+  {
+    pRenderer->EndScene();
+    return;
+  }
+
+  pRenderer->DrawTextureRGB(0, 0, &pLoadingBg);
+  pRenderer->SetRasterClipRect(0, 0, 639, 479);
+  pRenderer->SetTextureClipRect(172, 459, 15 * (signed int)(signed __int64)((double)(300 * uProgressCurrent) / (double)uProgressMax) / 15 + 172, 471);
+  pRenderer->DrawTextureTransparent(172, 459, &pLoadingProgress);
+  pRenderer->ResetTextureClipRect();
+  pRenderer->EndScene();
+  pRenderer->Present();
+}
\ No newline at end of file