diff options
Diffstat (limited to 'src/entities')
-rw-r--r-- | src/entities/Building.h | 1 | ||||
-rw-r--r-- | src/entities/Dummy.h | 1 | ||||
-rw-r--r-- | src/entities/Entity.cpp | 23 | ||||
-rw-r--r-- | src/entities/Entity.h | 17 | ||||
-rw-r--r-- | src/entities/Physical.cpp | 18 | ||||
-rw-r--r-- | src/entities/Physical.h | 1 | ||||
-rw-r--r-- | src/entities/Treadable.h | 3 |
7 files changed, 24 insertions, 40 deletions
diff --git a/src/entities/Building.h b/src/entities/Building.h index 7b837f46..29608c10 100644 --- a/src/entities/Building.h +++ b/src/entities/Building.h @@ -16,4 +16,3 @@ public: virtual bool GetIsATreadable(void) { return false; } }; -static_assert(sizeof(CBuilding) == 0x64, "CBuilding: error"); diff --git a/src/entities/Dummy.h b/src/entities/Dummy.h index fcfd23fb..7998a748 100644 --- a/src/entities/Dummy.h +++ b/src/entities/Dummy.h @@ -15,4 +15,3 @@ public: static void *operator new(size_t); static void operator delete(void*, size_t); }; -static_assert(sizeof(CDummy) == 0x68, "CDummy: error"); diff --git a/src/entities/Entity.cpp b/src/entities/Entity.cpp index ec50dd30..e3ecf50f 100644 --- a/src/entities/Entity.cpp +++ b/src/entities/Entity.cpp @@ -52,6 +52,7 @@ CEntity::CEntity(void) bRenderScorched = false; bHasBlip = false; bIsBIGBuilding = false; + bStreamBIGBuilding = false; bRenderDamaged = false; bBulletProof = false; @@ -60,8 +61,6 @@ CEntity::CEntity(void) bMeleeProof = false; bOnlyDamagedByPlayer = false; bStreamingDontDelete = false; - bZoneCulled = false; - bZoneCulled2 = false; bRemoveFromWorld = false; bHasHitWall = false; @@ -75,9 +74,12 @@ CEntity::CEntity(void) bDistanceFade = false; m_flagE2 = false; + bIsStaticWaitingForCollision = false; + m_scanCode = 0; m_modelIndex = -1; m_rwObject = nil; + m_area = AREA_MAIN_MAP; m_randomSeed = CGeneral::GetRandomNumber(); m_pFirstReference = nil; } @@ -322,6 +324,7 @@ CEntity::UpdateRwFrame(void) } } +//--MIAMI: done void CEntity::SetupBigBuilding(void) { @@ -332,14 +335,12 @@ CEntity::SetupBigBuilding(void) bStreamingDontDelete = true; bUsesCollision = false; m_level = CTheZones::GetLevelFromPosition(&GetPosition()); - if(m_level == LEVEL_NONE){ - if(mi->GetTxdSlot() != CTxdStore::FindTxdSlot("generic")){ - mi->SetTexDictionary("generic"); - printf("%d:%s txd has been set to generic\n", m_modelIndex, mi->GetName()); - } - } - if(mi->m_lodDistances[0] > 2000.0f) + if(mi->m_lodDistances[0] <= 2000.0f) + bStreamBIGBuilding = true; + if(mi->m_lodDistances[0] > 2500.0f || mi->m_ignoreDrawDist) m_level = LEVEL_NONE; + else if(m_level == LEVEL_NONE) + printf("%s isn't in a level\n", mi->GetName()); } CRect @@ -954,8 +955,6 @@ CEntity::SaveEntityFlags(uint8*& buf) if (bMeleeProof) tmp |= BIT(27); if (bOnlyDamagedByPlayer) tmp |= BIT(28); if (bStreamingDontDelete) tmp |= BIT(29); - if (bZoneCulled) tmp |= BIT(30); - if (bZoneCulled2) tmp |= BIT(31); WriteSaveBuf<uint32>(buf, tmp); @@ -1007,8 +1006,6 @@ CEntity::LoadEntityFlags(uint8*& buf) bMeleeProof = !!(tmp & BIT(27)); bOnlyDamagedByPlayer = !!(tmp & BIT(28)); bStreamingDontDelete = !!(tmp & BIT(29)); - bZoneCulled = !!(tmp & BIT(30)); - bZoneCulled2 = !!(tmp & BIT(31)); tmp = ReadSaveBuf<uint32>(buf); diff --git a/src/entities/Entity.h b/src/entities/Entity.h index 330fde69..2e2c64c0 100644 --- a/src/entities/Entity.h +++ b/src/entities/Entity.h @@ -59,20 +59,19 @@ public: uint32 bRenderScorched : 1; uint32 bHasBlip : 1; uint32 bIsBIGBuilding : 1; // Set if this entity is a big building - uint32 bRenderDamaged : 1; // use damaged LOD models for objects with applicable damage + uint32 bStreamBIGBuilding : 1; // set when draw dist <= 2000 // flagsC + uint32 bRenderDamaged : 1; // use damaged LOD models for objects with applicable damage uint32 bBulletProof : 1; uint32 bFireProof : 1; uint32 bCollisionProof : 1; uint32 bMeleeProof : 1; uint32 bOnlyDamagedByPlayer : 1; uint32 bStreamingDontDelete : 1; // Dont let the streaming remove this - uint32 bZoneCulled : 1; - uint32 bZoneCulled2 : 1; // only treadables+10m + uint32 bRemoveFromWorld : 1; // remove this entity next time it should be processed // flagsD - uint32 bRemoveFromWorld : 1; // remove this entity next time it should be processed uint32 bHasHitWall : 1; // has collided with a building (changes subsequent collisions) uint32 bImBeingRendered : 1; // don't delete me because I'm being rendered uint32 bTouchingWater : 1; // used by cBuoyancy::ProcessBuoyancy @@ -80,15 +79,18 @@ public: uint32 bDrawLast : 1; // draw object last uint32 bNoBrightHeadLights : 1; uint32 bDoNotRender : 1; + uint32 bDistanceFade : 1; // Fade entity because it is far away // flagsE - uint32 bDistanceFade : 1; // Fade entity because it is far away uint32 m_flagE2 : 1; + // TODO(MIAMI) + uint32 bIsStaticWaitingForCollision : 1; // this is used by script created entities - they are static until the collision is loaded below them uint16 m_scanCode; uint16 m_randomSeed; int16 m_modelIndex; - uint16 m_level; // int16 + int8 m_level; + int8 m_area; CReference *m_pFirstReference; public: @@ -97,7 +99,7 @@ public: eEntityStatus GetStatus() const { return (eEntityStatus)m_status; } void SetStatus(eEntityStatus status) { m_status = status; } CColModel *GetColModel(void) { return CModelInfo::GetModelInfo(m_modelIndex)->GetColModel(); } - bool IsStatic(void) { return bIsStatic; } + bool IsStatic(void) { return bIsStatic || bIsStaticWaitingForCollision; } #ifdef COMPATIBLE_SAVES void SaveEntityFlags(uint8*& buf); void LoadEntityFlags(uint8*& buf); @@ -172,4 +174,3 @@ public: static void AddSteamsFromGround(CPtrList& list); }; -static_assert(sizeof(CEntity) == 0x64, "CEntity: error"); diff --git a/src/entities/Physical.cpp b/src/entities/Physical.cpp index 64358cbf..22b391e8 100644 --- a/src/entities/Physical.cpp +++ b/src/entities/Physical.cpp @@ -218,7 +218,8 @@ CPhysical::GetBoundRect(void) void CPhysical::AddToMovingList(void) { - m_movingListNode = CWorld::GetMovingEntityList().InsertItem(this); + if (!bIsStaticWaitingForCollision) + m_movingListNode = CWorld::GetMovingEntityList().InsertItem(this); } void @@ -263,21 +264,11 @@ CPhysical::AddCollisionRecord(CEntity *ent) } } +//--MIAMI: done void CPhysical::AddCollisionRecord_Treadable(CEntity *ent) { if(ent->IsBuilding() && ((CBuilding*)ent)->GetIsATreadable()){ - CTreadable *t = (CTreadable*)ent; - if(t->m_nodeIndices[PATH_PED][0] >= 0 || - t->m_nodeIndices[PATH_PED][1] >= 0 || - t->m_nodeIndices[PATH_PED][2] >= 0 || - t->m_nodeIndices[PATH_PED][3] >= 0) - m_treadable[PATH_PED] = t; - if(t->m_nodeIndices[PATH_CAR][0] >= 0 || - t->m_nodeIndices[PATH_CAR][1] >= 0 || - t->m_nodeIndices[PATH_CAR][2] >= 0 || - t->m_nodeIndices[PATH_CAR][3] >= 0) - m_treadable[PATH_CAR] = t; } } @@ -1537,7 +1528,8 @@ CPhysical::ProcessCollisionSectorList(CPtrList *lists) if(A->GetModelIndex() == MI_RCBANDIT) adhesion *= 0.2f; - else if(IsBoatModel(A->GetModelIndex())){ +// TODO(MIAMI): check this + else if(A->IsVehicle() && ((CVehicle*)A)->IsBoat()){ if(aColPoints[i].normal.z > 0.6f){ if(CSurfaceTable::GetAdhesionGroup(aColPoints[i].surfaceB) == ADHESIVE_LOOSE) adhesion *= 3.0f; diff --git a/src/entities/Physical.h b/src/entities/Physical.h index b47d556e..c801ae72 100644 --- a/src/entities/Physical.h +++ b/src/entities/Physical.h @@ -160,4 +160,3 @@ public: bool CheckCollision(void); bool CheckCollision_SimpleCar(void); }; -static_assert(sizeof(CPhysical) == 0x128, "CPhysical: error"); diff --git a/src/entities/Treadable.h b/src/entities/Treadable.h index 9e4de59a..c3ab755e 100644 --- a/src/entities/Treadable.h +++ b/src/entities/Treadable.h @@ -8,8 +8,5 @@ public: static void *operator new(size_t); static void operator delete(void*, size_t); - int16 m_nodeIndices[2][12]; // first car, then ped - bool GetIsATreadable(void) { return true; } }; -static_assert(sizeof(CTreadable) == 0x94, "CTreadable: error"); |