Refactor CObject::ObjectDamage

This commit is contained in:
saml1er 2020-04-10 19:32:42 +05:00
parent bb21cff639
commit 5544325acb
2 changed files with 144 additions and 145 deletions

View File

@ -27,7 +27,7 @@ CObject::CObject(void)
m_nCollisionDamageEffect = 0;
m_nSpecialCollisionResponseCases = COLLRESPONSE_NONE;
m_bCameraToAvoidThisObject = false;
ObjectCreatedBy = 0;
ObjectCreatedBy = UNKNOWN_OBJECT;
m_nEndOfLifeTime = 0;
// m_nRefModelIndex = -1; // duplicate
// bUseVehicleColours = false; // duplicate
@ -97,7 +97,7 @@ CObject::ProcessControl(void)
m_vecMoveSpeed *= fTimeStep;
m_vecTurnSpeed *= fTimeStep;
}
if ((MI_EXPLODINGBARREL == m_modelIndex || MI_PETROLPUMP == m_modelIndex) && bHasBeenDamaged && bIsVisible
if ((m_modelIndex == MI_EXPLODINGBARREL || m_modelIndex == MI_PETROLPUMP) && bHasBeenDamaged && bIsVisible
&& CGeneral::GetRandomNumberInRange(0, 31) == 10) {
bExplosionProof = true;
bIsVisible = false;
@ -155,12 +155,13 @@ CObject::RemoveLighting(bool reset)
void
CObject::ObjectDamage(float amount)
{
if (m_nCollisionDamageEffect && bUsesCollision) {
if (!m_nCollisionDamageEffect || !bUsesCollision)
return;
static int8 nFrameGen = 0;
bool bBodyCastDamageEffect = false;
if (m_modelIndex == MI_BODYCAST){
if (amount > 50.0f)
nBodyCastHealth = static_cast<int16>(nBodyCastHealth - 0.5f * amount);
nBodyCastHealth = int16(nBodyCastHealth - 0.5f * amount);
if (nBodyCastHealth < 0)
nBodyCastHealth = 0;
if (nBodyCastHealth < 200)
@ -172,7 +173,8 @@ CObject::ObjectDamage(float amount)
bRenderDamaged = true;
return;
}
if (m_nCollisionDamageEffect != COLDAMAGE_EFFECT_SPLIT_MODEL) {
if (m_nCollisionDamageEffect == COLDAMAGE_EFFECT_SPLIT_MODEL)
return;
if (m_nCollisionDamageEffect == COLDAMAGE_EFFECT_SMASH_COMPLETELY) {
bIsVisible = false;
bUsesCollision = false;
@ -183,7 +185,6 @@ CObject::ObjectDamage(float amount)
return;
}
if (m_nCollisionDamageEffect != COLDAMAGE_EFFECT_CHANGE_THEN_SMASH) {
uint8 audioId = 0;
const CVector& vecPos = m_matrix.GetPosition();
const float fDirectionZ = 0.0002f * amount;
switch (m_nCollisionDamageEffect)
@ -208,7 +209,7 @@ CObject::ObjectDamage(float amount)
int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 80);
CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, randomColor, nRotationSpeed, 0, currentFrame, 0);
}
audioId = _SCRSOUND_CARDBOARD_BOX_SMASH;
PlayOneShotScriptObject(_SCRSOUND_CARDBOARD_BOX_SMASH, vecPos);
break;
}
case COLDAMAGE_EFFECT_SMASH_WOODENBOX_COMPLETELY: {
@ -231,7 +232,7 @@ CObject::ObjectDamage(float amount)
int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 80);
CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, randomColor, nRotationSpeed, 0, currentFrame, 0);
}
audioId = _SCRSOUND_WOODEN_BOX_SMASH;
PlayOneShotScriptObject(_SCRSOUND_WOODEN_BOX_SMASH, vecPos);
break;
}
case COLDAMAGE_EFFECT_SMASH_TRAFFICCONE_COMPLETELY: {
@ -256,7 +257,7 @@ CObject::ObjectDamage(float amount)
int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 80);
CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, color, nRotationSpeed, 0, currentFrame, 0);
}
audioId = _SCRSOUND_TYRE_BUMP;
PlayOneShotScriptObject(_SCRSOUND_TYRE_BUMP, vecPos);
break;
}
case COLDAMAGE_EFFECT_SMASH_BARPOST_COMPLETELY: {
@ -281,13 +282,12 @@ CObject::ObjectDamage(float amount)
int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 80);
CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, color, nRotationSpeed, 0, currentFrame, 0);
}
audioId = _SCRSOUND_COL_CAR;
PlayOneShotScriptObject(_SCRSOUND_COL_CAR, vecPos);
break;
}
default:
return;
}
PlayOneShotScriptObject(audioId, vecPos);
return;
}
if (!bRenderDamaged) {
@ -301,8 +301,6 @@ CObject::ObjectDamage(float amount)
m_vecTurnSpeed = CVector(0.0f, 0.0f, 0.0f);
}
}
}
}
}
void

View File

@ -3,6 +3,7 @@
#include "Physical.h"
enum {
UNKNOWN_OBJECT = 0,
GAME_OBJECT = 1,
MISSION_OBJECT = 2,
TEMP_OBJECT = 3,