CSimpleModelInfo

This commit is contained in:
aap 2020-05-10 11:34:26 +02:00
parent 1b936f6ffb
commit 58d9e9cd59
4 changed files with 22 additions and 11 deletions

View File

@ -642,7 +642,7 @@ CFileLoader::LoadObjectTypes(const char *filename)
for(id = minID; id <= maxID; id++){
CSimpleModelInfo *mi = (CSimpleModelInfo*)CModelInfo::GetModelInfo(id);
if(mi && mi->IsBuilding())
mi->SetupBigBuilding();
mi->SetupBigBuilding(minID, maxID);
}
}

View File

@ -7,6 +7,8 @@
#include "ModelInfo.h"
#include "AnimManager.h"
//--MIAMI: file done
void
CClumpModelInfo::DeleteRwObject(void)
{

View File

@ -3,6 +3,9 @@
#include "General.h"
#include "Camera.h"
#include "ModelInfo.h"
#include "AnimManager.h"
//--MIAMI: file done
#define LOD_DISTANCE (300.0f)
@ -18,6 +21,8 @@ CSimpleModelInfo::DeleteRwObject(void)
RwFrameDestroy(f);
m_atomics[i] = nil;
RemoveTexDictionaryRef();
if(GetAnimFileIndex() != -1)
CAnimManager::RemoveAnimBlockRef(GetAnimFileIndex());
}
}
@ -75,10 +80,14 @@ CSimpleModelInfo::SetAtomic(int n, RpAtomic *atomic)
{
AddTexDictionaryRef();
m_atomics[n] = atomic;
if(m_ignoreLight){
RpGeometry *geo = RpAtomicGetGeometry(atomic);
if(GetAnimFileIndex() != -1)
CAnimManager::AddAnimBlockRef(GetAnimFileIndex());
RpGeometry *geo = RpAtomicGetGeometry(atomic);
if(m_ignoreLight)
RpGeometrySetFlags(geo, RpGeometryGetFlags(geo) & ~rpGEOMETRYLIGHT);
}
if(RpGeometryGetFlags(geo) & rpGEOMETRYNORMALS &&
RpGeometryGetNumTriangles(geo) > 200)
debug("%s has %d polys\n", m_name, RpGeometryGetNumTriangles(geo));
}
void
@ -143,11 +152,11 @@ CSimpleModelInfo::GetFirstAtomicFromDistance(float dist)
}
void
CSimpleModelInfo::FindRelatedModel(void)
CSimpleModelInfo::FindRelatedModel(int32 minID, int32 maxID)
{
int i;
CBaseModelInfo *mi;
for(i = 0; i < MODELINFOSIZE; i++){
for(i = minID; i <= maxID; i++){
mi = CModelInfo::GetModelInfo(i);
if(mi && mi != this &&
!CGeneral::faststrcmp(GetName()+3, mi->GetName()+3)){
@ -161,12 +170,12 @@ CSimpleModelInfo::FindRelatedModel(void)
#define NEAR_DRAW_DIST 0.0f // 100.0f in liberty city
void
CSimpleModelInfo::SetupBigBuilding(void)
CSimpleModelInfo::SetupBigBuilding(int32 minID, int32 maxID)
{
CSimpleModelInfo *related;
if(m_lodDistances[0] > LOD_DISTANCE && m_atomics[2] == nil){
if(m_lodDistances[0] > LOD_DISTANCE && GetRelatedModel() == nil){
m_isBigBuilding = 1;
FindRelatedModel();
FindRelatedModel(minID, maxID);
related = GetRelatedModel();
if(related){
m_lodDistances[2] = related->GetLargestLodDistance()/TheCamera.LODDistMultiplier;

View File

@ -48,8 +48,8 @@ public:
float GetLargestLodDistance(void);
RpAtomic *GetAtomicFromDistance(float dist);
RpAtomic *GetFirstAtomicFromDistance(float dist);
void FindRelatedModel(void);
void SetupBigBuilding(void);
void FindRelatedModel(int32 minID, int32 maxID);
void SetupBigBuilding(int32 minID, int32 maxID);
void SetNumAtomics(int n) { m_numAtomics = n; }
CSimpleModelInfo *GetRelatedModel(void){