Refactor CObject::ObjectDamage switch statement

This commit is contained in:
saml1er 2020-04-10 21:52:02 +05:00
parent c2b00d7ad9
commit 16360eb6df

View File

@ -169,26 +169,35 @@ CObject::ObjectDamage(float amount)
amount = 0.0f; amount = 0.0f;
} }
if ((amount * m_fCollisionDamageMultiplier > 150.0f || bBodyCastDamageEffect) && m_nCollisionDamageEffect) { if ((amount * m_fCollisionDamageMultiplier > 150.0f || bBodyCastDamageEffect) && m_nCollisionDamageEffect) {
if (m_nCollisionDamageEffect == COLDAMAGE_EFFECT_CHANGE_MODEL) { const CVector& vecPos = m_matrix.GetPosition();
const float fDirectionZ = 0.0002f * amount;
switch (m_nCollisionDamageEffect)
{
case COLDAMAGE_EFFECT_CHANGE_MODEL:
bRenderDamaged = true; bRenderDamaged = true;
return; break;
} case COLDAMAGE_EFFECT_SPLIT_MODEL:
if (m_nCollisionDamageEffect == COLDAMAGE_EFFECT_SPLIT_MODEL) break;
return; case COLDAMAGE_EFFECT_SMASH_COMPLETELY:
if (m_nCollisionDamageEffect == COLDAMAGE_EFFECT_SMASH_COMPLETELY) {
bIsVisible = false; bIsVisible = false;
bUsesCollision = false; bUsesCollision = false;
bIsStatic = true; bIsStatic = true;
bExplosionProof = true; bExplosionProof = true;
m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f); m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f);
m_vecTurnSpeed = CVector(0.0f, 0.0f, 0.0f); m_vecTurnSpeed = CVector(0.0f, 0.0f, 0.0f);
return; case COLDAMAGE_EFFECT_CHANGE_THEN_SMASH:
if (!bRenderDamaged) {
bRenderDamaged = true;
} }
if (m_nCollisionDamageEffect != COLDAMAGE_EFFECT_CHANGE_THEN_SMASH) { else {
const CVector& vecPos = m_matrix.GetPosition(); bIsVisible = false;
const float fDirectionZ = 0.0002f * amount; bUsesCollision = false;
switch (m_nCollisionDamageEffect) bIsStatic = true;
{ bExplosionProof = true;
m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f);
m_vecTurnSpeed = CVector(0.0f, 0.0f, 0.0f);
}
break;
case COLDAMAGE_EFFECT_SMASH_CARDBOX_COMPLETELY: { case COLDAMAGE_EFFECT_SMASH_CARDBOX_COMPLETELY: {
bIsVisible = false; bIsVisible = false;
bUsesCollision = false; bUsesCollision = false;
@ -196,7 +205,7 @@ CObject::ObjectDamage(float amount)
bExplosionProof = true; bExplosionProof = true;
m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f); m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f);
m_vecTurnSpeed = CVector(0.0f, 0.0f, 0.0f); m_vecTurnSpeed = CVector(0.0f, 0.0f, 0.0f);
const RwRGBA color = {96, 48, 0, 255}; const RwRGBA color = { 96, 48, 0, 255 };
for (int32 i = 0; i < 25; i++) { for (int32 i = 0; i < 25; i++) {
CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.7f), CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
CGeneral::GetRandomNumberInRange(-0.35f, 0.7f), CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
@ -204,7 +213,7 @@ CObject::ObjectDamage(float amount)
++nFrameGen; ++nFrameGen;
int32 currentFrame = nFrameGen & 3; int32 currentFrame = nFrameGen & 3;
float fRandom = CGeneral::GetRandomNumberInRange(0.01f, 1.0f); float fRandom = CGeneral::GetRandomNumberInRange(0.01f, 1.0f);
RwRGBA randomColor = {color.red * fRandom, color.green * fRandom , color.blue, color.alpha}; RwRGBA randomColor = { color.red * fRandom, color.green * fRandom , color.blue, color.alpha };
float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.18f); float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.18f);
int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 80); int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 80);
CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, randomColor, nRotationSpeed, 0, currentFrame, 0); CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, randomColor, nRotationSpeed, 0, currentFrame, 0);
@ -219,7 +228,7 @@ CObject::ObjectDamage(float amount)
bExplosionProof = true; bExplosionProof = true;
m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f); m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f);
m_vecTurnSpeed = CVector(0.0f, 0.0f, 0.0f); m_vecTurnSpeed = CVector(0.0f, 0.0f, 0.0f);
const RwRGBA color = {128, 128, 128, 255}; const RwRGBA color = { 128, 128, 128, 255 };
for (int32 i = 0; i < 45; i++) { for (int32 i = 0; i < 45; i++) {
CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.7f), CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
CGeneral::GetRandomNumberInRange(-0.35f, 0.7f), CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
@ -227,7 +236,7 @@ CObject::ObjectDamage(float amount)
++nFrameGen; ++nFrameGen;
int32 currentFrame = nFrameGen & 3; int32 currentFrame = nFrameGen & 3;
float fRandom = CGeneral::GetRandomNumberInRange(0.5f, 0.5f); float fRandom = CGeneral::GetRandomNumberInRange(0.5f, 0.5f);
RwRGBA randomColor = {color.red * fRandom, color.green * fRandom , color.blue * fRandom, color.alpha}; RwRGBA randomColor = { color.red * fRandom, color.green * fRandom , color.blue * fRandom, color.alpha };
float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.18f); float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.18f);
int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 80); int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 80);
CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, randomColor, nRotationSpeed, 0, currentFrame, 0); CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, randomColor, nRotationSpeed, 0, currentFrame, 0);
@ -242,8 +251,8 @@ CObject::ObjectDamage(float amount)
bExplosionProof = true; bExplosionProof = true;
m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f); m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f);
m_vecTurnSpeed = CVector(0.0f, 0.0f, 0.0f); m_vecTurnSpeed = CVector(0.0f, 0.0f, 0.0f);
const RwRGBA color1 = {200, 0, 0, 255}; const RwRGBA color1 = { 200, 0, 0, 255 };
const RwRGBA color2 = {200, 200, 200, 255}; const RwRGBA color2 = { 200, 200, 200, 255 };
for (int32 i = 0; i < 10; i++) { for (int32 i = 0; i < 10; i++) {
CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.7f), CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
CGeneral::GetRandomNumberInRange(-0.35f, 0.7f), CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
@ -267,8 +276,8 @@ CObject::ObjectDamage(float amount)
bExplosionProof = true; bExplosionProof = true;
m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f); m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f);
m_vecTurnSpeed = CVector(0.0f, 0.0f, 0.0f); m_vecTurnSpeed = CVector(0.0f, 0.0f, 0.0f);
const RwRGBA color1 = {200, 0, 0, 255}; const RwRGBA color1 = { 200, 0, 0, 255 };
const RwRGBA color2 = {200, 200, 200, 255}; const RwRGBA color2 = { 200, 200, 200, 255 };
for (int32 i = 0; i < 32; i++) { for (int32 i = 0; i < 32; i++) {
CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.7f), CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
CGeneral::GetRandomNumberInRange(-0.35f, 0.7f), CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
@ -288,18 +297,6 @@ CObject::ObjectDamage(float amount)
default: default:
return; return;
} }
return;
}
if (!bRenderDamaged) {
bRenderDamaged = true;
} else {
bIsVisible = false;
bUsesCollision = false;
bIsStatic = true;
bExplosionProof = true;
m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f);
m_vecTurnSpeed = CVector(0.0f, 0.0f, 0.0f);
}
} }
} }