implemented CObjectData

This commit is contained in:
aap
2019-06-19 18:35:51 +02:00
parent 864f719b1e
commit 2ec11b000d
10 changed files with 153 additions and 23 deletions

View File

@ -16,8 +16,8 @@ CObject::CObject(void)
m_type = ENTITY_TYPE_OBJECT;
m_fUprootLimit = 0.0f;
m_nCollisionDamageEffect = 0;
m_bSpecialCollisionResponseCases = 0;
m_bCameraToAvoidThisObject = 0;
m_nSpecialCollisionResponseCases = COLLRESPONSE_NONE;
m_bCameraToAvoidThisObject = false;
ObjectCreatedBy = 0;
m_nEndOfLifeTime = 0;
// m_nRefModelIndex = -1; // duplicate

View File

@ -9,6 +9,21 @@ enum {
CUTSCENE_OBJECT = 4,
};
enum {
COLLRESPONSE_NONE,
COLLRESPONSE_CHANGE_MODEL,
COLLRESPONSE_SPLIT_MODEL,
COLLRESPONSE_SMASH_COMPLETELY,
COLLRESPONSE_CHANGE_THEN_SMASH,
COLLRESPONSE_UNKNOWN5,
COLLRESPONSE_SMASH_CARDBOARD_COMPLETELY = 50,
COLLRESPONSE_SMASH_WOODENBOX_COMPLETELY = 60,
COLLRESPONSE_SMASH_TRAFFICCONE_COMPLETELY = 70,
COLLRESPONSE_SMASH_BARPOST_COMPLETELY = 80,
};
class CVehicle;
class CObject : public CPhysical
@ -28,9 +43,9 @@ public:
int8 field_172;
int8 field_173;
float m_fCollisionDamageMultiplier;
int8 m_nCollisionDamageEffect;
int8 m_bSpecialCollisionResponseCases;
int8 m_bCameraToAvoidThisObject;
uint8 m_nCollisionDamageEffect;
uint8 m_nSpecialCollisionResponseCases;
bool m_bCameraToAvoidThisObject;
int8 field_17B;
int8 field_17C;
int8 field_17D;

View File

@ -211,7 +211,7 @@ public:
bool bInVehicle;
uint8 stuff4[23];
int32 m_nPedType;
CPedStat *m_pedStats;
CPedStats *m_pedStats;
uint8 stuff5[24];
CEntity *m_pCollidingEntity;
uint8 stuff6[12];

View File

@ -1801,8 +1801,8 @@ CPhysical::ProcessCollision(void)
n = distSq > 0.32f ? NUMSTEPS(0.3f) : NUMSTEPS(0.4f);
step = savedTimeStep / n;
}else if(IsObject()){
int responsecase = ((CObject*)this)->m_bSpecialCollisionResponseCases;
if(responsecase == 1){
int responsecase = ((CObject*)this)->m_nSpecialCollisionResponseCases;
if(responsecase == COLLRESPONSE_CHANGE_MODEL){
CVector speedUp = { 0.0f, 0.0f, 0.0f };
CVector speedDown = { 0.0f, 0.0f, 0.0f };
speedUp.z = GetBoundRadius();
@ -1816,12 +1816,12 @@ CPhysical::ProcessCollision(void)
n = NUMSTEPS(0.3f);
step = savedTimeStep / n;
}
}else if(responsecase == 5){
}else if(responsecase == COLLRESPONSE_UNKNOWN5){
if(distSq >= 0.009f){
n = NUMSTEPS(0.09f);
step = savedTimeStep / n;
}
}else if(responsecase == 2 || responsecase == 4){
}else if(responsecase == COLLRESPONSE_SPLIT_MODEL || responsecase == COLLRESPONSE_CHANGE_THEN_SMASH){
if(distSq >= sq(0.15f)){
n = NUMSTEPS(0.15f);
step = savedTimeStep / n;

View File

@ -30,7 +30,7 @@ public:
float fForceMultiplier;
float m_fAirResistance;
float m_fElasticity;
float fPercentSubmerged;
float m_fBuoyancy;
CVector m_vecCentreOfMass;
CEntryInfoList m_entryInfoList;
CPtrNode *m_movingListNode;