diff options
Diffstat (limited to '')
-rw-r--r-- | src/modelinfo/BaseModelInfo.cpp | 6 | ||||
-rw-r--r-- | src/modelinfo/BaseModelInfo.h | 26 | ||||
-rw-r--r-- | src/modelinfo/ClumpModelInfo.cpp | 27 | ||||
-rw-r--r-- | src/modelinfo/ClumpModelInfo.h | 5 | ||||
-rw-r--r-- | src/modelinfo/ModelIndices.h | 3 | ||||
-rw-r--r-- | src/modelinfo/ModelInfo.cpp | 4 | ||||
-rw-r--r-- | src/modelinfo/PedModelInfo.h | 5 | ||||
-rw-r--r-- | src/modelinfo/SimpleModelInfo.cpp | 10 | ||||
-rw-r--r-- | src/modelinfo/SimpleModelInfo.h | 7 | ||||
-rw-r--r-- | src/modelinfo/TimeModelInfo.cpp | 2 | ||||
-rw-r--r-- | src/modelinfo/TimeModelInfo.h | 3 | ||||
-rw-r--r-- | src/modelinfo/VehicleModelInfo.h | 14 |
12 files changed, 57 insertions, 55 deletions
diff --git a/src/modelinfo/BaseModelInfo.cpp b/src/modelinfo/BaseModelInfo.cpp index e8d2601f..a2779107 100644 --- a/src/modelinfo/BaseModelInfo.cpp +++ b/src/modelinfo/BaseModelInfo.cpp @@ -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; diff --git a/src/modelinfo/BaseModelInfo.h b/src/modelinfo/BaseModelInfo.h index 0c4bf934..783f871f 100644 --- a/src/modelinfo/BaseModelInfo.h +++ b/src/modelinfo/BaseModelInfo.h @@ -4,7 +4,7 @@ #define MAX_MODEL_NAME (24) -enum ModeInfoType : uint8 +enum ModelInfoType : uint8 { MITYPE_NA = 0, MITYPE_SIMPLE = 1, @@ -15,26 +15,25 @@ enum ModeInfoType : uint8 MITYPE_PED = 6, MITYPE_XTRACOMPS = 7, }; -static_assert(sizeof(ModeInfoType) == 1, "ModeInfoType: error"); +VALIDATE_SIZE(ModelInfoType, 1); class C2dEffect; class CBaseModelInfo { protected: - // TODO?: make more things protected char m_name[MAX_MODEL_NAME]; CColModel *m_colModel; C2dEffect *m_twodEffects; int16 m_objectId; -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); +public: + CBaseModelInfo(ModelInfoType type); virtual ~CBaseModelInfo() {} virtual void Shutdown(void); virtual void DeleteRwObject(void) = 0; @@ -42,15 +41,18 @@ public: virtual RwObject *CreateInstance(void) = 0; virtual RwObject *GetRwObject(void) = 0; + // one day it becomes virtual + ModelInfoType GetModelType() const { return m_type; } bool IsSimple(void) { return m_type == MITYPE_SIMPLE || m_type == MITYPE_TIME; } bool IsClump(void) { return m_type == MITYPE_CLUMP || m_type == MITYPE_PED || m_type == MITYPE_VEHICLE || m_type == MITYPE_MLO || m_type == MITYPE_XTRACOMPS; // unused but what the heck } 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 SetName(const char *name) { strncpy(m_name, name, MAX_MODEL_NAME); } + void SetColModel(CColModel *col, bool owns = false){ + m_colModel = col; m_bOwnsColModel = owns; } CColModel *GetColModel(void) { return m_colModel; } + bool DoesOwnColModel(void) { return m_bOwnsColModel; } void DeleteCollisionModel(void); void ClearTexDictionary(void) { m_txdSlot = -1; } short GetObjectID(void) { return m_objectId; } @@ -64,6 +66,8 @@ public: void Init2dEffects(void); void Add2dEffect(C2dEffect *fx); C2dEffect *Get2dEffect(int n); + uint8 GetNum2dEffects() const { return m_num2dEffects; } + uint16 GetNumRefs() const { return m_refCount; } }; -static_assert(sizeof(CBaseModelInfo) == 0x30, "CBaseModelInfo: error"); +VALIDATE_SIZE(CBaseModelInfo, 0x30); diff --git a/src/modelinfo/ClumpModelInfo.cpp b/src/modelinfo/ClumpModelInfo.cpp index 44faf3c5..ccfcd304 100644 --- a/src/modelinfo/ClumpModelInfo.cpp +++ b/src/modelinfo/ClumpModelInfo.cpp @@ -43,7 +43,7 @@ CClumpModelInfo::CreateInstance(void) RpClumpForAllAtomics(clone, SetHierarchyForSkinAtomic, hier); anim = HAnimAnimationCreateForHierarchy(hier); RpHAnimHierarchySetCurrentAnim(hier, anim); -// RpHAnimHierarchySetFlags(hier, (RpHAnimHierarchyFlag)(rpHANIMHIERARCHYUPDATEMODELLINGMATRICES|rpHANIMHIERARCHYUPDATELTMS)); + RpHAnimHierarchySetFlags(hier, (RpHAnimHierarchyFlag)(rpHANIMHIERARCHYUPDATEMODELLINGMATRICES|rpHANIMHIERARCHYUPDATELTMS)); // the rest is xbox only: // RpSkinGetNumBones(RpSkinGeometryGetSkin(RpAtomicGetGeometry(IsClumpSkinned(clone)))); RpHAnimHierarchyUpdateMatrices(hier); @@ -113,7 +113,7 @@ CClumpModelInfo::SetClump(RpClump *clump) weights->w2 /= sum; weights->w3 /= sum; } -// RpHAnimHierarchySetFlags(hier, (RpHAnimHierarchyFlag)(rpHANIMHIERARCHYUPDATEMODELLINGMATRICES|rpHANIMHIERARCHYUPDATELTMS)); + RpHAnimHierarchySetFlags(hier, (RpHAnimHierarchyFlag)(rpHANIMHIERARCHYUPDATEMODELLINGMATRICES|rpHANIMHIERARCHYUPDATELTMS)); } #endif } @@ -139,13 +139,12 @@ CClumpModelInfo::FindFrameFromIdCB(RwFrame *frame, void *data) { RwObjectIdAssociation *assoc = (RwObjectIdAssociation*)data; - if(CVisibilityPlugins::GetFrameHierarchyId(frame) != assoc->id){ - RwFrameForAllChildren(frame, FindFrameFromIdCB, assoc); - return assoc->frame ? nil : frame; - }else{ + if(CVisibilityPlugins::GetFrameHierarchyId(frame) == assoc->id){ assoc->frame = frame; return nil; } + RwFrameForAllChildren(frame, FindFrameFromIdCB, assoc); + return assoc->frame ? nil : frame; } RwFrame* @@ -153,13 +152,12 @@ CClumpModelInfo::FindFrameFromNameCB(RwFrame *frame, void *data) { RwObjectNameAssociation *assoc = (RwObjectNameAssociation*)data; - if(CGeneral::faststricmp(GetFrameNodeName(frame), assoc->name)){ - RwFrameForAllChildren(frame, FindFrameFromNameCB, assoc); - return assoc->frame ? nil : frame; - }else{ + if(!CGeneral::faststricmp(GetFrameNodeName(frame), assoc->name)){ assoc->frame = frame; return nil; } + RwFrameForAllChildren(frame, FindFrameFromNameCB, assoc); + return assoc->frame ? nil : frame; } RwFrame* @@ -167,14 +165,13 @@ CClumpModelInfo::FindFrameFromNameWithoutIdCB(RwFrame *frame, void *data) { RwObjectNameAssociation *assoc = (RwObjectNameAssociation*)data; - if(CVisibilityPlugins::GetFrameHierarchyId(frame) || - CGeneral::faststricmp(GetFrameNodeName(frame), assoc->name)){ - RwFrameForAllChildren(frame, FindFrameFromNameWithoutIdCB, assoc); - return assoc->frame ? nil : frame; - }else{ + if(CVisibilityPlugins::GetFrameHierarchyId(frame) == 0 && + !CGeneral::faststricmp(GetFrameNodeName(frame), assoc->name)){ assoc->frame = frame; return nil; } + RwFrameForAllChildren(frame, FindFrameFromNameWithoutIdCB, assoc); + return assoc->frame ? nil : frame; } RwFrame* diff --git a/src/modelinfo/ClumpModelInfo.h b/src/modelinfo/ClumpModelInfo.h index 100aa30b..58b6de11 100644 --- a/src/modelinfo/ClumpModelInfo.h +++ b/src/modelinfo/ClumpModelInfo.h @@ -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); @@ -50,4 +50,5 @@ public: static RwFrame *FillFrameArrayCB(RwFrame *frame, void *data); static RwFrame *GetFrameFromId(RpClump *clump, int32 id); }; -static_assert(sizeof(CClumpModelInfo) == 0x34, "CClumpModelInfo: error"); + +VALIDATE_SIZE(CClumpModelInfo, 0x34); diff --git a/src/modelinfo/ModelIndices.h b/src/modelinfo/ModelIndices.h index 8e117882..cc6ed25c 100644 --- a/src/modelinfo/ModelIndices.h +++ b/src/modelinfo/ModelIndices.h @@ -255,7 +255,8 @@ enum MI_BUSKER4, // three more peds possible - MI_LANDSTAL = 90, + MI_FIRST_VEHICLE = 90, + MI_LANDSTAL = MI_FIRST_VEHICLE, MI_IDAHO, MI_STINGER, MI_LINERUN, diff --git a/src/modelinfo/ModelInfo.cpp b/src/modelinfo/ModelInfo.cpp index c1ae692f..da09bdfa 100644 --- a/src/modelinfo/ModelInfo.cpp +++ b/src/modelinfo/ModelInfo.cpp @@ -203,14 +203,14 @@ CModelInfo::GetModelInfo(const char *name, int *id) bool CModelInfo::IsBoatModel(int32 id) { - return GetModelInfo(id)->m_type == MITYPE_VEHICLE && + return GetModelInfo(id)->GetModelType() == MITYPE_VEHICLE && ((CVehicleModelInfo*)GetModelInfo(id))->m_vehicleType == VEHICLE_TYPE_BOAT; } bool CModelInfo::IsBikeModel(int32 id) { - return GetModelInfo(id)->m_type == MITYPE_VEHICLE && + return GetModelInfo(id)->GetModelType() == MITYPE_VEHICLE && ((CVehicleModelInfo*)GetModelInfo(id))->m_vehicleType == VEHICLE_TYPE_BIKE; } diff --git a/src/modelinfo/PedModelInfo.h b/src/modelinfo/PedModelInfo.h index a2bfd122..52f75894 100644 --- a/src/modelinfo/PedModelInfo.h +++ b/src/modelinfo/PedModelInfo.h @@ -36,7 +36,8 @@ public: static RwObjectNameIdAssocation m_pPedIds[PED_NODE_MAX]; - CPedModelInfo(void) : CClumpModelInfo(MITYPE_PED) { } + CPedModelInfo(void) : CClumpModelInfo(MITYPE_PED) { m_hitColModel = nil; } + ~CPedModelInfo(void) { delete m_hitColModel; } void DeleteRwObject(void); void SetClump(RpClump *); @@ -55,5 +56,5 @@ public: #endif }; #ifndef PED_SKIN -static_assert(sizeof(CPedModelInfo) == 0x48, "CPedModelInfo: error"); +VALIDATE_SIZE(CPedModelInfo, 0x48); #endif
\ No newline at end of file diff --git a/src/modelinfo/SimpleModelInfo.cpp b/src/modelinfo/SimpleModelInfo.cpp index 2fb2adeb..a781cf58 100644 --- a/src/modelinfo/SimpleModelInfo.cpp +++ b/src/modelinfo/SimpleModelInfo.cpp @@ -95,6 +95,12 @@ CSimpleModelInfo::IncreaseAlpha(void) } float +CSimpleModelInfo::GetLodDistance(int i) +{ + return m_lodDistances[i] * TheCamera.LODDistMultiplier; +} + +float CSimpleModelInfo::GetNearDistance(void) { return m_lodDistances[2] * TheCamera.LODDistMultiplier; @@ -119,7 +125,7 @@ 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; } @@ -144,7 +150,7 @@ void CSimpleModelInfo::SetupBigBuilding(void) { CSimpleModelInfo *related; - if(m_lodDistances[0] > LOD_DISTANCE && m_atomics[2] == nil){ + if(m_lodDistances[0] > LOD_DISTANCE && GetRelatedModel() == nil){ m_isBigBuilding = 1; FindRelatedModel(); related = GetRelatedModel(); diff --git a/src/modelinfo/SimpleModelInfo.h b/src/modelinfo/SimpleModelInfo.h index 35d48669..ee63f24b 100644 --- a/src/modelinfo/SimpleModelInfo.h +++ b/src/modelinfo/SimpleModelInfo.h @@ -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,7 +36,7 @@ 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); @@ -49,4 +49,5 @@ public: void SetRelatedModel(CSimpleModelInfo *m){ m_atomics[2] = (RpAtomic*)m; } }; -static_assert(sizeof(CSimpleModelInfo) == 0x4C, "CSimpleModelInfo: error"); + +VALIDATE_SIZE(CSimpleModelInfo, 0x4C); diff --git a/src/modelinfo/TimeModelInfo.cpp b/src/modelinfo/TimeModelInfo.cpp index fec3f6e5..d4f92293 100644 --- a/src/modelinfo/TimeModelInfo.cpp +++ b/src/modelinfo/TimeModelInfo.cpp @@ -22,7 +22,7 @@ CTimeModelInfo::FindOtherTimeModel(void) for(i = 0; i < MODELINFOSIZE; i++){ CBaseModelInfo *mi = CModelInfo::GetModelInfo(i); - if(mi && mi->m_type == MITYPE_TIME && + if (mi && mi->GetModelType() == MITYPE_TIME && strncmp(name, mi->GetName(), 24) == 0){ m_otherTimeModelID = i; return (CTimeModelInfo*)mi; diff --git a/src/modelinfo/TimeModelInfo.h b/src/modelinfo/TimeModelInfo.h index f8b7c8ff..73b6ab26 100644 --- a/src/modelinfo/TimeModelInfo.h +++ b/src/modelinfo/TimeModelInfo.h @@ -17,4 +17,5 @@ public: void SetOtherTimeModel(int32 other) { m_otherTimeModelID = other; } CTimeModelInfo *FindOtherTimeModel(void); }; -static_assert(sizeof(CTimeModelInfo) == 0x58, "CTimeModelInfo: error"); + +VALIDATE_SIZE(CTimeModelInfo, 0x58); diff --git a/src/modelinfo/VehicleModelInfo.h b/src/modelinfo/VehicleModelInfo.h index 9992ab98..ba25d3cd 100644 --- a/src/modelinfo/VehicleModelInfo.h +++ b/src/modelinfo/VehicleModelInfo.h @@ -36,17 +36,6 @@ enum eVehicleType { }; enum { - VEHICLE_CLASS_POOR, - VEHICLE_CLASS_RICH, - VEHICLE_CLASS_EXECUTIVE, - VEHICLE_CLASS_WORKER, - VEHICLE_CLASS_SPECIAL, - VEHICLE_CLASS_BIG, - VEHICLE_CLASS_TAXI, - NUM_VEHICLE_CLASSES -}; - -enum { NUM_VEHICLE_POSITIONS = 10 }; @@ -134,4 +123,5 @@ public: static int GetMaximumNumberOfPassengersFromNumberOfDoors(int id); static void SetComponentsToUse(int8 c1, int8 c2) { ms_compsToUse[0] = c1; ms_compsToUse[1] = c2; } }; -static_assert(sizeof(CVehicleModelInfo) == 0x1F8, "CVehicleModelInfo: error"); + +VALIDATE_SIZE(CVehicleModelInfo, 0x1F8); |