Skip to content

Commit 5d3752b

Browse files
xezonahmed007boss
authored andcommitted
tweak(drawable): Decouple stealth detected opacity fade time step from render update (TheSuperHackers#2047)
1 parent c622bef commit 5d3752b

2 files changed

Lines changed: 37 additions & 15 deletions

File tree

Generals/Code/GameEngine/Source/GameClient/Drawable.cpp

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2163,15 +2163,25 @@ void Drawable::setStealthLook(StealthLookType look)
21632163
//-------------------------------------------------------------------------------------------------
21642164
void Drawable::draw()
21652165
{
2166-
21672166
if ( getObject() && getObject()->isEffectivelyDead() )
2168-
m_heatVisionOpacity = 0.0f;//dead folks don't stealth anyway
2169-
else if ( m_heatVisionOpacity > VERY_TRANSPARENT_HEATVISION )// keep fading any heatvision unless something has set it to zero
2170-
m_heatVisionOpacity *= HEATVISION_FADE_SCALAR;
2171-
else
2167+
{
2168+
//dead folks don't stealth anyway
21722169
m_heatVisionOpacity = 0.0f;
2170+
}
2171+
else if ( m_heatVisionOpacity > VERY_TRANSPARENT_HEATVISION )
2172+
{
2173+
// keep fading any added material unless something has set it to zero
2174+
// TheSuperHackers @tweak The stealth opacity fade time step is now decoupled from the render update.
2175+
static_assert(HEATVISION_FADE_SCALAR > 0.0f && HEATVISION_FADE_SCALAR < 1.0f, "HEATVISION_FADE_SCALAR must be between 0 and 1");
21732176

2174-
2177+
const Real timeScale = TheFramePacer->getActualLogicTimeScaleOverFpsRatio();
2178+
const Real fadeScalar = 1.0f - (1.0f - HEATVISION_FADE_SCALAR) * timeScale;
2179+
m_heatVisionOpacity *= fadeScalar;
2180+
}
2181+
else
2182+
{
2183+
m_heatVisionOpacity = 0.0f;
2184+
}
21752185

21762186
if (m_hidden || m_hiddenByStealth || getFullyObscuredByShroud())
21772187
return; // my, that was easy

GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2706,16 +2706,28 @@ void Drawable::setStealthLook(StealthLookType look)
27062706
//-------------------------------------------------------------------------------------------------
27072707
void Drawable::draw()
27082708
{
2709-
if ( testTintStatus( TINT_STATUS_FRENZY ) == FALSE )
2710-
{
2711-
if ( getObject() && getObject()->isEffectivelyDead() )
2712-
m_secondMaterialPassOpacity = 0.0f;//dead folks don't stealth anyway
2713-
else if ( m_secondMaterialPassOpacity > VERY_TRANSPARENT_MATERIAL_PASS_OPACITY )// keep fading any add'l material unless something has set it to zero
2714-
m_secondMaterialPassOpacity *= MATERIAL_PASS_OPACITY_FADE_SCALAR;
2715-
else
2716-
m_secondMaterialPassOpacity = 0.0f;
2717-
}
2709+
if ( testTintStatus( TINT_STATUS_FRENZY ) == FALSE )
2710+
{
2711+
if ( getObject() && getObject()->isEffectivelyDead() )
2712+
{
2713+
//dead folks don't stealth anyway
2714+
m_secondMaterialPassOpacity = 0.0f;
2715+
}
2716+
else if ( m_secondMaterialPassOpacity > VERY_TRANSPARENT_MATERIAL_PASS_OPACITY )
2717+
{
2718+
// keep fading any added material unless something has set it to zero
2719+
// TheSuperHackers @tweak The stealth opacity fade time step is now decoupled from the render update.
2720+
static_assert(MATERIAL_PASS_OPACITY_FADE_SCALAR > 0.0f && MATERIAL_PASS_OPACITY_FADE_SCALAR < 1.0f, "MATERIAL_PASS_OPACITY_FADE_SCALAR must be between 0 and 1");
27182721

2722+
const Real timeScale = TheFramePacer->getActualLogicTimeScaleOverFpsRatio();
2723+
const Real fadeScalar = 1.0f - (1.0f - MATERIAL_PASS_OPACITY_FADE_SCALAR) * timeScale;
2724+
m_secondMaterialPassOpacity *= fadeScalar;
2725+
}
2726+
else
2727+
{
2728+
m_secondMaterialPassOpacity = 0.0f;
2729+
}
2730+
}
27192731

27202732
if (m_hidden || m_hiddenByStealth || getFullyObscuredByShroud())
27212733
return; // my, that was easy

0 commit comments

Comments
 (0)