diff options
Diffstat (limited to 'src/entities')
-rw-r--r-- | src/entities/Building.h | 3 | ||||
-rw-r--r-- | src/entities/Dummy.h | 3 | ||||
-rw-r--r-- | src/entities/Entity.cpp | 47 | ||||
-rw-r--r-- | src/entities/Entity.h | 24 | ||||
-rw-r--r-- | src/entities/Physical.cpp | 18 | ||||
-rw-r--r-- | src/entities/Physical.h | 13 | ||||
-rw-r--r-- | src/entities/Treadable.h | 5 |
7 files changed, 56 insertions, 57 deletions
diff --git a/src/entities/Building.h b/src/entities/Building.h index 3586a8dc..29608c10 100644 --- a/src/entities/Building.h +++ b/src/entities/Building.h @@ -16,6 +16,3 @@ public: virtual bool GetIsATreadable(void) { return false; } }; - -VALIDATE_SIZE(CBuilding, 0x64); - diff --git a/src/entities/Dummy.h b/src/entities/Dummy.h index 3717a01c..7998a748 100644 --- a/src/entities/Dummy.h +++ b/src/entities/Dummy.h @@ -15,6 +15,3 @@ public: static void *operator new(size_t); static void operator delete(void*, size_t); }; - -VALIDATE_SIZE(CDummy, 0x68); - diff --git a/src/entities/Entity.cpp b/src/entities/Entity.cpp index ec50dd30..6f8ebcb4 100644 --- a/src/entities/Entity.cpp +++ b/src/entities/Entity.cpp @@ -52,18 +52,17 @@ CEntity::CEntity(void) bRenderScorched = false; bHasBlip = false; bIsBIGBuilding = false; - bRenderDamaged = false; + bStreamBIGBuilding = false; + bRenderDamaged = false; bBulletProof = false; bFireProof = false; bCollisionProof = false; bMeleeProof = false; bOnlyDamagedByPlayer = false; bStreamingDontDelete = false; - bZoneCulled = false; - bZoneCulled2 = false; - bRemoveFromWorld = false; + bHasHitWall = false; bImBeingRendered = false; bTouchingWater = false; @@ -71,13 +70,20 @@ CEntity::CEntity(void) bDrawLast = false; bNoBrightHeadLights = false; bDoNotRender = false; - bDistanceFade = false; + + m_flagE1 = false; m_flagE2 = false; + bOffscreen = false; + bIsStaticWaitingForCollision = false; + m_flagE10 = false; + bUnderwater = false; + m_flagE40 = false; m_scanCode = 0; m_modelIndex = -1; m_rwObject = nil; + m_area = AREA_MAIN_MAP; m_randomSeed = CGeneral::GetRandomNumber(); m_pFirstReference = nil; } @@ -322,6 +328,7 @@ CEntity::UpdateRwFrame(void) } } +//--MIAMI: done void CEntity::SetupBigBuilding(void) { @@ -332,14 +339,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 @@ -923,6 +928,7 @@ CEntity::AddSteamsFromGround(CPtrList& list) } #ifdef COMPATIBLE_SAVES +// TODO(MIAMI) void CEntity::SaveEntityFlags(uint8*& buf) { @@ -954,28 +960,27 @@ 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); + if (bRemoveFromWorld) tmp |= BIT(0); + if (bHasHitWall) tmp |= BIT(1); WriteSaveBuf<uint32>(buf, tmp); tmp = 0; - if (bRemoveFromWorld) tmp |= BIT(0); - if (bHasHitWall) tmp |= BIT(1); if (bImBeingRendered) tmp |= BIT(2); if (bTouchingWater) tmp |= BIT(3); if (bIsSubway) tmp |= BIT(4); if (bDrawLast) tmp |= BIT(5); if (bNoBrightHeadLights) tmp |= BIT(6); if (bDoNotRender) tmp |= BIT(7); - if (bDistanceFade) tmp |= BIT(8); + if (m_flagE2) tmp |= BIT(9); WriteSaveBuf<uint32>(buf, tmp); } +// TODO(MIAMI) void CEntity::LoadEntityFlags(uint8*& buf) { @@ -1007,21 +1012,19 @@ CEntity::LoadEntityFlags(uint8*& buf) bMeleeProof = !!(tmp & BIT(27)); bOnlyDamagedByPlayer = !!(tmp & BIT(28)); bStreamingDontDelete = !!(tmp & BIT(29)); - bZoneCulled = !!(tmp & BIT(30)); - bZoneCulled2 = !!(tmp & BIT(31)); + bRemoveFromWorld = !!(tmp & BIT(0)); + bHasHitWall = !!(tmp & BIT(1)); tmp = ReadSaveBuf<uint32>(buf); - bRemoveFromWorld = !!(tmp & BIT(0)); - bHasHitWall = !!(tmp & BIT(1)); bImBeingRendered = !!(tmp & BIT(2)); bTouchingWater = !!(tmp & BIT(3)); bIsSubway = !!(tmp & BIT(4)); bDrawLast = !!(tmp & BIT(5)); bNoBrightHeadLights = !!(tmp & BIT(6)); bDoNotRender = !!(tmp & BIT(7)); - bDistanceFade = !!(tmp & BIT(8)); + m_flagE2 = !!(tmp & BIT(9)); } diff --git a/src/entities/Entity.h b/src/entities/Entity.h index eca462cd..fa57519e 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,22 @@ 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_flagE1 : 1; uint32 m_flagE2 : 1; + uint32 bOffscreen : 1; // offscreen flag. This can only be trusted when it is set to true + uint32 bIsStaticWaitingForCollision : 1; // this is used by script created entities - they are static until the collision is loaded below them + uint32 m_flagE10 : 1; // probably bDontStream + uint32 bUnderwater : 1; // this object is underwater change drawing order + uint32 m_flagE40 : 1; 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 +103,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); @@ -149,6 +155,8 @@ public: bool GetIsOnScreenComplex(void); bool IsVisible(void) { return m_rwObject && bIsVisible && GetIsOnScreen(); } bool IsVisibleComplex(void) { return m_rwObject && bIsVisible && GetIsOnScreenComplex(); } +// TODO(MIAMI): + bool IsEntityOccluded(void) { return false; } int16 GetModelIndex(void) const { return m_modelIndex; } void UpdateRwFrame(void); void SetupBigBuilding(void); @@ -172,5 +180,3 @@ public: static void AddSteamsFromGround(CPtrList& list); }; - -VALIDATE_SIZE(CEntity, 0x64); 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 c84686ed..ce02e463 100644 --- a/src/entities/Physical.h +++ b/src/entities/Physical.h @@ -117,6 +117,17 @@ public: void SetMoveSpeed(const CVector& speed) { m_vecMoveSpeed = speed; } + void AddToMoveSpeed(float x, float y, float z) { + m_vecMoveSpeed.x += x; + m_vecMoveSpeed.y += y; + m_vecMoveSpeed.z += z; + } + void AddToMoveSpeed(const CVector& addition) { + m_vecMoveSpeed += addition; + } + void AddToMoveSpeed(const CVector2D& addition) { + m_vecMoveSpeed += CVector(addition.x, addition.y, 0.0f); + } const CVector &GetTurnSpeed() { return m_vecTurnSpeed; } void SetTurnSpeed(float x, float y, float z) { m_vecTurnSpeed.x = x; @@ -160,5 +171,3 @@ public: bool CheckCollision(void); bool CheckCollision_SimpleCar(void); }; - -VALIDATE_SIZE(CPhysical, 0x128); diff --git a/src/entities/Treadable.h b/src/entities/Treadable.h index c3160f47..c3ab755e 100644 --- a/src/entities/Treadable.h +++ b/src/entities/Treadable.h @@ -8,10 +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; } }; - -VALIDATE_SIZE(CTreadable, 0x94); - |