diff GUI/UI/UICharacter.cpp @ 2547:fed97f15d1e1

* SaveLoad * QuickReference * Modal * Character
author a.parshin
date Tue, 12 May 2015 01:45:31 +0200
parents c674d547cc7c
children f2a8ed07e921
line wrap: on
line diff
--- a/GUI/UI/UICharacter.cpp	Mon May 11 17:45:02 2015 +0200
+++ b/GUI/UI/UICharacter.cpp	Tue May 12 01:45:31 2015 +0200
@@ -24,6 +24,9 @@
 #include "..\../IO/Mouse.h"
 
 
+void CharacterUI_LoadPaperdollTextures();
+void WetsuitOn(unsigned int uPlayerID);
+void WetsuitOff(unsigned int uPlayerID);
 
 int bRingsShownInCharScreen; // 5118E0
 
@@ -403,9 +406,14 @@
 const  int pMagicSkills[9]  = {PLAYER_SKILL_FIRE,    PLAYER_SKILL_AIR,        PLAYER_SKILL_WATER,        PLAYER_SKILL_EARTH,   PLAYER_SKILL_SPIRIT,    
     PLAYER_SKILL_MIND,     PLAYER_SKILL_BODY,        PLAYER_SKILL_LIGHT,      PLAYER_SKILL_DARK};
 
+
+GUIWindow_CharacterRecord::GUIWindow_CharacterRecord(unsigned int uActiveCharacter, enum CURRENT_SCREEN screen) :
+    GUIWindow(0, 0, window->GetWidth(), window->GetHeight(), uActiveCharacter, nullptr)
+{
 //----- (00421626) --------------------------------------------------------
-GUIWindow *CharacterUI_Initialize(enum CURRENT_SCREEN screen)
-{
+// 00421626 CharacterUI_Initialize --- part
+//GUIWindow *CharacterUI_Initialize(enum CURRENT_SCREEN screen)
+
   ++pIcons_LOD->uTexturePacksCount;
   if ( !pIcons_LOD->uNumPrevLoadedFiles )
     pIcons_LOD->uNumPrevLoadedFiles = pIcons_LOD->uNumLoadedFiles;
@@ -416,52 +424,203 @@
   CharacterUI_LoadPaperdollTextures();
   current_screen_type = screen;
 
-  auto wnd = new GUIWindow_CharacterRecord(0, 0, window->GetWidth(), window->GetHeight(), uActiveCharacter, 0);
-  pCharacterScreen_StatsBtn = wnd->CreateButton(pViewport->uViewportTL_X + 12, pViewport->uViewportTL_Y + 308,
+  //auto wnd = new GUIWindow_CharacterRecord(0, 0, window->GetWidth(), window->GetHeight(), uActiveCharacter, 0);
+  pCharacterScreen_StatsBtn = CreateButton(pViewport->uViewportTL_X + 12, pViewport->uViewportTL_Y + 308,
                                 pIcons_LOD->GetTexture(papredoll_dbrds[9])->uTextureWidth,
                                 pIcons_LOD->GetTexture(papredoll_dbrds[9])->uTextureHeight,
                                 1, 0, UIMSG_ClickStatsBtn, 0, 'S', pGlobalTXT_LocalizationStrings[216],// Stats
                                 pIcons_LOD->GetTexture(papredoll_dbrds[10]),
                                 pIcons_LOD->GetTexture(papredoll_dbrds[9]), 0);
-  pCharacterScreen_SkillsBtn = wnd->CreateButton(pViewport->uViewportTL_X + 102, pViewport->uViewportTL_Y + 308,
+  pCharacterScreen_SkillsBtn = CreateButton(pViewport->uViewportTL_X + 102, pViewport->uViewportTL_Y + 308,
                                  pIcons_LOD->GetTexture(papredoll_dbrds[7])->uTextureWidth,
                                  pIcons_LOD->GetTexture(papredoll_dbrds[7])->uTextureHeight,
                                  1, 0, UIMSG_ClickSkillsBtn, 0, 'K', pGlobalTXT_LocalizationStrings[205],//Skills
                                  pIcons_LOD->GetTexture(papredoll_dbrds[8]),
                                  pIcons_LOD->GetTexture(papredoll_dbrds[7]), 0);
-  pCharacterScreen_InventoryBtn = wnd->CreateButton(pViewport->uViewportTL_X + 192, pViewport->uViewportTL_Y + 308,
+  pCharacterScreen_InventoryBtn = CreateButton(pViewport->uViewportTL_X + 192, pViewport->uViewportTL_Y + 308,
                                     pIcons_LOD->GetTexture(papredoll_dbrds[5])->uTextureWidth,
                                     pIcons_LOD->GetTexture(papredoll_dbrds[5])->uTextureHeight,
                                     1, 0, UIMSG_ClickInventoryBtn, 0, 'I', pGlobalTXT_LocalizationStrings[120], //Inventory
                                     pIcons_LOD->GetTexture(papredoll_dbrds[6]),
                                     pIcons_LOD->GetTexture(papredoll_dbrds[5]), 0);
-  pCharacterScreen_AwardsBtn = wnd->CreateButton(pViewport->uViewportTL_X + 282, pViewport->uViewportTL_Y + 308,
+  pCharacterScreen_AwardsBtn = CreateButton(pViewport->uViewportTL_X + 282, pViewport->uViewportTL_Y + 308,
                                  pIcons_LOD->GetTexture(papredoll_dbrds[3])->uTextureWidth,
                                  pIcons_LOD->GetTexture(papredoll_dbrds[3])->uTextureHeight,
                                  1, 0, UIMSG_ClickAwardsBtn, 0, 'A', pGlobalTXT_LocalizationStrings[22], //Awards
                                  pIcons_LOD->GetTexture(papredoll_dbrds[4]),
                                  pIcons_LOD->GetTexture(papredoll_dbrds[3]), 0);
-  pCharacterScreen_ExitBtn = wnd->CreateButton(pViewport->uViewportTL_X + 371, pViewport->uViewportTL_Y + 308,
+  pCharacterScreen_ExitBtn = CreateButton(pViewport->uViewportTL_X + 371, pViewport->uViewportTL_Y + 308,
                  pIcons_LOD->GetTexture(papredoll_dbrds[1])->uTextureWidth,
                  pIcons_LOD->GetTexture(papredoll_dbrds[1])->uTextureHeight,
                  1, 0, UIMSG_ClickExitCharacterWindowBtn, 0, 0, pGlobalTXT_LocalizationStrings[79],//Exit
                  pIcons_LOD->GetTexture(papredoll_dbrds[2]),
                  pIcons_LOD->GetTexture(papredoll_dbrds[1]), 0);
-  wnd->CreateButton(0, 0, 476, 345, 1, 122, UIMSG_InventoryLeftClick, 0, 0, "", 0);
-  pCharacterScreen_DetalizBtn = wnd->CreateButton(600, 300, 30, 30, 1, 0, UIMSG_ChangeDetaliz, 0, 0, pGlobalTXT_LocalizationStrings[64], 0);
-  pCharacterScreen_DollBtn = wnd->CreateButton(476, 0, 164, 345, 1, 0, UIMSG_ClickPaperdoll, 0, 0, "", 0);
+  CreateButton(0, 0, 476, 345, 1, 122, UIMSG_InventoryLeftClick, 0, 0, "", 0);
+  pCharacterScreen_DetalizBtn = CreateButton(600, 300, 30, 30, 1, 0, UIMSG_ChangeDetaliz, 0, 0, pGlobalTXT_LocalizationStrings[64], 0);
+  pCharacterScreen_DollBtn = CreateButton(476, 0, 164, 345, 1, 0, UIMSG_ClickPaperdoll, 0, 0, "", 0);
+
+  CreateButton(61, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 1, '1', "", 0);
+  CreateButton(177, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 2, '2', "", 0);
+  CreateButton(292, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 3, '3', "", 0);
+  CreateButton(407, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 4, '4', "", 0);
+
+  CreateButton(0, 0, 0, 0, 1, 0, UIMSG_CycleCharacters, 0, '\t', "", 0);
+  FillAwardsData();
+}
+
+//----- (0041ABFD) --------------------------------------------------------
+void GUIWindow_CharacterRecord::Update()
+{
+    // -----------------------------------
+    // 004156F0 GUI_UpdateWindows --- part
+    // {
+    //     0041ABFD CharacterUI_CharacterScreen_Draw(pPlayers[uActiveCharacter]);
+    // }
+
+    auto player = pPlayers[uActiveCharacter];
+
+    pRenderer->ClearZBuffer(0, 479);
+    switch (current_character_screen_window)
+    {
+        case WINDOW_CharacterWindow_Stats:
+        {
+            CharacterUI_ReleaseButtons();
+            ReleaseAwardsScrollBar();
+            CharacterUI_StatsTab_Draw(player);
+            pRenderer->DrawTextureIndexed(
+                pCharacterScreen_StatsBtn->uX,
+                pCharacterScreen_StatsBtn->uY,
+                pIcons_LOD->LoadTexturePtr("ib-cd1-d", TEXTURE_16BIT_PALETTE)
+            );
+        }
+        break;
+
+        case WINDOW_CharacterWindow_Skills:
+        {
+            if (dword_507CC0_activ_ch != uActiveCharacter)
+            {
+                CharacterUI_ReleaseButtons();
+                CharacterUI_SkillsTab_CreateButtons();
+            }
+            ReleaseAwardsScrollBar();
+            CharacterUI_SkillsTab_Draw(player);
+            pRenderer->DrawTextureIndexed(
+                pCharacterScreen_SkillsBtn->uX,
+                pCharacterScreen_SkillsBtn->uY,
+                pIcons_LOD->LoadTexturePtr("ib-cd2-d", TEXTURE_16BIT_PALETTE)
+            );
+        }
+        break;
+
+        case WINDOW_CharacterWindow_Awards:
+        {
+            CharacterUI_ReleaseButtons();
+            ReleaseAwardsScrollBar();
+            CreateAwardsScrollBar();
+            CharacterUI_AwardsTab_Draw(player);
+            pRenderer->DrawTextureIndexed(
+                pCharacterScreen_AwardsBtn->uX,
+                pCharacterScreen_AwardsBtn->uY,
+                pIcons_LOD->LoadTexturePtr("ib-cd4-d", TEXTURE_16BIT_PALETTE)
+            );
+        }
+        break;
 
-  wnd->CreateButton(61, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 1, '1', "", 0);
-  wnd->CreateButton(177, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 2, '2', "", 0);
-  wnd->CreateButton(292, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 3, '3', "", 0);
-  wnd->CreateButton(407, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 4, '4', "", 0);
+        case WINDOW_CharacterWindow_Inventory:
+        {
+            CharacterUI_ReleaseButtons();
+            ReleaseAwardsScrollBar();
+            CharacterUI_InventoryTab_Draw(player, false);
+            pRenderer->DrawTextureIndexed(
+                pCharacterScreen_InventoryBtn->uX,
+                pCharacterScreen_InventoryBtn->uY,
+                pIcons_LOD->LoadTexturePtr("ib-cd3-d", TEXTURE_16BIT_PALETTE)
+            );
+        }
+        break;
+
+        default: __debugbreak();  break;
+    }
+
+    if (bRingsShownInCharScreen)
+        CharacterUI_DrawPaperdollWithRingOverlay(player);
+    else
+        CharacterUI_DrawPaperdoll(player);
+}
+
+
+
+void GUIWindow_CharacterRecord::ShowStatsTab()
+{
+// 004304E7 Game_EventLoop --- part
+    current_character_screen_window = WINDOW_CharacterWindow_Stats;
+    CharacterUI_ReleaseButtons();
+    ReleaseAwardsScrollBar();
+    new OnButtonClick3(pCharacterScreen_StatsBtn->uX, pCharacterScreen_StatsBtn->uY, 0, 0, (int)pCharacterScreen_StatsBtn, 0);
+}
+
+void GUIWindow_CharacterRecord::ShowSkillsTab()
+{
+// 004304E7 Game_EventLoop --- part
+    current_character_screen_window = WINDOW_CharacterWindow_Skills;
+    CharacterUI_ReleaseButtons();
+    ReleaseAwardsScrollBar();
+    CharacterUI_SkillsTab_CreateButtons();
+    new OnButtonClick3(pCharacterScreen_SkillsBtn->uX, pCharacterScreen_SkillsBtn->uY, 0, 0, (int)pCharacterScreen_SkillsBtn, 0);
+}
 
-  wnd->CreateButton(0, 0, 0, 0, 1, 0, UIMSG_CycleCharacters, 0, '\t', "", 0);
-  FillAwardsData();
+void GUIWindow_CharacterRecord::ShowInventoryTab()
+{
+// 004304E7 Game_EventLoop --- part
+    current_character_screen_window = WINDOW_CharacterWindow_Inventory;
+    ReleaseAwardsScrollBar();
+    CharacterUI_ReleaseButtons();
+    new OnButtonClick3(pCharacterScreen_InventoryBtn->uX, pCharacterScreen_InventoryBtn->uY, 0, 0, (int)pCharacterScreen_InventoryBtn, 0);
+}
+
+void GUIWindow_CharacterRecord::ShowAwardsTab()
+{
+// 004304E7 Game_EventLoop --- part
+    ReleaseAwardsScrollBar();
+    CharacterUI_ReleaseButtons();
+    CreateAwardsScrollBar();
+    current_character_screen_window = WINDOW_CharacterWindow_Awards;
+    new OnButtonClick3(pCharacterScreen_AwardsBtn->uX, pCharacterScreen_AwardsBtn->uY, 0, 0, (int)pCharacterScreen_AwardsBtn, 0);
+    FillAwardsData();
+}
+
+void GUIWindow_CharacterRecord::ToggleRingsOverlay()
+{
+    int v128, v125, v123, v121;
 
-  return wnd;
+    bRingsShownInCharScreen ^= 1;
+    pCharacterScreen_DetalizBtn->Release();
+    pCharacterScreen_DollBtn->Release();
+    if (bRingsShownInCharScreen)
+    {
+        v128 = pIcons_LOD->GetTexture(uTextureID_detaliz_close_button)->uTextureHeight;
+        v125 = pIcons_LOD->GetTexture(uTextureID_detaliz_close_button)->uTextureWidth;
+        v123 = 445;
+        v121 = 470;
+    }
+    else
+    {
+        v128 = 30;
+        v125 = 30;
+        v123 = 300;
+        v121 = 600;
+    }
+    pCharacterScreen_DetalizBtn = pGUIWindow_CurrentMenu->CreateButton(
+        v121, v123, v125, v128, 1, 0, UIMSG_ChangeDetaliz, 0, 0,
+        pGlobalTXT_LocalizationStrings[64],// "Detail Toggle"
+        0
+    );
+    pCharacterScreen_DollBtn = pGUIWindow_CurrentMenu->CreateButton(0x1DCu, 0, 0xA4u, 0x159u, 1, 0, UIMSG_ClickPaperdoll, 0, 0, "", 0);
+    viewparams->bRedrawGameUI = true;
 }
 
+
+
 //----- (004219BE) --------------------------------------------------------
 GUIWindow *CastSpellInfo::GetCastSpellInInventoryWindow()
 {
@@ -566,7 +725,7 @@
 }
 
 //----- (00419719) --------------------------------------------------------
-void CharacterUI_SkillsTab_Draw(Player *player)
+void GUIWindow_CharacterRecord::CharacterUI_SkillsTab_Draw(Player *player)
 {
   pRenderer->DrawTextureIndexed(8, 8, pIcons_LOD->LoadTexturePtr("fr_skill", TEXTURE_16BIT_PALETTE));
 
@@ -593,7 +752,7 @@
 }
 
 //----- (0041A000) --------------------------------------------------------
-void CharacterUI_AwardsTab_Draw(Player *player)
+void GUIWindow_CharacterRecord::CharacterUI_AwardsTab_Draw(Player *player)
 {
   int items_per_page; // eax@1
   char *v6; // ebx@15
@@ -691,61 +850,6 @@
   pRenderer->DrawTextureIndexed(8, 8, pIcons_LOD->GetTexture(uTextureID_Leather));
 }
 
-//----- (0041ABFD) --------------------------------------------------------
-void CharacterUI_CharacterScreen_Draw(Player *player)
-{
-  pRenderer->ClearZBuffer(0, 479);
-  switch (current_character_screen_window)
-  {
-    case WINDOW_CharacterWindow_Stats:                                // stats
-      CharacterUI_ReleaseButtons();
-      ReleaseAwardsScrollBar();
-      CharacterUI_StatsTab_Draw(player);
-      pRenderer->DrawTextureIndexed(pCharacterScreen_StatsBtn->uX,
-                                    pCharacterScreen_StatsBtn->uY,
-                                    pIcons_LOD->LoadTexturePtr("ib-cd1-d", TEXTURE_16BIT_PALETTE));
-    break;
-
-    case WINDOW_CharacterWindow_Skills:                                // skills
-      if (dword_507CC0_activ_ch != uActiveCharacter)
-      {
-        CharacterUI_ReleaseButtons();
-        CharacterUI_SkillsTab_CreateButtons();
-      }
-      ReleaseAwardsScrollBar();
-      CharacterUI_SkillsTab_Draw(player);
-      pRenderer->DrawTextureIndexed(pCharacterScreen_SkillsBtn->uX,
-                                    pCharacterScreen_SkillsBtn->uY,
-                                    pIcons_LOD->LoadTexturePtr("ib-cd2-d", TEXTURE_16BIT_PALETTE));
-    break;
-
-    case WINDOW_CharacterWindow_Awards:                                // awards
-      CharacterUI_ReleaseButtons();
-      ReleaseAwardsScrollBar();
-      CreateAwardsScrollBar();
-      CharacterUI_AwardsTab_Draw(player);
-      pRenderer->DrawTextureIndexed(pCharacterScreen_AwardsBtn->uX,
-                                    pCharacterScreen_AwardsBtn->uY,
-                                    pIcons_LOD->LoadTexturePtr("ib-cd4-d", TEXTURE_16BIT_PALETTE));
-    break;
-
-    case WINDOW_CharacterWindow_Inventory:                             // inventory and other
-      CharacterUI_ReleaseButtons();
-      ReleaseAwardsScrollBar();
-      CharacterUI_InventoryTab_Draw(player, false);
-      pRenderer->DrawTextureIndexed(pCharacterScreen_InventoryBtn->uX,
-                                    pCharacterScreen_InventoryBtn->uY,
-                                    pIcons_LOD->LoadTexturePtr("ib-cd3-d", TEXTURE_16BIT_PALETTE));
-    break;
-
-    default: break;
-  }
-
-  if (bRingsShownInCharScreen)
-    CharacterUI_DrawPaperdollWithRingOverlay(player);
-  else
-    CharacterUI_DrawPaperdoll(player);
-}
 
 //----- (0043CC7C) --------------------------------------------------------
 void CharacterUI_DrawPaperdoll(Player *player)
@@ -1858,7 +1962,7 @@
 }
 
 //----- (00419401) --------------------------------------------------------
-void CharacterUI_SkillsTab_CreateButtons()
+void GUIWindow_CharacterRecord::CharacterUI_SkillsTab_CreateButtons()
 {
   GUIButton *pButton; // eax@3
   unsigned int current_Y; // esi@8
@@ -1949,7 +2053,7 @@
 }
 
 //----- (00418511) --------------------------------------------------------
-void CharacterUI_StatsTab_Draw( Player *player )
+void GUIWindow_CharacterRecord::CharacterUI_StatsTab_Draw(Player *player)
 {
   int pY; // ST34_4@4
   const char *pText; // eax@9