Re3/src/core/References.cpp

69 lines
1.3 KiB
C++
Raw Normal View History

2019-05-15 10:52:37 -04:00
#include "common.h"
2020-04-17 09:31:11 -04:00
2019-07-06 06:27:21 -04:00
#include "World.h"
#include "Vehicle.h"
#include "PlayerPed.h"
#include "Pools.h"
2019-05-15 10:52:37 -04:00
#include "References.h"
2020-04-17 01:54:14 -04:00
CReference CReferences::aRefs[NUMREFERENCES];
CReference *CReferences::pEmptyList;
2019-05-15 10:52:37 -04:00
void
CReferences::Init(void)
{
int i;
pEmptyList = &aRefs[0];
for(i = 0; i < NUMREFERENCES; i++){
aRefs[i].pentity = nil;
aRefs[i].next = &aRefs[i+1];
}
aRefs[NUMREFERENCES-1].next = nil;
}
2019-07-06 06:27:21 -04:00
void
CReferences::RemoveReferencesToPlayer(void)
{
if(FindPlayerVehicle())
FindPlayerVehicle()->ResolveReferences();
2020-04-18 16:50:37 -04:00
#ifdef FIX_BUGS
if (FindPlayerPed()) {
CPlayerPed* pPlayerPed = FindPlayerPed();
FindPlayerPed()->ResolveReferences();
CWorld::Players[CWorld::PlayerInFocus].m_pPed = pPlayerPed;
pPlayerPed->RegisterReference((CEntity**)&CWorld::Players[CWorld::PlayerInFocus].m_pPed);
}
#else
2019-07-06 06:27:21 -04:00
if(FindPlayerPed())
FindPlayerPed()->ResolveReferences();
2020-04-18 16:50:37 -04:00
#endif
2019-07-06 06:27:21 -04:00
}
void
CReferences::PruneAllReferencesInWorld(void)
{
int i;
CEntity *e;
i = CPools::GetPedPool()->GetSize();
while(--i >= 0){
e = CPools::GetPedPool()->GetSlot(i);
if(e)
e->PruneReferences();
}
i = CPools::GetVehiclePool()->GetSize();
while(--i >= 0){
e = CPools::GetVehiclePool()->GetSlot(i);
if(e)
e->PruneReferences();
}
i = CPools::GetObjectPool()->GetSize();
while(--i >= 0){
e = CPools::GetObjectPool()->GetSlot(i);
if(e)
e->PruneReferences();
}
}