Mercurial > mm7
diff GUI/UI/UITransition.cpp @ 2501:0ff6a9e9bf7f
GUI folger
author | Ritor1 |
---|---|
date | Fri, 19 Sep 2014 04:21:12 +0600 |
parents | |
children | a77c34acdbc9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/GUI/UI/UITransition.cpp Fri Sep 19 04:21:12 2014 +0600 @@ -0,0 +1,208 @@ +#define _CRTDBG_MAP_ALLOC +#include <stdlib.h> +#include <crtdbg.h> + +#define _CRT_SECURE_NO_WARNINGS +#include <io.h> + +#include "..\../Engine/ErrorHandling.h" +#include "..\../Engine/mm7_data.h" +#include "..\../MediaPlayer.h" +#include "..\../Engine/MapInfo.h" +#include "..\../GUIWindow.h" +#include "..\../GUIFont.h" +#include "..\../GUIProgressBar.h" +#include "..\../Engine/Party.h" +#include "..\../AudioPlayer.h" +#include "..\../Engine/Graphics/Outdoor.h" +#include "..\../Engine/LOD.h" +#include "..\../Engine/Timer.h" +#include "..\../Engine/stru159.h" +#include "..\../Engine/Events2D.h" +#include "..\../Engine/texts.h" +#include "UIHouses.h" + + + + +//----- (00444839) -------------------------------------------------------- +void TransitionUI_Load(uint anim_id, uint exit_pic_id, int x, int y, int z, int directiony, int directionx, int a8, const char *pLocationName) +{ + const char *v15; // eax@14 + char pContainer[40]; // [sp+Ch] [bp-2Ch]@1 + + dword_59117C_teleportx = x; + dword_591178_teleporty = y; + dword_591174_teleportz = z; + dword_591170_teleport_directiony = directiony; + dword_59116C_teleport_directionx = directionx; + dword_591168_teleport_speedz = a8; + dword_591164_teleport_map_name = (char *)pLocationName; + uCurrentHouse_Animation = anim_id; + pEventTimer->Pause(); + pAudioPlayer->StopChannels(-1, -1); + + switch (pParty->alignment) + { + case PartyAlignment_Good: sprintfex(pContainer, "evt%02d-b", const_2()); break; + case PartyAlignment_Neutral: sprintfex(pContainer, "evt%02d", const_2()); break; + case PartyAlignment_Evil: sprintfex(pContainer, "evt%02d-c", const_2()); break; + default: Error("Invalid alignment: %u", pParty->alignment); + } + + pTexture_Dialogue_Background = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE)]; + pTexture_outside = pIcons_LOD->LoadTexturePtr(pHouse_ExitPictures[exit_pic_id], TEXTURE_16BIT_PALETTE); + if (anim_id) + { + if ( !IndoorLocation::GetLocationIndex(pLocationName) ) + pMediaPlayer->OpenHouseMovie(pAnimatedRooms[p2DEvents[anim_id - 1].uAnimationID].video_name, 1); + } + else if ( !IndoorLocation::GetLocationIndex(pLocationName) ) + { + if ( pMapStats->GetMapInfo(pCurrentMapName) ) + { + sprintfex(sHouseName.data(), pGlobalTXT_LocalizationStrings[410], pMapStats->pInfos[pMapStats->GetMapInfo(pCurrentMapName)].pName); // "Leave %s" + pDialogueWindow = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_Transition, 0, sHouseName.data()); + //if ( pAnimatedRooms[p2DEvents[anim_id].uAnimationID].uRoomSoundId ) + //PlayHouseSound(anim_id, HouseSound_Greeting); + if ( uCurrentlyLoadedLevelType == LEVEL_Indoor && uActiveCharacter && pParty->uFlags & 0x30 ) + pPlayers[uActiveCharacter]->PlaySound(SPEECH_47, 0); + if ( IndoorLocation::GetLocationIndex(pLocationName) ) + uCurrentHouse_Animation = IndoorLocation::GetLocationIndex(pLocationName); + return; + } + strcpy(sHouseName.data(), pGlobalTXT_LocalizationStrings[79]); + pDialogueWindow = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_Transition, 0, sHouseName.data()); + //if ( pAnimatedRooms[p2DEvents[anim_id].uAnimationID].uRoomSoundId ) + //PlayHouseSound(anim_id, HouseSound_Greeting); + if ( uCurrentlyLoadedLevelType == LEVEL_Indoor && uActiveCharacter && pParty->uFlags & 0x30 ) + pPlayers[uActiveCharacter]->PlaySound(SPEECH_47, 0); + if ( IndoorLocation::GetLocationIndex(pLocationName) ) + uCurrentHouse_Animation = IndoorLocation::GetLocationIndex(pLocationName); + return; + } + v15 = pLocationName; + if ( *pLocationName == 48 ) + v15 = pCurrentMapName; + if ( pMapStats->GetMapInfo(v15) ) + { + sprintfex(sHouseName.data(), pGlobalTXT_LocalizationStrings[411], pMapStats->pInfos[pMapStats->GetMapInfo(v15)].pName);//Войти в ^Pv[%s] + pDialogueWindow = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_Transition, 0, sHouseName.data()); + if ( uCurrentlyLoadedLevelType == LEVEL_Indoor && uActiveCharacter && pParty->uFlags & 0x30 ) + pPlayers[uActiveCharacter]->PlaySound(SPEECH_47, 0); + if ( IndoorLocation::GetLocationIndex(pLocationName) ) + uCurrentHouse_Animation = IndoorLocation::GetLocationIndex(pLocationName); + return; + } + strcpy(sHouseName.data(), pGlobalTXT_LocalizationStrings[73]);//Войти + pDialogueWindow = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_Transition, 0, sHouseName.data()); + //if ( pAnimatedRooms[p2DEvents[anim_id].uAnimationID].uRoomSoundId ) + //PlayHouseSound(anim_id, HouseSound_Greeting); + if ( uCurrentlyLoadedLevelType == LEVEL_Indoor && uActiveCharacter && pParty->uFlags & 0x30 ) + pPlayers[uActiveCharacter]->PlaySound(SPEECH_47, 0); + if ( IndoorLocation::GetLocationIndex(pLocationName) ) + uCurrentHouse_Animation = IndoorLocation::GetLocationIndex(pLocationName); +} + +//----- (00444C8F) -------------------------------------------------------- +void TravelUI_Load() +{ + char pContainer[32]; // [sp+0h] [bp-28h]@1 + + pEventTimer->Pause(); + + switch (pParty->alignment) + { + case PartyAlignment_Good: sprintfex(pContainer, "evt%02d-b", const_2()); break; + case PartyAlignment_Neutral: sprintfex(pContainer, "evt%02d", const_2()); break; + case PartyAlignment_Evil: sprintfex(pContainer, "evt%02d-c", const_2()); break; + default: Error("Invalid alignment: %u", pParty->alignment); + } + + pTexture_Dialogue_Background = pIcons_LOD->LoadTexturePtr(pContainer, TEXTURE_16BIT_PALETTE); + pTexture_outside = pIcons_LOD->LoadTexturePtr("outside", TEXTURE_16BIT_PALETTE); + if ( pMapStats->GetMapInfo(pCurrentMapName) ) + sprintfex(sHouseName.data(), pGlobalTXT_LocalizationStrings[410], pMapStats->pInfos[pMapStats->GetMapInfo(pCurrentMapName)].pName);// "Leave %s" + else + strcpy(sHouseName.data(), pGlobalTXT_LocalizationStrings[79]);// "Exit" + pDialogueWindow = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_ChangeLocation, 0, sHouseName.data()); +} + +//----- (00444DCA) -------------------------------------------------------- +void TravelUI_Draw() +{ + GUIWindow travel_window; // [sp+Ch] [bp-78h]@1 + char pDestinationMapName[32]; // [sp+60h] [bp-24h]@1 + + memcpy(&travel_window, pPrimaryWindow, sizeof(travel_window)); + pOutdoor->GetTravelDestination(pParty->vPosition.x, pParty->vPosition.y, pDestinationMapName, 20); + pRenderer->DrawTextureIndexed(477, 0, pTexture_Dialogue_Background); + pRenderer->DrawTextureTransparent(468, 0, &pIcons_LOD->pTextures[uTextureID_right_panel_loop]); + pRenderer->DrawTextureIndexed(pNPCPortraits_x[0][0], pNPCPortraits_y[0][0], pTexture_outside); + pRenderer->DrawTextureIndexed(556, 451, pIcons_LOD->GetTexture(uTextureID_x_x_u)); + pRenderer->DrawTextureIndexed(476, 451, pIcons_LOD->GetTexture(uTextureID_x_ok_u)); + if ( pMapStats->GetMapInfo(pDestinationMapName) ) + { + travel_window.uFrameX = 493; + travel_window.uFrameWidth = 126; + travel_window.uFrameZ = 366; + travel_window.DrawTitleText(pFontCreate, 0, 4, 0, pMapStats->pInfos[pMapStats->GetMapInfo(pDestinationMapName)].pName, 3); + travel_window.uFrameX = 483; + travel_window.uFrameWidth = 148; + travel_window.uFrameZ = 334; + if ( GetTravelTime() == 1 ) + sprintfex(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[663], 1, pMapStats->pInfos[pMapStats->GetMapInfo(pDestinationMapName)].pName);// "It will take %d day to cross to %s." + else + sprintfex(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[128], GetTravelTime(), pMapStats->pInfos[pMapStats->GetMapInfo(pDestinationMapName)].pName);// "It will take %d days to travel to %s." + + strcat(pTmpBuf.data(), "\n \n"); + sprintfex(pTmpBuf2.data(), pGlobalTXT_LocalizationStrings[126], pMapStats->pInfos[pMapStats->GetMapInfo(pCurrentMapName)].pName); + strcat(pTmpBuf.data(), pTmpBuf2.data()); + travel_window.DrawTitleText(pFontCreate, 0, (212 - pFontCreate->CalcTextHeight(pTmpBuf.data(), &travel_window, 0, 0)) / 2 + 101, 0, pTmpBuf.data(), 3); + _unused_5B5924_is_travel_ui_drawn = 1; + } +} + +//----- (00444A51) -------------------------------------------------------- +void TransitionUI_Draw() +{ + unsigned int v4; // [sp-10h] [bp-7Ch]@12 + GUIWindow transition_window; // [sp+Ch] [bp-60h]@1 + unsigned int v9; // [sp+60h] [bp-Ch]@1 + unsigned int map_id; // [sp+64h] [bp-8h]@1 + + memcpy(&transition_window, pPrimaryWindow, sizeof(transition_window)); + v9 = IndoorLocation::GetLocationIndex(dword_591164_teleport_map_name); + pRenderer->DrawTextureIndexed(0x1DDu, 0, pTexture_Dialogue_Background); + pRenderer->DrawTextureIndexed(pNPCPortraits_x[0][0] - 4, pNPCPortraits_y[0][0] - 4, pIcons_LOD->GetTexture(uTextureID_50795C)); + pRenderer->DrawTextureIndexed(pNPCPortraits_x[0][0], pNPCPortraits_y[0][0], pTexture_outside); + uTextureID_right_panel_loop = uTextureID_right_panel; + pRenderer->DrawTextureTransparent(468, 0, pIcons_LOD->GetTexture(uTextureID_right_panel)); + pRenderer->DrawTextureIndexed(556, 451, pIcons_LOD->GetTexture(uTextureID_x_x_u)); + pRenderer->DrawTextureIndexed(476, 451, pIcons_LOD->GetTexture(uTextureID_x_ok_u)); + map_id = pMapStats->GetMapInfo(pCurrentMapName); + if ( (pMovie_Track || v9) && *dword_591164_teleport_map_name != ' ' ) + map_id = pMapStats->GetMapInfo(dword_591164_teleport_map_name); + transition_window.uFrameX = 493; + transition_window.uFrameWidth = 126; + transition_window.uFrameZ = 366; + transition_window.DrawTitleText(pFontCreate, 0, 5, 0, pMapStats->pInfos[map_id].pName, 3); + transition_window.uFrameX = 483; + transition_window.uFrameWidth = 148; + transition_window.uFrameZ = 334; + + if ( uCurrentHouse_Animation ) + { + v4 = (212 - pFontCreate->CalcTextHeight(pTransitionStrings[uCurrentHouse_Animation], &transition_window, 0, 0)) / 2 + 101; + transition_window.DrawTitleText(pFontCreate, 0, v4, 0, pTransitionStrings[uCurrentHouse_Animation], 3); + } + else if ( map_id ) + { + sprintfex(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[409], pMapStats->pInfos[map_id].pName);// "Do you wish to leave %s?" + v4 = (212 - pFontCreate->CalcTextHeight(pTmpBuf.data(), &transition_window, 0, 0)) / 2 + 101; + transition_window.DrawTitleText(pFontCreate, 0, v4, 0, pTmpBuf.data(), 3); + } + else Error("Troubles in da house"); + + _unused_5B5924_is_travel_ui_drawn = true; +}