mirror of
https://github.com/halpz/re3.git
synced 2025-07-16 22:18:16 +00:00
implemented most of streamed collisions and big buildings
This commit is contained in:
@ -6,7 +6,7 @@
|
||||
#include "BaseModelInfo.h"
|
||||
|
||||
|
||||
CBaseModelInfo::CBaseModelInfo(ModeInfoType type)
|
||||
CBaseModelInfo::CBaseModelInfo(ModelInfoType type)
|
||||
{
|
||||
m_colModel = nil;
|
||||
m_twodEffects = nil;
|
||||
@ -15,7 +15,7 @@ CBaseModelInfo::CBaseModelInfo(ModeInfoType type)
|
||||
m_txdSlot = -1;
|
||||
m_type = type;
|
||||
m_num2dEffects = 0;
|
||||
m_freeCol = false;
|
||||
m_bOwnsColModel = false;
|
||||
}
|
||||
|
||||
void
|
||||
@ -31,7 +31,7 @@ CBaseModelInfo::Shutdown(void)
|
||||
void
|
||||
CBaseModelInfo::DeleteCollisionModel(void)
|
||||
{
|
||||
if(m_colModel && m_freeCol){
|
||||
if(m_colModel && m_bOwnsColModel){
|
||||
if(m_colModel)
|
||||
delete m_colModel;
|
||||
m_colModel = nil;
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
#define MAX_MODEL_NAME (24)
|
||||
|
||||
enum ModeInfoType : uint8
|
||||
enum ModelInfoType : uint8
|
||||
{
|
||||
MITYPE_NA = 0,
|
||||
MITYPE_SIMPLE = 1,
|
||||
@ -15,7 +15,7 @@ enum ModeInfoType : uint8
|
||||
MITYPE_PED = 6,
|
||||
MITYPE_XTRACOMPS = 7,
|
||||
};
|
||||
static_assert(sizeof(ModeInfoType) == 1, "ModeInfoType: error");
|
||||
static_assert(sizeof(ModelInfoType) == 1, "ModeInfoType: error");
|
||||
|
||||
class C2dEffect;
|
||||
|
||||
@ -30,11 +30,11 @@ protected:
|
||||
public:
|
||||
uint16 m_refCount;
|
||||
int16 m_txdSlot;
|
||||
ModeInfoType m_type;
|
||||
ModelInfoType m_type;
|
||||
uint8 m_num2dEffects;
|
||||
bool m_freeCol;
|
||||
bool m_bOwnsColModel;
|
||||
|
||||
CBaseModelInfo(ModeInfoType type);
|
||||
CBaseModelInfo(ModelInfoType type);
|
||||
virtual ~CBaseModelInfo() {}
|
||||
virtual void Shutdown(void);
|
||||
virtual void DeleteRwObject(void) = 0;
|
||||
@ -48,8 +48,8 @@ public:
|
||||
}
|
||||
char *GetName(void) { return m_name; }
|
||||
void SetName(const char *name) { strncpy(m_name, name, 24); }
|
||||
void SetColModel(CColModel *col, bool free = false){
|
||||
m_colModel = col; m_freeCol = free; }
|
||||
void SetColModel(CColModel *col, bool owns = false){
|
||||
m_colModel = col; m_bOwnsColModel = owns; }
|
||||
CColModel *GetColModel(void) { return m_colModel; }
|
||||
void DeleteCollisionModel(void);
|
||||
void ClearTexDictionary(void) { m_txdSlot = -1; }
|
||||
|
@ -32,7 +32,7 @@ public:
|
||||
RpClump *m_clump;
|
||||
|
||||
CClumpModelInfo(void) : CBaseModelInfo(MITYPE_CLUMP) {}
|
||||
CClumpModelInfo(ModeInfoType id) : CBaseModelInfo(id) {}
|
||||
CClumpModelInfo(ModelInfoType id) : CBaseModelInfo(id) {}
|
||||
~CClumpModelInfo() {}
|
||||
void DeleteRwObject(void);
|
||||
RwObject *CreateInstance(void);
|
||||
|
@ -200,6 +200,20 @@ CModelInfo::GetModelInfo(const char *name, int *id)
|
||||
return nil;
|
||||
}
|
||||
|
||||
#ifdef MIAMI
|
||||
CBaseModelInfo*
|
||||
CModelInfo::GetModelInfo(const char *name, int minIndex, int maxIndex)
|
||||
{
|
||||
CBaseModelInfo *modelinfo;
|
||||
for(int i = minIndex; i <= maxIndex; i++){
|
||||
modelinfo = CModelInfo::ms_modelInfoPtrs[i];
|
||||
if(modelinfo && !CGeneral::faststricmp(modelinfo->GetName(), name))
|
||||
return modelinfo;
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool
|
||||
CModelInfo::IsBoatModel(int32 id)
|
||||
{
|
||||
@ -214,6 +228,7 @@ CModelInfo::IsBikeModel(int32 id)
|
||||
((CVehicleModelInfo*)GetModelInfo(id))->m_vehicleType == VEHICLE_TYPE_BIKE;
|
||||
}
|
||||
|
||||
#ifndef MIAMI
|
||||
void
|
||||
CModelInfo::RemoveColModelsFromOtherLevels(eLevelName level)
|
||||
{
|
||||
@ -230,6 +245,7 @@ CModelInfo::RemoveColModelsFromOtherLevels(eLevelName level)
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
CModelInfo::ConstructMloClumps()
|
||||
|
@ -42,6 +42,9 @@ public:
|
||||
static CBaseModelInfo *GetModelInfo(int id){
|
||||
return ms_modelInfoPtrs[id];
|
||||
}
|
||||
#ifdef MIAMI
|
||||
static CBaseModelInfo *GetModelInfo(const char *name, int minIndex, int maxIndex);
|
||||
#endif
|
||||
|
||||
static bool IsBoatModel(int32 id);
|
||||
static bool IsBikeModel(int32 id);
|
||||
|
@ -94,6 +94,12 @@ CSimpleModelInfo::IncreaseAlpha(void)
|
||||
m_alpha += 0x10;
|
||||
}
|
||||
|
||||
float
|
||||
CSimpleModelInfo::GetLodDistance(int i)
|
||||
{
|
||||
return m_lodDistances[i] * TheCamera.LODDistMultiplier;
|
||||
}
|
||||
|
||||
float
|
||||
CSimpleModelInfo::GetNearDistance(void)
|
||||
{
|
||||
@ -119,11 +125,19 @@ CSimpleModelInfo::GetAtomicFromDistance(float dist)
|
||||
if(m_isDamaged)
|
||||
i = m_firstDamaged;
|
||||
for(; i < m_numAtomics; i++)
|
||||
if(dist < m_lodDistances[i] *TheCamera.LODDistMultiplier)
|
||||
if(dist < m_lodDistances[i] * TheCamera.LODDistMultiplier)
|
||||
return m_atomics[i];
|
||||
return nil;
|
||||
}
|
||||
|
||||
RpAtomic*
|
||||
CSimpleModelInfo::GetFirstAtomicFromDistance(float dist)
|
||||
{
|
||||
if(dist < m_lodDistances[0] * TheCamera.LODDistMultiplier)
|
||||
return m_atomics[0];
|
||||
return nil;
|
||||
}
|
||||
|
||||
void
|
||||
CSimpleModelInfo::FindRelatedModel(void)
|
||||
{
|
||||
|
@ -25,7 +25,7 @@ public:
|
||||
uint16 m_noZwrite : 1;
|
||||
|
||||
CSimpleModelInfo(void) : CBaseModelInfo(MITYPE_SIMPLE) {}
|
||||
CSimpleModelInfo(ModeInfoType id) : CBaseModelInfo(id) {}
|
||||
CSimpleModelInfo(ModelInfoType id) : CBaseModelInfo(id) {}
|
||||
~CSimpleModelInfo() {}
|
||||
void DeleteRwObject(void);
|
||||
RwObject *CreateInstance(void);
|
||||
@ -36,10 +36,13 @@ public:
|
||||
void IncreaseAlpha(void);
|
||||
void SetAtomic(int n, RpAtomic *atomic);
|
||||
void SetLodDistances(float *dist);
|
||||
float GetLodDistance(int i) { return m_lodDistances[i]; }
|
||||
float GetLodDistance(int i);
|
||||
float GetNearDistance(void);
|
||||
float GetLargestLodDistance(void);
|
||||
RpAtomic *GetAtomicFromDistance(float dist);
|
||||
#ifdef MIAMI
|
||||
RpAtomic *GetFirstAtomicFromDistance(float dist); // inline
|
||||
#endif
|
||||
void FindRelatedModel(void);
|
||||
void SetupBigBuilding(void);
|
||||
|
||||
|
Reference in New Issue
Block a user