diff options
Diffstat (limited to 'src/modelinfo/SimpleModelInfo.cpp')
-rw-r--r-- | src/modelinfo/SimpleModelInfo.cpp | 61 |
1 files changed, 42 insertions, 19 deletions
diff --git a/src/modelinfo/SimpleModelInfo.cpp b/src/modelinfo/SimpleModelInfo.cpp index 416bdad5..2e6e557e 100644 --- a/src/modelinfo/SimpleModelInfo.cpp +++ b/src/modelinfo/SimpleModelInfo.cpp @@ -3,8 +3,11 @@ #include "General.h" #include "Camera.h" #include "ModelInfo.h" +#include "AnimManager.h" #include "custompipes.h" +//--MIAMI: file done + #define LOD_DISTANCE (300.0f) void @@ -19,6 +22,8 @@ CSimpleModelInfo::DeleteRwObject(void) RwFrameDestroy(f); m_atomics[i] = nil; RemoveTexDictionaryRef(); + if(GetAnimFileIndex() != -1) + CAnimManager::RemoveAnimBlockRef(GetAnimFileIndex()); } } @@ -56,7 +61,7 @@ CSimpleModelInfo::Init(void) m_atomics[2] = nil; m_numAtomics = 0; m_firstDamaged = 0; - m_normalCull = 0; + m_wetRoadReflection = 0; m_isDamaged = 0; m_isBigBuilding = 0; m_noFade = 0; @@ -65,6 +70,10 @@ CSimpleModelInfo::Init(void) m_isSubway = 0; m_ignoreLight = 0; m_noZwrite = 0; + m_noShadows = 0; + m_ignoreDrawDist = 0; + m_isCodeGlass = 0; + m_isArtistGlass = 0; } void @@ -72,13 +81,20 @@ 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)); #ifdef EXTENDED_PIPELINES - CustomPipes::AttachWorldPipe(atomic); + if(m_wetRoadReflection) + CustomPipes::AttachGlossPipe(atomic); + else + CustomPipes::AttachWorldPipe(atomic); #endif } @@ -135,12 +151,20 @@ CSimpleModelInfo::GetAtomicFromDistance(float dist) return nil; } +RpAtomic* +CSimpleModelInfo::GetFirstAtomicFromDistance(float dist) +{ + if(dist < m_lodDistances[0] * TheCamera.LODDistMultiplier) + return m_atomics[0]; + return nil; +} + 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)){ @@ -151,24 +175,23 @@ 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 && GetRelatedModel() == nil){ m_isBigBuilding = 1; - FindRelatedModel(); + FindRelatedModel(minID, maxID); related = GetRelatedModel(); - if(related) + if(related){ m_lodDistances[2] = related->GetLargestLodDistance()/TheCamera.LODDistMultiplier; - else -#ifdef FIX_BUGS - if(toupper(m_name[0]) == 'L' && toupper(m_name[1]) == 'O' && toupper(m_name[2]) == 'D') - m_lodDistances[2] = 100.0f; - else - m_lodDistances[2] = 0.0f; -#else - m_lodDistances[2] = 100.0f; -#endif + if(m_drawLast){ + m_drawLast = false; + debug("%s was draw last\n", GetName()); + } + }else + m_lodDistances[2] = NEAR_DRAW_DIST; } } |