diff --git a/Client/core/CClientVariables.cpp b/Client/core/CClientVariables.cpp index 8019c2687b6..0397dbf2641 100644 --- a/Client/core/CClientVariables.cpp +++ b/Client/core/CClientVariables.cpp @@ -256,6 +256,7 @@ void CClientVariables::ValidateValues() ClampValue("mtavolume", 0.0f, 1.0f); ClampValue("voicevolume", 0.0f, 1.0f); ClampValue("mapalpha", 0, 255); + ClampValue("mapimage", 0, 1); } void CClientVariables::LoadDefaults() @@ -313,7 +314,8 @@ void CClientVariables::LoadDefaults() DEFAULT("mastervolume", 1.0f); // master volume DEFAULT("mtavolume", 1.0f); // custom sound's volume DEFAULT("voicevolume", 1.0f); // voice chat output volume - DEFAULT("mapalpha", 155); // map alpha + DEFAULT("mapalpha", 155); // player map alpha + DEFAULT("mapimage", 0); // player map image DEFAULT("browser_speed", 1); // Browser speed DEFAULT("single_download", 0); // Single connection for downloads DEFAULT("packet_tag", 0); // Tag network packets diff --git a/Client/core/CSettings.cpp b/Client/core/CSettings.cpp index 1cfe5c90eb8..6792bac4508 100644 --- a/Client/core/CSettings.cpp +++ b/Client/core/CSettings.cpp @@ -376,7 +376,7 @@ void CSettings::CreateGUI() m_pButtonGenerateNickIcon->SetProperty("DistributeCapturedInputs", "True"); m_pSavePasswords = reinterpret_cast(pManager->CreateCheckBox(pTabMultiplayer, _("Save server passwords"), true)); - m_pSavePasswords->SetPosition(CVector2D(vecTemp.fX, vecTemp.fY + 50.0f)); + m_pSavePasswords->SetPosition(CVector2D(vecTemp.fX, vecTemp.fY + 35.0f)); m_pSavePasswords->GetPosition(vecTemp, false); m_pSavePasswords->AutoSize(NULL, 20.0f); @@ -411,11 +411,13 @@ void CSettings::CreateGUI() m_pCheckBoxCustomizedSAFiles->AutoSize(NULL, 20.0f); m_pMapRenderingLabel = reinterpret_cast(pManager->CreateLabel(pTabMultiplayer, _("Map rendering options"))); - m_pMapRenderingLabel->SetPosition(CVector2D(vecTemp.fX, vecTemp.fY + 29.0f)); + m_pMapRenderingLabel->SetPosition(CVector2D(vecTemp.fX, vecTemp.fY + 30.0f)); m_pMapRenderingLabel->GetPosition(vecTemp, false); m_pMapRenderingLabel->SetFont("default-bold-small"); m_pMapRenderingLabel->AutoSize(); + vecTemp.fX += 5.0f; + m_pMapAlphaLabel = reinterpret_cast(pManager->CreateLabel(pTabMultiplayer, _("Opacity:"))); m_pMapAlphaLabel->SetPosition(CVector2D(vecTemp.fX, vecTemp.fY + 24.0f)); m_pMapAlphaLabel->GetPosition(vecTemp, false); @@ -433,6 +435,20 @@ void CSettings::CreateGUI() m_pMapAlphaValueLabel->GetPosition(vecTemp, false); m_pMapAlphaValueLabel->AutoSize("100%"); + m_pMapAlphaLabel->GetPosition(vecTemp, false); + vecTemp.fY += 24.0f; + + m_pPlayerMapImageLabel = reinterpret_cast(pManager->CreateLabel(pTabMultiplayer, _("Image resolution:"))); + m_pPlayerMapImageLabel->SetPosition(CVector2D(vecTemp.fX, vecTemp.fY + 2.0f)); + m_pPlayerMapImageLabel->AutoSize(); + + m_pPlayerMapImageCombo = reinterpret_cast(pManager->CreateComboBox(pTabMultiplayer, "")); + m_pPlayerMapImageCombo->SetPosition(CVector2D(vecTemp.fX + fIndentX + 5.0f, vecTemp.fY - 1.0f)); + m_pPlayerMapImageCombo->SetSize(CVector2D(170.f, 95.0f)); + m_pPlayerMapImageCombo->AddItem(_("1024 x 1024 (Default)")); // index 0 + m_pPlayerMapImageCombo->AddItem(_("2048 x 2048")); // index 1 + m_pPlayerMapImageCombo->SetReadOnly(true); + /** * Audio tab **/ @@ -625,16 +641,13 @@ void CSettings::CreateGUI() * Video tab **/ fIndentX = pManager->CGUI_GetMaxTextExtent("default-normal", _("Resolution:"), _("FOV:"), _("Draw Distance:"), _("Brightness:"), _("FX Quality:"), - _("Anisotropic filtering:"), _("Anti-aliasing:"), _("Aspect Ratio:"), _("Opacity:")); + _("Anisotropic filtering:"), _("Anti-aliasing:"), _("Aspect Ratio:")); - m_pVideoGeneralLabel = reinterpret_cast(pManager->CreateLabel(pTabVideo, _("General"))); - m_pVideoGeneralLabel->SetPosition(CVector2D(11, 13)); - m_pVideoGeneralLabel->GetPosition(vecTemp, false); - m_pVideoGeneralLabel->AutoSize(NULL, 3.0f); - m_pVideoGeneralLabel->SetFont("default-bold-small"); + vecTemp.fX = 11.0f; + vecTemp.fY = 13.0f; m_pVideoResolutionLabel = reinterpret_cast(pManager->CreateLabel(pTabVideo, _("Resolution:"))); - m_pVideoResolutionLabel->SetPosition(CVector2D(vecTemp.fX, vecTemp.fY + 26.0f)); + m_pVideoResolutionLabel->SetPosition(CVector2D(vecTemp.fX, vecTemp.fY)); m_pVideoResolutionLabel->GetPosition(vecTemp, false); m_pVideoResolutionLabel->AutoSize(); @@ -833,6 +846,10 @@ void CSettings::CreateGUI() m_pCheckBoxBlur->SetPosition(CVector2D(vecTemp.fX, vecTemp.fY + 130.0f)); m_pCheckBoxBlur->AutoSize(NULL, 20.0f); + m_pCheckBoxCoronaReflections = reinterpret_cast(pManager->CreateCheckBox(pTabVideo, _("Corona rain reflections"), true)); + m_pCheckBoxCoronaReflections->SetPosition(CVector2D(vecTemp.fX, vecTemp.fY + 150.0f)); + m_pCheckBoxCoronaReflections->AutoSize(nullptr, 20.0f); + float fPosY = vecTemp.fY; m_pCheckBoxMinimize = reinterpret_cast(pManager->CreateCheckBox(pTabVideo, _("Full Screen Minimize"), true)); m_pCheckBoxMinimize->SetPosition(CVector2D(vecTemp.fX + 245.0f, fPosY + 30.0f)); @@ -878,10 +895,6 @@ void CSettings::CreateGUI() m_pCheckBoxHighDetailPeds->SetPosition(CVector2D(vecTemp.fX + 245.0f, fPosY + 110.0f)); m_pCheckBoxHighDetailPeds->AutoSize(NULL, 20.0f); - m_pCheckBoxCoronaReflections = reinterpret_cast(pManager->CreateCheckBox(pTabVideo, _("Corona rain reflections"), true)); - m_pCheckBoxCoronaReflections->SetPosition(CVector2D(vecTemp.fX + 245.0f, fPosY + 130.0f)); - m_pCheckBoxCoronaReflections->AutoSize(NULL, 20.0f); - vecTemp.fY += 10; m_pTabs->GetSize(vecTemp); @@ -1010,6 +1023,7 @@ void CSettings::CreateGUI() 5.0f; vecTemp.fX += 10.0f; + // Fast clothes loading m_pFastClothesLabel = reinterpret_cast(pManager->CreateLabel(pTabAdvanced, _("Fast CJ clothes loading:"))); m_pFastClothesLabel->SetPosition(CVector2D(vecTemp.fX, vecTemp.fY)); @@ -1238,7 +1252,7 @@ void CSettings::CreateGUI() vecTemp.fX -= fComboWidth + 15; // Description label - vecTemp.fY = 354 + 10; + vecTemp.fY += 15.0f; m_pAdvancedSettingDescriptionLabel = reinterpret_cast(pManager->CreateLabel(pTabAdvanced, "")); m_pAdvancedSettingDescriptionLabel->SetPosition(CVector2D(vecTemp.fX + 10.f, vecTemp.fY)); m_pAdvancedSettingDescriptionLabel->SetFont("default-bold-small"); @@ -1629,12 +1643,17 @@ void CSettings::UpdateVideoTab() float fPos = SharedUtil::Unlerp(g_pCore->GetMinStreamingMemory(), uiStreamingMemory, g_pCore->GetMaxStreamingMemory()); m_pStreamingMemory->SetScrollPosition(fPos); + // Player map alpha int iVar = 0; CVARS_GET("mapalpha", iVar); int iAlphaPercent = ceil(((float)Clamp(0, iVar, 255) / 255) * 100); m_pMapAlphaValueLabel->SetText(SString("%i%%", iAlphaPercent).c_str()); float sbPos = (float)iAlphaPercent / 100.0f; m_pMapAlpha->SetScrollPosition(sbPos); + + // Player map image + CVARS_GET("mapimage", iVar); + m_pPlayerMapImageCombo->SetSelectedItemByIndex(iVar); } // @@ -1851,7 +1870,9 @@ bool CSettings::OnVideoDefaultClick(CGUIElement* pElement) CVARS_SET("streaming_memory", g_pCore->GetMaxStreamingMemory()); + // Player map defaults CVARS_SET("mapalpha", 155); + CVARS_SET("mapimage", 0); // Display restart required message if required bool bIsAntiAliasingChanged = gameSettings->GetAntiAliasing() != m_pComboAntiAliasing->GetSelectedItemIndex(); @@ -3609,12 +3630,16 @@ void CSettings::SaveData() CVARS_SET("update_auto_install", iSelected); } - // Map alpha + // Player map alpha SString sText = m_pMapAlphaValueLabel->GetText(); - float fMapAlpha = ((atof(sText.substr(0, sText.length() - 1).c_str())) / 100) * 255; CVARS_SET("mapalpha", fMapAlpha); + // Player map image + int selectedComboIndex = m_pPlayerMapImageCombo->GetSelectedItemIndex(); + if (selectedComboIndex != -1) + CVARS_SET("mapimage", selectedComboIndex); + // Language CGUIListItem* pItem = m_pInterfaceLanguageSelector->GetSelectedItem(); if (pItem) diff --git a/Client/core/CSettings.h b/Client/core/CSettings.h index db6c077df41..9c288557e6c 100644 --- a/Client/core/CSettings.h +++ b/Client/core/CSettings.h @@ -196,6 +196,8 @@ class CSettings CGUIComboBox* m_pFullscreenStyleCombo; CGUILabel* m_pPriorityLabel; CGUIComboBox* m_pPriorityCombo; + CGUILabel* m_pPlayerMapImageLabel; + CGUIComboBox* m_pPlayerMapImageCombo; CGUILabel* m_pFastClothesLabel; CGUIComboBox* m_pFastClothesCombo; CGUILabel* m_pAudioGeneralLabel; diff --git a/Client/mods/deathmatch/CClient.cpp b/Client/mods/deathmatch/CClient.cpp index ec176559965..e532ef2f71a 100644 --- a/Client/mods/deathmatch/CClient.cpp +++ b/Client/mods/deathmatch/CClient.cpp @@ -64,17 +64,17 @@ int CClient::ClientInitialize(const char* szArguments, CCoreInterface* pCore) g_pCore->GetCommands()->Add("enter_passenger", _("enters a car as passenger"), COMMAND_EnterPassenger, true, true); g_pCore->GetCommands()->Add("radio_next", _("next radio channel"), COMMAND_RadioNext, true, true); g_pCore->GetCommands()->Add("radio_previous", _("previous radio channel"), COMMAND_RadioPrevious, true, true); - g_pCore->GetCommands()->Add("radar", _("enables the radar view"), COMMAND_RadarMap, true, true); - g_pCore->GetCommands()->Add("radar_zoom_in", _("zooms the radar in"), COMMAND_RadarZoomIn, true, true); - g_pCore->GetCommands()->Add("radar_zoom_out", _("zooms the radar out"), COMMAND_RadarZoomOut, true, true); - g_pCore->GetCommands()->Add("radar_move_north", _("moves the radar north"), COMMAND_RadarMoveNorth, true, true); - g_pCore->GetCommands()->Add("radar_move_south", _("moves the radar south"), COMMAND_RadarMoveSouth, true, true); - g_pCore->GetCommands()->Add("radar_move_east", _("moves the radar east"), COMMAND_RadarMoveEast, true, true); - g_pCore->GetCommands()->Add("radar_move_west", _("moves the radar west"), COMMAND_RadarMoveWest, true, true); - g_pCore->GetCommands()->Add("radar_attach", _("attaches the radar"), COMMAND_RadarAttach, true, true); - g_pCore->GetCommands()->Add("radar_opacity_down", _("reduces radar opacity"), COMMAND_RadarOpacityDown, true, true); - g_pCore->GetCommands()->Add("radar_opacity_up", _("increases radar opacity"), COMMAND_RadarOpacityUp, true, true); - g_pCore->GetCommands()->Add("radar_help", _("toggles radar help text"), COMMAND_RadarHelp, true, true); + g_pCore->GetCommands()->Add("radar", _("enables the player-map view"), COMMAND_PlayerMap, true, true); + g_pCore->GetCommands()->Add("radar_zoom_in", _("zooms the player-map in"), COMMAND_PlayerMapZoomIn, true, true); + g_pCore->GetCommands()->Add("radar_zoom_out", _("zooms the player-map out"), COMMAND_PlayerMapZoomOut, true, true); + g_pCore->GetCommands()->Add("radar_move_north", _("moves the player-map north"), COMMAND_PlayerMapMoveNorth, true, true); + g_pCore->GetCommands()->Add("radar_move_south", _("moves the player-map south"), COMMAND_PlayerMapMoveSouth, true, true); + g_pCore->GetCommands()->Add("radar_move_east", _("moves the player-map east"), COMMAND_PlayerMapMoveEast, true, true); + g_pCore->GetCommands()->Add("radar_move_west", _("moves the player-map west"), COMMAND_PlayerMapMoveWest, true, true); + g_pCore->GetCommands()->Add("radar_attach", _("attaches the player-map"), COMMAND_PlayerMapAttach, true, true); + g_pCore->GetCommands()->Add("radar_opacity_down", _("reduces player-map opacity"), COMMAND_PlayerMapOpacityDown, true, true); + g_pCore->GetCommands()->Add("radar_opacity_up", _("increases player-map opacity"), COMMAND_PlayerMapOpacityUp, true, true); + g_pCore->GetCommands()->Add("radar_help", _("toggles player-map help text"), COMMAND_PlayerMapHelp, true, true); g_pCore->GetCommands()->Add("msg_target", _("sends a message to the targetted player"), COMMAND_MessageTarget, true); g_pCore->GetCommands()->Add("vehicle_next_weapon", _("changes to the next weapon whilst in a vehicle"), COMMAND_VehicleNextWeapon, true); g_pCore->GetCommands()->Add("vehicle_previous_weapon", _("changes to the previous weapon whilst in a vehicle"), COMMAND_VehiclePreviousWeapon, true); diff --git a/Client/mods/deathmatch/ClientCommands.cpp b/Client/mods/deathmatch/ClientCommands.cpp index 6ca4d736253..123ee59dcbb 100644 --- a/Client/mods/deathmatch/ClientCommands.cpp +++ b/Client/mods/deathmatch/ClientCommands.cpp @@ -235,154 +235,137 @@ void COMMAND_Screenshot ( const char* szCmdLine ) } */ -void COMMAND_RadarMap(const char* szCmdLine) +void COMMAND_PlayerMap(const char* szCmdLine) { - int iCmd = (szCmdLine && szCmdLine[0]) ? atoi(szCmdLine) : -1; - bool bShow = (iCmd == 1) ? true : (iCmd == 0) ? false : !g_pClientGame->GetRadarMap()->GetRadarEnabled(); - g_pClientGame->GetRadarMap()->SetRadarEnabled(bShow); + int cmd = (szCmdLine && szCmdLine[0]) ? atoi(szCmdLine) : -1; + bool show = (cmd == 1) ? true : (cmd == 0) ? false : !g_pClientGame->GetPlayerMap()->GetPlayerMapEnabled(); + g_pClientGame->GetPlayerMap()->SetPlayerMapEnabled(show); } -void COMMAND_RadarZoomIn(const char* szCmdLine) +void COMMAND_PlayerMapZoomIn(const char* szCmdLine) { - CRadarMap* pRadarMap = g_pClientGame->GetRadarMap(); - - if (pRadarMap->IsRadarShowing()) - { - pRadarMap->ZoomIn(); - } + CPlayerMap* playerMap = g_pClientGame->GetPlayerMap(); + if (playerMap->IsPlayerMapShowing()) + playerMap->ZoomIn(); } -void COMMAND_RadarZoomOut(const char* szCmdLine) +void COMMAND_PlayerMapZoomOut(const char* szCmdLine) { - CRadarMap* pRadarMap = g_pClientGame->GetRadarMap(); - - if (pRadarMap->IsRadarShowing()) - { - pRadarMap->ZoomOut(); - } + CPlayerMap* playerMap = g_pClientGame->GetPlayerMap(); + if (playerMap->IsPlayerMapShowing()) + playerMap->ZoomOut(); } -void COMMAND_RadarMoveNorth(const char* szCmdLine) +void COMMAND_PlayerMapMoveNorth(const char* szCmdLine) { - CRadarMap* pRadarMap = g_pClientGame->GetRadarMap(); + CPlayerMap* playerMap = g_pClientGame->GetPlayerMap(); + if (!playerMap->IsPlayerMapShowing()) + return; - if (pRadarMap->IsRadarShowing()) + if (playerMap->IsMovingNorth()) + playerMap->SetMovingNorth(false); + else if (playerMap->IsMovingSouth()) + playerMap->SetMovingSouth(false); + else { - // Toggle on/off - if (pRadarMap->IsMovingNorth()) - pRadarMap->SetMovingNorth(false); - else if (pRadarMap->IsMovingSouth()) - pRadarMap->SetMovingSouth(false); - else - { - pRadarMap->SetMovingNorth(true); - pRadarMap->SetMovingSouth(false); - pRadarMap->SetMovingEast(false); - pRadarMap->SetMovingWest(false); - } + playerMap->SetMovingNorth(true); + playerMap->SetMovingSouth(false); + playerMap->SetMovingEast(false); + playerMap->SetMovingWest(false); } } -void COMMAND_RadarMoveSouth(const char* szCmdLine) +void COMMAND_PlayerMapMoveSouth(const char* szCmdLine) { - CRadarMap* pRadarMap = g_pClientGame->GetRadarMap(); + CPlayerMap* playerMap = g_pClientGame->GetPlayerMap(); + if (!playerMap->IsPlayerMapShowing()) + return; - if (pRadarMap->IsRadarShowing()) + if (playerMap->IsMovingSouth()) + playerMap->SetMovingSouth(false); + else if (playerMap->IsMovingNorth()) + playerMap->SetMovingNorth(false); + else { - // Toggle on/off - if (pRadarMap->IsMovingSouth()) - pRadarMap->SetMovingSouth(false); - else if (pRadarMap->IsMovingNorth()) - pRadarMap->SetMovingNorth(false); - else - { - pRadarMap->SetMovingNorth(false); - pRadarMap->SetMovingSouth(true); - pRadarMap->SetMovingEast(false); - pRadarMap->SetMovingWest(false); - } + playerMap->SetMovingNorth(false); + playerMap->SetMovingSouth(true); + playerMap->SetMovingEast(false); + playerMap->SetMovingWest(false); } } -void COMMAND_RadarMoveEast(const char* szCmdLine) +void COMMAND_PlayerMapMoveEast(const char* szCmdLine) { - CRadarMap* pRadarMap = g_pClientGame->GetRadarMap(); + CPlayerMap* playerMap = g_pClientGame->GetPlayerMap(); + if (!playerMap->IsPlayerMapShowing()) + return; - if (pRadarMap->IsRadarShowing()) + if (playerMap->IsMovingEast()) + playerMap->SetMovingEast(false); + else if (playerMap->IsMovingWest()) + playerMap->SetMovingWest(false); + else { - // Toggle on/off - if (pRadarMap->IsMovingEast()) - pRadarMap->SetMovingEast(false); - else if (pRadarMap->IsMovingWest()) - pRadarMap->SetMovingWest(false); - else - { - pRadarMap->SetMovingNorth(false); - pRadarMap->SetMovingSouth(false); - pRadarMap->SetMovingEast(true); - pRadarMap->SetMovingWest(false); - } + playerMap->SetMovingNorth(false); + playerMap->SetMovingSouth(false); + playerMap->SetMovingEast(true); + playerMap->SetMovingWest(false); } } -void COMMAND_RadarMoveWest(const char* szCmdLine) +void COMMAND_PlayerMapMoveWest(const char* szCmdLine) { - CRadarMap* pRadarMap = g_pClientGame->GetRadarMap(); + CPlayerMap* playerMap = g_pClientGame->GetPlayerMap(); + if (!playerMap->IsPlayerMapShowing()) + return; - if (pRadarMap->IsRadarShowing()) + if (playerMap->IsMovingWest()) + playerMap->SetMovingWest(false); + else if (playerMap->IsMovingEast()) + playerMap->SetMovingEast(false); + else { - // Toggle on/off - if (pRadarMap->IsMovingWest()) - pRadarMap->SetMovingWest(false); - else if (pRadarMap->IsMovingEast()) - pRadarMap->SetMovingEast(false); - else - { - pRadarMap->SetMovingNorth(false); - pRadarMap->SetMovingSouth(false); - pRadarMap->SetMovingEast(false); - pRadarMap->SetMovingWest(true); - } + playerMap->SetMovingNorth(false); + playerMap->SetMovingSouth(false); + playerMap->SetMovingEast(false); + playerMap->SetMovingWest(true); } } -void COMMAND_RadarAttach(const char* szCmdLine) +void COMMAND_PlayerMapAttach(const char* szCmdLine) { - CRadarMap* pRadarMap = g_pClientGame->GetRadarMap(); - - if (pRadarMap->IsRadarShowing()) - { - pRadarMap->SetAttachedToLocalPlayer(!g_pClientGame->GetRadarMap()->IsAttachedToLocalPlayer()); - } + CPlayerMap* playerMap = g_pClientGame->GetPlayerMap(); + if (playerMap->IsPlayerMapShowing()) + playerMap->SetAttachedToLocalPlayer(!g_pClientGame->GetPlayerMap()->IsAttachedToLocalPlayer()); } -void COMMAND_RadarOpacityDown(const char* szCmdLine) +void COMMAND_PlayerMapOpacityDown(const char* szCmdLine) { - CRadarMap* pRadarMap = g_pClientGame->GetRadarMap(); - if (pRadarMap->IsRadarShowing()) - { - int iAlpha; - g_pCore->GetCVars()->Get("mapalpha", iAlpha); - iAlpha = std::max(0, iAlpha - 20); - g_pCore->GetCVars()->Set("mapalpha", iAlpha); - } + CPlayerMap* playerMap = g_pClientGame->GetPlayerMap(); + if (!playerMap->IsPlayerMapShowing()) + return; + + int mapAlpha; + g_pCore->GetCVars()->Get("mapalpha", mapAlpha); + mapAlpha = std::max(0, mapAlpha - 20); + g_pCore->GetCVars()->Set("mapalpha", mapAlpha); } -void COMMAND_RadarOpacityUp(const char* szCmdLine) +void COMMAND_PlayerMapOpacityUp(const char* szCmdLine) { - CRadarMap* pRadarMap = g_pClientGame->GetRadarMap(); - if (pRadarMap->IsRadarShowing()) - { - int iAlpha; - g_pCore->GetCVars()->Get("mapalpha", iAlpha); - iAlpha = std::min(255, iAlpha + 20); - g_pCore->GetCVars()->Set("mapalpha", iAlpha); - } + CPlayerMap* playerMap = g_pClientGame->GetPlayerMap(); + if (!playerMap->IsPlayerMapShowing()) + return; + + int mapAlpha; + g_pCore->GetCVars()->Get("mapalpha", mapAlpha); + mapAlpha = std::min(255, mapAlpha + 20); + g_pCore->GetCVars()->Set("mapalpha", mapAlpha); } -void COMMAND_RadarHelp(const char* szCmdLine) +void COMMAND_PlayerMapHelp(const char* szCmdLine) { - g_pClientGame->GetRadarMap()->ToggleHelpText(); + g_pClientGame->GetPlayerMap()->ToggleHelpText(); } void COMMAND_MessageTarget(const char* szCmdLine) diff --git a/Client/mods/deathmatch/ClientCommands.h b/Client/mods/deathmatch/ClientCommands.h index c6aa7550996..af31db12d49 100644 --- a/Client/mods/deathmatch/ClientCommands.h +++ b/Client/mods/deathmatch/ClientCommands.h @@ -21,17 +21,17 @@ void COMMAND_ShowNetstat(const char* szCmdLine); void COMMAND_EnterPassenger(const char* szCmdLine); void COMMAND_RadioNext(const char* szCmdLine); void COMMAND_RadioPrevious(const char* szCmdLine); -void COMMAND_RadarMap(const char* szCmdLine); -void COMMAND_RadarZoomIn(const char* szCmdLine); -void COMMAND_RadarZoomOut(const char* szCmdLine); -void COMMAND_RadarMoveNorth(const char* szCmdLine); -void COMMAND_RadarMoveSouth(const char* szCmdLine); -void COMMAND_RadarMoveEast(const char* szCmdLine); -void COMMAND_RadarMoveWest(const char* szCmdLine); -void COMMAND_RadarAttach(const char* szCmdLine); -void COMMAND_RadarOpacityDown(const char* szCmdLine); -void COMMAND_RadarOpacityUp(const char* szCmdLine); -void COMMAND_RadarHelp(const char* szCmdLine); +void COMMAND_PlayerMap(const char* szCmdLine); +void COMMAND_PlayerMapZoomIn(const char* szCmdLine); +void COMMAND_PlayerMapZoomOut(const char* szCmdLine); +void COMMAND_PlayerMapMoveNorth(const char* szCmdLine); +void COMMAND_PlayerMapMoveSouth(const char* szCmdLine); +void COMMAND_PlayerMapMoveEast(const char* szCmdLine); +void COMMAND_PlayerMapMoveWest(const char* szCmdLine); +void COMMAND_PlayerMapAttach(const char* szCmdLine); +void COMMAND_PlayerMapOpacityDown(const char* szCmdLine); +void COMMAND_PlayerMapOpacityUp(const char* szCmdLine); +void COMMAND_PlayerMapHelp(const char* szCmdLine); void COMMAND_MessageTarget(const char* szCmdLine); void COMMAND_VehicleNextWeapon(const char* szCmdLine); void COMMAND_VehiclePreviousWeapon(const char* szCmdLine); diff --git a/Client/mods/deathmatch/logic/CClientGame.cpp b/Client/mods/deathmatch/logic/CClientGame.cpp index 9c40277bfce..acc385998ce 100644 --- a/Client/mods/deathmatch/logic/CClientGame.cpp +++ b/Client/mods/deathmatch/logic/CClientGame.cpp @@ -229,7 +229,7 @@ CClientGame::CClientGame(bool bLocalPlay) : m_ServerInfo(new CServerInfo()) m_pObjectSync = new CObjectSync(m_pObjectManager); #endif m_pNametags = new CNametags(m_pManager); - m_pRadarMap = new CRadarMap(m_pManager); + m_pPlayerMap = new CPlayerMap(m_pManager); // Set the screenshot path /* This is now done in CCore, to maintain a global screenshot path @@ -554,7 +554,7 @@ CClientGame::~CClientGame() #endif SAFE_DELETE(m_pBlendedWeather); SAFE_DELETE(m_pMovingObjectsManager); - SAFE_DELETE(m_pRadarMap); + SAFE_DELETE(m_pPlayerMap); SAFE_DELETE(m_pRemoteCalls); SAFE_DELETE(m_pLuaManager); SAFE_DELETE(m_pLatentTransferManager); @@ -1103,7 +1103,7 @@ void CClientGame::DoPulsePostFrame() CClientPerfStatManager::GetSingleton()->DoPulse(); } - m_pRadarMap->DoRender(); + m_pPlayerMap->DoRender(); m_pManager->DoRender(); DoPulses(); @@ -1441,8 +1441,8 @@ void CClientGame::DoPulses() } // Check for radar input - m_pRadarMap->DoPulse(); - g_pCore->GetGraphics()->SetAspectRatioAdjustmentSuspended(m_pRadarMap->IsRadarShowing()); + m_pPlayerMap->DoPulse(); + g_pCore->GetGraphics()->SetAspectRatioAdjustmentSuspended(m_pPlayerMap->IsPlayerMapShowing()); // Got a local player? if (m_pLocalPlayer) @@ -5412,8 +5412,8 @@ void CClientGame::ResetMapInfo() // Keybinds g_pCore->GetKeyBinds()->SetAllControlsEnabled(true, true, true); - // Radarmap - m_pRadarMap->SetForcedState(false); + // Player map + m_pPlayerMap->SetForcedState(false); // Camera m_pCamera->FadeOut(0.0f, 0, 0, 0); diff --git a/Client/mods/deathmatch/logic/CClientGame.h b/Client/mods/deathmatch/logic/CClientGame.h index 4423f35cf2a..e887199fcd8 100644 --- a/Client/mods/deathmatch/logic/CClientGame.h +++ b/Client/mods/deathmatch/logic/CClientGame.h @@ -28,7 +28,7 @@ #include "CUnoccupiedVehicleSync.h" #include "CPedSync.h" #include "CObjectSync.h" -#include "CRadarMap.h" +#include "CPlayerMap.h" #include "CClientTeamManager.h" #include "CClientPedManager.h" #include "lua/CLuaManager.h" @@ -296,7 +296,7 @@ class CClientGame CBlendedWeather* GetBlendedWeather() { return m_pBlendedWeather; }; CNetAPI* GetNetAPI() { return m_pNetAPI; }; - CRadarMap* GetRadarMap() { return m_pRadarMap; }; + CPlayerMap* GetPlayerMap() { return m_pPlayerMap; }; CMovingObjectsManager* GetMovingObjectsManager() { return m_pMovingObjectsManager; } CClientPlayer* GetLocalPlayer() { return m_pLocalPlayer; } @@ -694,7 +694,7 @@ class CClientGame CNetworkStats* m_pNetworkStats; CSyncDebug* m_pSyncDebug; // CScreenshot* m_pScreenshot; - CRadarMap* m_pRadarMap; + CPlayerMap* m_pPlayerMap; CTransferBox* m_pTransferBox; CResourceManager* m_pResourceManager; CScriptKeyBinds* m_pScriptKeyBinds; diff --git a/Client/mods/deathmatch/logic/CRadarMap.cpp b/Client/mods/deathmatch/logic/CPlayerMap.cpp similarity index 71% rename from Client/mods/deathmatch/logic/CRadarMap.cpp rename to Client/mods/deathmatch/logic/CPlayerMap.cpp index 4dd01baccd7..de1529972a5 100644 --- a/Client/mods/deathmatch/logic/CRadarMap.cpp +++ b/Client/mods/deathmatch/logic/CPlayerMap.cpp @@ -2,8 +2,8 @@ * * PROJECT: Multi Theft Auto v1.0 * LICENSE: See LICENSE in the top level directory - * FILE: mods/deathmatch/logic/CRadarMap.cpp - * PURPOSE: Full screen radar map renderer + * FILE: mods/deathmatch/logic/CPlayerMap.cpp + * PURPOSE: Full screen player map renderer * * Multi Theft Auto is available from http://www.multitheftauto.com/ * @@ -23,15 +23,19 @@ enum MARKER_LAST_SPRITE_INDEX = MARKER_FIRST_SPRITE_INDEX + RADAR_MARKER_LIMIT - 1, }; -CRadarMap::CRadarMap(CClientManager* pManager) +constexpr std::array MAP_IMAGE_SIZES = {1024, 2048}; + +CPlayerMap::CPlayerMap(CClientManager* pManager) { + m_failedToLoadTextures = false; + // Setup our managers m_pManager = pManager; m_pRadarMarkerManager = pManager->GetRadarMarkerManager(); m_pRadarAreaManager = m_pManager->GetRadarAreaManager(); - // Set the radar bools - m_bIsRadarEnabled = false; + // Set the map bools + m_bIsPlayerMapEnabled = false; m_bForcedState = false; m_bIsAttachedToLocal = false; m_bHideHelpText = false; @@ -52,17 +56,17 @@ CRadarMap::CRadarMap(CClientManager* pManager) m_fZoom = 1; m_iHorizontalMovement = 0; m_iVerticalMovement = 0; - SetupMapVariables(); - // Create the radar and local player blip images - m_pRadarImage = - g_pCore->GetGraphics()->GetRenderItemManager()->CreateTexture(CalcMTASAPath("MTA\\cgui\\images\\radar.jpg"), NULL, false, 1024, 1024, RFORMAT_DXT1); - m_pLocalPlayerBlip = g_pCore->GetGraphics()->GetRenderItemManager()->CreateTexture(CalcMTASAPath("MTA\\cgui\\images\\radarset\\02.png")); + // Init texture vars + m_mapImageTexture = nullptr; + m_playerMarkerTexture = nullptr; - // Create the marker textures - CreateMarkerTextures(); + // Create all map textures + CreateAllTextures(); // Create the text displays for the help text + const SColorRGBA colorWhiteTransparent(255, 255, 255, 200); + const SColorRGBA colorWhite(255, 255, 255, 255); struct { SColor color; @@ -70,17 +74,15 @@ CRadarMap::CRadarMap(CClientManager* pManager) float fScale; SString strMessage; } messageList[] = { - {SColorRGBA(255, 255, 255, 200), 0.92f, 1.5f, "Current Mode: Kill all humans"}, - {SColorRGBA(255, 255, 255, 255), 0.95f, 1.0f, SString("Press %s to change mode.", *GetBoundKeyName("radar_attach"))}, - {SColorRGBA(255, 255, 255, 255), 0.05f, 1.0f, - SString("Press %s/%s to zoom in/out.", *GetBoundKeyName("radar_zoom_in"), *GetBoundKeyName("radar_zoom_out"))}, - {SColorRGBA(255, 255, 255, 255), 0.08f, 1.0f, - SString("Press %s, %s, %s, %s to navigate the map.", *GetBoundKeyName("radar_move_north"), *GetBoundKeyName("radar_move_east"), - *GetBoundKeyName("radar_move_south"), *GetBoundKeyName("radar_move_west"))}, - {SColorRGBA(255, 255, 255, 255), 0.11f, 1.0f, - SString("Press %s/%s to change opacity.", *GetBoundKeyName("radar_opacity_down"), *GetBoundKeyName("radar_opacity_up"))}, - {SColorRGBA(255, 255, 255, 255), 0.14f, 1.0f, SString("Press %s to hide the map.", *GetBoundKeyName("radar"))}, - {SColorRGBA(255, 255, 255, 255), 0.17f, 1.0f, SString("Press %s to hide this help text.", *GetBoundKeyName("radar_help"))}, + {colorWhiteTransparent, 0.92f, 1.5f, ""}, + {colorWhite, 0.95f, 1.0f, SString(_("Change mode: %s"), *GetBoundKeyName("radar_attach"))}, + + {colorWhite, 0.05f, 1.0f, SString(_("Zoom: %s/%s Movement: %s, %s, %s, %s Opacity: %s/%s"), + *GetBoundKeyName("radar_zoom_in"), *GetBoundKeyName("radar_zoom_out"), *GetBoundKeyName("radar_move_north"), + *GetBoundKeyName("radar_move_east"), *GetBoundKeyName("radar_move_south"), *GetBoundKeyName("radar_move_west"), + *GetBoundKeyName("radar_opacity_down"), *GetBoundKeyName("radar_opacity_up"))}, + {colorWhite, 0.07f, 1.0f, SString(_("Toggle map: %s Toggle help text: %s"), + *GetBoundKeyName("radar"), *GetBoundKeyName("radar_help"))}, }; for (uint i = 0; i < NUMELMS(messageList); i++) @@ -98,26 +100,82 @@ CRadarMap::CRadarMap(CClientManager* pManager) // Default to attached to player SetAttachedToLocalPlayer(true); + + SetupMapVariables(); } -CRadarMap::~CRadarMap() +CPlayerMap::~CPlayerMap() { // Delete our images - SAFE_RELEASE(m_pRadarImage); - SAFE_RELEASE(m_pLocalPlayerBlip); + SAFE_RELEASE(m_mapImageTexture); + SAFE_RELEASE(m_playerMarkerTexture); + for (uint i = 0; i < m_markerTextureList.size(); i++) + SAFE_RELEASE(m_markerTextureList[i]); + m_markerTextureList.clear(); - for (uint i = 0; i < m_MarkerTextureList.size(); i++) - SAFE_RELEASE(m_MarkerTextureList[i]); + // Don't need to delete the help texts as those are destroyed by the display manager +} - m_MarkerTextureList.clear(); +void CPlayerMap::CreateOrUpdateMapTexture() +{ + const std::uint32_t mapSize = MAP_IMAGE_SIZES[m_playerMapImageIndex]; + const SString fileName("MTA\\cgui\\images\\map_%d.png", mapSize); - // Don't need to delete the help texts as those are destroyed by the display manager + auto* newTexture = g_pCore->GetGraphics()->GetRenderItemManager()->CreateTexture(CalcMTASAPath(fileName), nullptr, false, mapSize, mapSize, RFORMAT_DXT1); + if (!newTexture) + throw std::runtime_error("Failed to load map image"); + + SAFE_RELEASE(m_mapImageTexture); + m_mapImageTexture = newTexture; +} + +void CPlayerMap::UpdateOrRevertMapTexture(std::size_t newImageIndex) +{ + const std::size_t oldImageIndex = m_playerMapImageIndex; + try + { + m_playerMapImageIndex = newImageIndex; + CreateOrUpdateMapTexture(); + } + catch (const std::exception& e) + { + m_playerMapImageIndex = oldImageIndex; + g_pCore->GetConsole()->Printf("Problem updating map image: %s", e.what()); + } +} + +void CPlayerMap::CreatePlayerBlipTexture() +{ + m_playerMarkerTexture = g_pCore->GetGraphics()->GetRenderItemManager()->CreateTexture(CalcMTASAPath("MTA\\cgui\\images\\radarset\\02.png")); + if (!m_playerMarkerTexture) + throw std::runtime_error("Failed to load player blip image"); +} + +void CPlayerMap::CreateAllTextures() +{ + try + { + // Create the map texture + m_playerMapImageIndex = g_pCore->GetCVars()->GetValue("mapimage"); + CreateOrUpdateMapTexture(); + + // Create the player blip texture + CreatePlayerBlipTexture(); + + // Create the other marker textures + CreateMarkerTextures(); + } + catch (const std::exception& e) + { + m_failedToLoadTextures = true; + g_pCore->GetConsole()->Printf("Problem initializing player map: %s", e.what()); + } } -void CRadarMap::DoPulse() +void CPlayerMap::DoPulse() { - // If our radar image exists - if (IsRadarShowing()) + // If our map image exists + if (IsPlayerMapShowing()) { // If we are following the local player blip if (m_bIsAttachedToLocal) @@ -154,11 +212,11 @@ void CRadarMap::DoPulse() } // -// Precreate all the textures for the radar map markers +// Precreate all the textures for the player map markers // -void CRadarMap::CreateMarkerTextures() +void CPlayerMap::CreateMarkerTextures() { - assert(m_MarkerTextureList.empty()); + m_markerTextureList.clear(); SString strRadarSetDirectory = CalcMTASAPath("MTA\\cgui\\images\\radarset\\"); // Load the 3 shapes @@ -166,25 +224,27 @@ void CRadarMap::CreateMarkerTextures() for (uint i = 0; i < NUMELMS(shapeFileNames); i++) { CTextureItem* pTextureItem = g_pCore->GetGraphics()->GetRenderItemManager()->CreateTexture(PathJoin(strRadarSetDirectory, shapeFileNames[i])); - m_MarkerTextureList.push_back(pTextureItem); + m_markerTextureList.push_back(pTextureItem); } - assert(m_MarkerTextureList.size() == MARKER_FIRST_SPRITE_INDEX); + if (m_markerTextureList.size() != MARKER_FIRST_SPRITE_INDEX) + throw std::runtime_error("Failed to load marker textures [1]"); // Load the icons for (uint i = 0; i < RADAR_MARKER_LIMIT; i++) { CTextureItem* pTextureItem = g_pCore->GetGraphics()->GetRenderItemManager()->CreateTexture(PathJoin(strRadarSetDirectory, SString("%02u.png", i + 1))); - m_MarkerTextureList.push_back(pTextureItem); + m_markerTextureList.push_back(pTextureItem); } - assert(m_MarkerTextureList.size() == MARKER_LAST_SPRITE_INDEX + 1); + if (m_markerTextureList.size() != MARKER_LAST_SPRITE_INDEX + 1) + throw std::runtime_error("Failed to load marker textures [2]"); } // // Get a texture for a marker, including scale and color // -CTextureItem* CRadarMap::GetMarkerTexture(CClientRadarMarker* pMarker, float fLocalZ, float* pfScale, SColor* pColor) +CTextureItem* CPlayerMap::GetMarkerTexture(CClientRadarMarker* pMarker, float fLocalZ, float* pfScale, SColor* pColor) { float fScale = pMarker->GetScale(); ulong ulSprite = pMarker->GetSprite(); @@ -220,26 +280,33 @@ CTextureItem* CRadarMap::GetMarkerTexture(CClientRadarMarker* pMarker, float fLo *pfScale = fScale; *pColor = color; - if (uiListIndex >= m_MarkerTextureList.size()) + if (uiListIndex >= m_markerTextureList.size()) return NULL; - return m_MarkerTextureList[uiListIndex]; + return m_markerTextureList[uiListIndex]; } -void CRadarMap::DoRender() +void CPlayerMap::DoRender() { - bool bIsRadarShowing = IsRadarShowing(); + bool isMapShowing = IsPlayerMapShowing(); - // Render if showing - if (bIsRadarShowing) + // Render if showing and textures are all loaded + if (isMapShowing && !m_failedToLoadTextures) { // Get the alpha value from the settings - int iRadarAlpha; - g_pCore->GetCVars()->Get("mapalpha", iRadarAlpha); + int mapAlpha; + g_pCore->GetCVars()->Get("mapalpha", mapAlpha); + const SColorARGB mapColor(mapAlpha, 255, 255, 255); + + // Update the image if the user changed it via a setting + auto mapImageIndex = g_pCore->GetCVars()->GetValue("mapimage"); + if (mapImageIndex != m_playerMapImageIndex) + { + UpdateOrRevertMapTexture(mapImageIndex); + } - g_pCore->GetGraphics()->DrawTexture(m_pRadarImage, static_cast(m_iMapMinX), static_cast(m_iMapMinY), - m_fMapSize / m_pRadarImage->m_uiSizeX, m_fMapSize / m_pRadarImage->m_uiSizeY, 0.0f, 0.0f, 0.0f, - SColorARGB(iRadarAlpha, 255, 255, 255)); + g_pCore->GetGraphics()->DrawTexture(m_mapImageTexture, static_cast(m_iMapMinX), static_cast(m_iMapMinY), + m_fMapSize / m_mapImageTexture->m_uiSizeX, m_fMapSize / m_mapImageTexture->m_uiSizeY, 0.0f, 0.0f, 0.0f, mapColor); // Grab the info for the local player blip CVector2D vecLocalPos; @@ -316,11 +383,11 @@ void CRadarMap::DoRender() } } - g_pCore->GetGraphics()->DrawTexture(m_pLocalPlayerBlip, vecLocalPos.fX, vecLocalPos.fY, 1.0, 1.0, vecLocalRot.fZ, 0.5f, 0.5f); + g_pCore->GetGraphics()->DrawTexture(m_playerMarkerTexture, vecLocalPos.fX, vecLocalPos.fY, 1.0, 1.0, vecLocalRot.fZ, 0.5f, 0.5f); } // Update visibility of help text - bool bRequiredTextVisible = bIsRadarShowing && !m_bHideHelpText; + bool bRequiredTextVisible = isMapShowing && !m_bHideHelpText; if (bRequiredTextVisible != m_bTextVisible) { m_bTextVisible = bRequiredTextVisible; @@ -331,31 +398,31 @@ void CRadarMap::DoRender() } } -void CRadarMap::SetRadarEnabled(bool bIsRadarEnabled) +void CPlayerMap::SetPlayerMapEnabled(bool show) { - bool bAlreadyEnabled = (m_bIsRadarEnabled || m_bForcedState); - bool bWillShow = (bIsRadarEnabled || m_bForcedState); - if (bAlreadyEnabled != bWillShow) + bool alreadyEnabled = (m_bIsPlayerMapEnabled || m_bForcedState); + bool definitiveShow = (show || m_bForcedState); + if (alreadyEnabled != definitiveShow) { - InternalSetRadarEnabled(bWillShow); + InternalSetPlayerMapEnabled(definitiveShow); } - m_bIsRadarEnabled = bIsRadarEnabled; + m_bIsPlayerMapEnabled = show; } -void CRadarMap::SetForcedState(bool bState) +void CPlayerMap::SetForcedState(bool state) { - bool bAlreadyShowing = (m_bIsRadarEnabled || m_bForcedState); - bool bWillShow = (m_bIsRadarEnabled || bState); - if (bAlreadyShowing != bWillShow) + bool currState = (m_bIsPlayerMapEnabled || m_bForcedState); + bool definitiveState = (m_bIsPlayerMapEnabled || state); + if (currState != definitiveState) { - InternalSetRadarEnabled(bWillShow); + InternalSetPlayerMapEnabled(definitiveState); } - m_bForcedState = bState; + m_bForcedState = state; } -void CRadarMap::InternalSetRadarEnabled(bool bEnabled) +void CPlayerMap::InternalSetPlayerMapEnabled(bool enable) { - if (bEnabled) + if (enable) { m_bChatVisible = g_pCore->IsChatVisible(); m_bChatInputBlocked = g_pCore->IsChatInputBlocked(); @@ -375,7 +442,7 @@ void CRadarMap::InternalSetRadarEnabled(bool bEnabled) } } -bool CRadarMap::CalculateEntityOnScreenPosition(CClientEntity* pEntity, CVector2D& vecLocalPos) +bool CPlayerMap::CalculateEntityOnScreenPosition(CClientEntity* pEntity, CVector2D& vecLocalPos) { // If the entity exists if (pEntity) @@ -406,7 +473,7 @@ bool CRadarMap::CalculateEntityOnScreenPosition(CClientEntity* pEntity, CVector2 return false; } -bool CRadarMap::CalculateEntityOnScreenPosition(CVector vecPosition, CVector2D& vecLocalPos) +bool CPlayerMap::CalculateEntityOnScreenPosition(CVector vecPosition, CVector2D& vecLocalPos) { // Adjust to the map variables and create the map ratio float fX = vecPosition.fX + 3000.0f; @@ -428,7 +495,7 @@ bool CRadarMap::CalculateEntityOnScreenPosition(CVector vecPosition, CVector2D& return false; } -void CRadarMap::SetupMapVariables() +void CPlayerMap::SetupMapVariables() { // Calculate the map size and the middle of the screen coords m_fMapSize = static_cast(m_uiHeight * m_fZoom); @@ -524,7 +591,7 @@ void CRadarMap::SetupMapVariables() } } -void CRadarMap::ZoomIn() +void CPlayerMap::ZoomIn() { if (m_fZoom <= 4) { @@ -533,7 +600,7 @@ void CRadarMap::ZoomIn() } } -void CRadarMap::ZoomOut() +void CPlayerMap::ZoomOut() { if (m_fZoom >= 1) { @@ -559,7 +626,7 @@ void CRadarMap::ZoomOut() } } -void CRadarMap::MoveNorth() +void CPlayerMap::MoveNorth() { if (!m_bIsAttachedToLocal) { @@ -579,7 +646,7 @@ void CRadarMap::MoveNorth() } } -void CRadarMap::MoveSouth() +void CPlayerMap::MoveSouth() { if (!m_bIsAttachedToLocal) { @@ -599,7 +666,7 @@ void CRadarMap::MoveSouth() } } -void CRadarMap::MoveEast() +void CPlayerMap::MoveEast() { if (!m_bIsAttachedToLocal) { @@ -619,7 +686,7 @@ void CRadarMap::MoveEast() } } -void CRadarMap::MoveWest() +void CPlayerMap::MoveWest() { if (!m_bIsAttachedToLocal) { @@ -639,30 +706,26 @@ void CRadarMap::MoveWest() } } -void CRadarMap::SetAttachedToLocalPlayer(bool bIsAttachedToLocal) +void CPlayerMap::SetAttachedToLocalPlayer(bool bIsAttachedToLocal) { m_bIsAttachedToLocal = bIsAttachedToLocal; SetupMapVariables(); if (m_bIsAttachedToLocal) - { - m_HelpTextList[0]->SetCaption("Current Mode: Attached to local player"); - } + m_HelpTextList[0]->SetCaption(_("Following Player")); else - { - m_HelpTextList[0]->SetCaption("Current Mode: Free Move"); - } + m_HelpTextList[0]->SetCaption(_("Free Movement")); } -bool CRadarMap::IsRadarShowing() +bool CPlayerMap::IsPlayerMapShowing() { - return ((m_bIsRadarEnabled || m_bForcedState) && m_pRadarImage && m_pLocalPlayerBlip && (!g_pCore->GetConsole()->IsVisible() && !g_pCore->IsMenuVisible())); + return ((m_bIsPlayerMapEnabled || m_bForcedState) && m_mapImageTexture && m_playerMarkerTexture && (!g_pCore->GetConsole()->IsVisible() && !g_pCore->IsMenuVisible())); } -bool CRadarMap::GetBoundingBox(CVector& vecMin, CVector& vecMax) +bool CPlayerMap::GetBoundingBox(CVector& vecMin, CVector& vecMax) { - // If our radar image exists (Values are not calculated unless map is showing) - if (IsRadarShowing()) + // If our map image exists (Values are not calculated unless map is showing) + if (IsPlayerMapShowing()) { vecMin.fX = static_cast(m_iMapMinX); vecMin.fY = static_cast(m_iMapMinY); @@ -678,12 +741,12 @@ bool CRadarMap::GetBoundingBox(CVector& vecMin, CVector& vecMax) } } -void CRadarMap::ToggleHelpText() +void CPlayerMap::ToggleHelpText() { m_bHideHelpText = !m_bHideHelpText; } -SString CRadarMap::GetBoundKeyName(const SString& strCommand) +SString CPlayerMap::GetBoundKeyName(const SString& strCommand) { CCommandBind* pCommandBind = g_pCore->GetKeyBinds()->GetBindFromCommand(strCommand, 0, 0, 0, false, 0); if (!pCommandBind) diff --git a/Client/mods/deathmatch/logic/CRadarMap.h b/Client/mods/deathmatch/logic/CPlayerMap.h similarity index 77% rename from Client/mods/deathmatch/logic/CRadarMap.h rename to Client/mods/deathmatch/logic/CPlayerMap.h index a3dd8f0d516..0d6edebb6f2 100644 --- a/Client/mods/deathmatch/logic/CRadarMap.h +++ b/Client/mods/deathmatch/logic/CPlayerMap.h @@ -2,8 +2,8 @@ * * PROJECT: Multi Theft Auto v1.0 * LICENSE: See LICENSE in the top level directory - * FILE: mods/deathmatch/logic/CRadarMap.h - * PURPOSE: Header for radar map class + * FILE: mods/deathmatch/logic/CPlayerMap.h + * PURPOSE: Header for player map class * * Multi Theft Auto is available from http://www.multitheftauto.com/ * @@ -16,19 +16,19 @@ #include #include -class CRadarMap +class CPlayerMap { public: - CRadarMap(class CClientManager* pManager); - virtual ~CRadarMap(); + CPlayerMap(class CClientManager* pManager); + virtual ~CPlayerMap(); void DoPulse(); void DoRender(); - bool IsRadarShowing(); + bool IsPlayerMapShowing(); - bool GetRadarEnabled() const { return m_bIsRadarEnabled; }; - void SetRadarEnabled(bool bIsRadarEnabled); + bool GetPlayerMapEnabled() const { return m_bIsPlayerMapEnabled; }; + void SetPlayerMapEnabled(bool bIsRadarEnabled); bool GetForcedState() const { return m_bForcedState; } void SetForcedState(bool bState); @@ -38,10 +38,14 @@ class CRadarMap void ToggleHelpText(); protected: - void InternalSetRadarEnabled(bool bEnabled); + void InternalSetPlayerMapEnabled(bool bEnabled); void CreateMarkerTextures(); CTextureItem* GetMarkerTexture(CClientRadarMarker* pMarker, float fLocalZ, float* pfScale, SColor* pColor); + void CreatePlayerBlipTexture(); + void CreateOrUpdateMapTexture(); + void UpdateOrRevertMapTexture(std::size_t imageIndex); + void CreateAllTextures(); public: bool IsAttachedToLocalPlayer() const { return m_bIsAttachedToLocal; }; @@ -79,9 +83,13 @@ class CRadarMap class CClientRadarMarkerManager* m_pRadarMarkerManager; class CClientRadarAreaManager* m_pRadarAreaManager; - CTextureItem* m_pRadarImage; - CTextureItem* m_pLocalPlayerBlip; - std::vector m_MarkerTextureList; + bool m_failedToLoadTextures; + + std::size_t m_playerMapImageIndex; + + CTextureItem* m_mapImageTexture; + CTextureItem* m_playerMarkerTexture; + std::vector m_markerTextureList; unsigned int m_uiHeight; unsigned int m_uiWidth; @@ -97,7 +105,7 @@ class CRadarMap float m_fZoom; - bool m_bIsRadarEnabled; + bool m_bIsPlayerMapEnabled; bool m_bForcedState; bool m_bIsAttachedToLocal; diff --git a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index fc1ae38e3b4..c17a0d1c2b2 100644 --- a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -51,7 +51,7 @@ static CClientMarkerManager* m_pMarkerManager; static CClientPickupManager* m_pPickupManager; static CMovingObjectsManager* m_pMovingObjectsManager; static CBlendedWeather* m_pBlendedWeather; -static CRadarMap* m_pRadarMap; +static CPlayerMap* m_pPlayerMap; static CClientCamera* m_pCamera; static CClientExplosionManager* m_pExplosionManager; static CClientProjectileManager* m_pProjectileManager; @@ -88,7 +88,7 @@ CStaticFunctionDefinitions::CStaticFunctionDefinitions(CLuaManager* pLuaManager, m_pPickupManager = pManager->GetPickupManager(); m_pMovingObjectsManager = m_pClientGame->GetMovingObjectsManager(); m_pBlendedWeather = m_pClientGame->GetBlendedWeather(); - m_pRadarMap = m_pClientGame->GetRadarMap(); + m_pPlayerMap = m_pClientGame->GetPlayerMap(); m_pCamera = pManager->GetCamera(); m_pExplosionManager = pManager->GetExplosionManager(); m_pProjectileManager = pManager->GetProjectileManager(); @@ -7840,25 +7840,25 @@ bool CStaticFunctionDefinitions::SetWeaponClipAmmo(CClientWeapon* pWeapon, int i bool CStaticFunctionDefinitions::ForcePlayerMap(bool& bForced) { - m_pClientGame->GetRadarMap()->SetForcedState(bForced); + m_pClientGame->GetPlayerMap()->SetForcedState(bForced); return true; } bool CStaticFunctionDefinitions::IsPlayerMapForced(bool& bForced) { - bForced = m_pRadarMap->GetForcedState(); + bForced = m_pPlayerMap->GetForcedState(); return true; } bool CStaticFunctionDefinitions::IsPlayerMapVisible(bool& bVisible) { - bVisible = m_pRadarMap->IsRadarShowing(); + bVisible = m_pPlayerMap->IsPlayerMapShowing(); return true; } bool CStaticFunctionDefinitions::GetPlayerMapBoundingBox(CVector& vecMin, CVector& vecMax) { - if (m_pRadarMap->GetBoundingBox(vecMin, vecMax)) + if (m_pPlayerMap->GetBoundingBox(vecMin, vecMax)) { return true; } diff --git a/Client/mods/deathmatch/logic/rpc/CPlayerRPCs.cpp b/Client/mods/deathmatch/logic/rpc/CPlayerRPCs.cpp index e8cda432830..321c0306522 100644 --- a/Client/mods/deathmatch/logic/rpc/CPlayerRPCs.cpp +++ b/Client/mods/deathmatch/logic/rpc/CPlayerRPCs.cpp @@ -60,7 +60,7 @@ void CPlayerRPCs::ForcePlayerMap(NetBitStreamInterface& bitStream) if (bitStream.Read(ucVisible)) { bool bVisible = (ucVisible == 1); - m_pClientGame->GetRadarMap()->SetForcedState(bVisible); + m_pClientGame->GetPlayerMap()->SetForcedState(bVisible); } } diff --git a/Shared/data/MTA San Andreas/MTA/cgui/images/map_1024.png b/Shared/data/MTA San Andreas/MTA/cgui/images/map_1024.png new file mode 100644 index 00000000000..747e6d6d49c Binary files /dev/null and b/Shared/data/MTA San Andreas/MTA/cgui/images/map_1024.png differ diff --git a/Shared/data/MTA San Andreas/MTA/cgui/images/map_2048.png b/Shared/data/MTA San Andreas/MTA/cgui/images/map_2048.png new file mode 100644 index 00000000000..c41bfbb347a Binary files /dev/null and b/Shared/data/MTA San Andreas/MTA/cgui/images/map_2048.png differ diff --git a/Shared/data/MTA San Andreas/MTA/cgui/images/radar.jpg b/Shared/data/MTA San Andreas/MTA/cgui/images/radar.jpg deleted file mode 100644 index 4249b8943f8..00000000000 Binary files a/Shared/data/MTA San Andreas/MTA/cgui/images/radar.jpg and /dev/null differ