summaryrefslogtreecommitdiffstats
path: root/src/entities
diff options
context:
space:
mode:
Diffstat (limited to 'src/entities')
-rw-r--r--src/entities/Building.h1
-rw-r--r--src/entities/Dummy.h1
-rw-r--r--src/entities/Entity.cpp23
-rw-r--r--src/entities/Entity.h17
-rw-r--r--src/entities/Physical.cpp18
-rw-r--r--src/entities/Physical.h1
-rw-r--r--src/entities/Treadable.h3
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");