Merge branch 'falco/fuck_da_fences' into 'main'

Fixed the goddamn fences.

See merge request skmp/dca3-game!14
This commit is contained in:
Stefanos Kornilios Mitsis Poiitidis
2025-01-16 06:11:54 +00:00
3 changed files with 13 additions and 3 deletions

View File

@@ -83,6 +83,11 @@ CEntity::~CEntity(void)
ResolveReferences(); ResolveReferences();
} }
bool
CEntity::IsFence(void) {
return IsObject() && ::IsFence(static_cast<CObject *>(this)->GetModelIndex());
}
void void
CEntity::SetModelIndex(uint32 id) CEntity::SetModelIndex(uint32 id)
{ {

View File

@@ -131,6 +131,7 @@ public:
bool IsPed(void) { return m_type == ENTITY_TYPE_PED; } bool IsPed(void) { return m_type == ENTITY_TYPE_PED; }
bool IsObject(void) { return m_type == ENTITY_TYPE_OBJECT; } bool IsObject(void) { return m_type == ENTITY_TYPE_OBJECT; }
bool IsDummy(void) { return m_type == ENTITY_TYPE_DUMMY; } bool IsDummy(void) { return m_type == ENTITY_TYPE_DUMMY; }
bool IsFence(void);
RpAtomic *GetAtomic(void) { RpAtomic *GetAtomic(void) {
assert(RwObjectGetType(m_rwObject) == rpATOMIC); assert(RwObjectGetType(m_rwObject) == rpATOMIC);

View File

@@ -59,7 +59,7 @@ CPhysical::CPhysical(void)
bInfiniteMass = false; bInfiniteMass = false;
bIsInWater = false; bIsInWater = false;
bHitByTrain = false; bHitByTrain = false;
bSkipLineCol = false; bSkipLineCol = IsFence();
m_fDistanceTravelled = 0.0f; m_fDistanceTravelled = 0.0f;
m_treadable[PATH_CAR] = nil; m_treadable[PATH_CAR] = nil;
@@ -1461,6 +1461,10 @@ CPhysical::ProcessCollisionSectorList(CPtrList *lists)
skipCollision = false; skipCollision = false;
altcollision = false; altcollision = false;
if(A->IsFence() && B->IsFence()) {
skipCollision = true;
A->bSkipLineCol = true;
}
if(B->IsBuilding()) if(B->IsBuilding())
skipCollision = false; skipCollision = false;
else if(IsStreetLight(A->GetModelIndex()) && else if(IsStreetLight(A->GetModelIndex()) &&
@@ -1922,12 +1926,12 @@ CPhysical::ProcessCollision(void)
n = NUMSTEPS(0.09f); n = NUMSTEPS(0.09f);
step = savedTimeStep / n; step = savedTimeStep / n;
} }
}else if(responsecase == COLLRESPONSE_SMALLBOX || responsecase == COLLRESPONSE_FENCEPART){ }else if(responsecase == COLLRESPONSE_SMALLBOX){
if(distSq >= sq(0.15f)){ if(distSq >= sq(0.15f)){
n = NUMSTEPS(0.15f); n = NUMSTEPS(0.15f);
step = savedTimeStep / n; step = savedTimeStep / n;
} }
}else{ }else if(responsecase != COLLRESPONSE_FENCEPART){
if(distSq >= sq(0.3f)){ if(distSq >= sq(0.3f)){
n = NUMSTEPS(0.3f); n = NUMSTEPS(0.3f);
step = savedTimeStep / n; step = savedTimeStep / n;