Skip to content

Commit

Permalink
Automatically reload models for markers (PR #3059)
Browse files Browse the repository at this point in the history
  • Loading branch information
TFP-dev committed Sep 19, 2023
1 parent 1a88646 commit f382cfb
Show file tree
Hide file tree
Showing 8 changed files with 42 additions and 0 deletions.
12 changes: 12 additions & 0 deletions Client/game_sa/C3DMarkersSA.cpp
Expand Up @@ -99,3 +99,15 @@ C3DMarker* C3DMarkersSA::FindMarker(DWORD Identifier)
}
return NULL;
}

void C3DMarkersSA::ReinitMarkers()
{
using Function_ShutdownMarkers = void(__cdecl *)();
auto shutdownMarkers = reinterpret_cast<Function_ShutdownMarkers>(0x722710);

using Function_InitMarkers = void(__cdecl*)();
auto initMarkers = reinterpret_cast<Function_InitMarkers>(0x724E40);

shutdownMarkers();
initMarkers();
}
1 change: 1 addition & 0 deletions Client/game_sa/C3DMarkersSA.h
Expand Up @@ -31,4 +31,5 @@ class C3DMarkersSA : public C3DMarkers
C3DMarker* CreateMarker(DWORD Identifier, e3DMarkerType dwType, CVector* vecPosition, float fSize, float fPulseFraction, BYTE r, BYTE g, BYTE b, BYTE a);
C3DMarker* FindFreeMarker();
C3DMarker* FindMarker(DWORD Identifier);
void ReinitMarkers();
};
14 changes: 14 additions & 0 deletions Client/mods/deathmatch/logic/CClientDFF.cpp
Expand Up @@ -164,6 +164,16 @@ bool CClientDFF::DoReplaceModel(unsigned short usModel, bool bAlphaTransparency)
{
return ReplacePedModel(pClump, usModel, bAlphaTransparency);
}
else if (CClientMarkerManager::IsMarkerModel(usModel))
{
bool wasReplaced = ReplaceObjectModel(pClump, usModel, bAlphaTransparency);

// 'Restream' 3D markers
if (wasReplaced)
g_pClientGame->ReinitMarkers();

return wasReplaced;
}
else if (CClientObjectManager::IsValidModel(usModel))
{
if (CVehicleUpgrades::IsUpgrade(usModel))
Expand Down Expand Up @@ -272,6 +282,10 @@ void CClientDFF::InternalRestoreModel(unsigned short usModel)
if (CClientObjectManager::IsValidModel(usModel) && CVehicleUpgrades::IsUpgrade(usModel))
m_pManager->GetVehicleManager()->RestreamVehicleUpgrades(usModel);

// 'Restream' 3D markers
if (CClientMarkerManager::IsMarkerModel(usModel))
g_pClientGame->ReinitMarkers();

// Force dff reload if this model id is used again
SLoadedClumpInfo* pInfo = MapFind(m_LoadedClumpInfoMap, usModel);
if (pInfo)
Expand Down
7 changes: 7 additions & 0 deletions Client/mods/deathmatch/logic/CClientGame.cpp
Expand Up @@ -5438,6 +5438,8 @@ void CClientGame::ResetMapInfo()
pPlayerInfo->SetCamDrunkLevel(static_cast<byte>(0));

RestreamWorld(true);

ReinitMarkers();
}

void CClientGame::SendPedWastedPacket(CClientPed* Ped, ElementID damagerID, unsigned char ucWeapon, unsigned char ucBodyPiece, AssocGroupId animGroup,
Expand Down Expand Up @@ -6649,6 +6651,11 @@ void CClientGame::RestreamWorld(bool removeBigBuildings)
g_pGame->GetStreaming()->ReinitStreaming();
}

void CClientGame::ReinitMarkers()
{
g_pGame->Get3DMarkers()->ReinitMarkers();
}

void CClientGame::OnWindowFocusChange(bool state)
{
if (state == m_bFocused)
Expand Down
1 change: 1 addition & 0 deletions Client/mods/deathmatch/logic/CClientGame.h
Expand Up @@ -443,6 +443,7 @@ class CClientGame
bool TriggerBrowserRequestResultEvent(const std::unordered_set<SString>& newPages);
void RestreamModel(unsigned short usModel);
void RestreamWorld(bool removeBigBuildings);
void ReinitMarkers();

void OnWindowFocusChange(bool state);

Expand Down
5 changes: 5 additions & 0 deletions Client/mods/deathmatch/logic/CClientMarkerManager.cpp
Expand Up @@ -62,3 +62,8 @@ void CClientMarkerManager::DoPulse()
}
m_Markers.ResumeModifyOperations();
}

bool CClientMarkerManager::IsMarkerModel(unsigned short usModel)
{
return (usModel == 1316 || usModel == 1317 || usModel == 1559);
}
1 change: 1 addition & 0 deletions Client/mods/deathmatch/logic/CClientMarkerManager.h
Expand Up @@ -23,6 +23,7 @@ class CClientMarkerManager
unsigned int Count() { return static_cast<unsigned int>(m_Markers.size()); };
static CClientMarker* Get(ElementID ID);
void DeleteAll();
static bool IsMarkerModel(unsigned short usModel);

private:
CClientMarkerManager(class CClientManager* pManager);
Expand Down
1 change: 1 addition & 0 deletions Client/sdk/game/C3DMarkers.h
Expand Up @@ -22,4 +22,5 @@ class C3DMarkers
virtual C3DMarker* CreateMarker(DWORD Identifier, e3DMarkerType dwType, CVector* vecPosition, float fSize, float fPulseFraction, BYTE r, BYTE g, BYTE b,
BYTE a) = 0;
virtual C3DMarker* FindFreeMarker() = 0;
virtual void ReinitMarkers() = 0;
};

0 comments on commit f382cfb

Please sign in to comment.