diff --git a/src/game/client/neo/c_neo_player.cpp b/src/game/client/neo/c_neo_player.cpp index c473a99797..8a6d513084 100644 --- a/src/game/client/neo/c_neo_player.cpp +++ b/src/game/client/neo/c_neo_player.cpp @@ -688,12 +688,12 @@ int C_NEO_Player::DrawModel(int flags) bool inThermalVision = pTargetPlayer ? (pTargetPlayer->IsInVision() && pTargetPlayer->GetClass() == NEO_CLASS_SUPPORT) : false; int ret = 0; - if (!IsCloaked() || inThermalVision) + if (!m_bInThermOpticCamo || inThermalVision) { ret |= BaseClass::DrawModel(flags); } - if (IsCloaked() && !inThermalVision) + if (m_bInThermOpticCamo && !inThermalVision) { IMaterial* pass = materials->FindMaterial("models/player/toc", TEXTURE_GROUP_CLIENT_EFFECTS); modelrender->ForcedMaterialOverride(pass); @@ -701,7 +701,7 @@ int C_NEO_Player::DrawModel(int flags) modelrender->ForcedMaterialOverride(nullptr); } - else if (inThermalVision && !IsCloaked()) + else if (inThermalVision && !m_bInThermOpticCamo) { IMaterial* pass = materials->FindMaterial(NEO_THERMAL_MODEL_MATERIAL, TEXTURE_GROUP_MODEL); modelrender->ForcedMaterialOverride(pass); @@ -749,9 +749,21 @@ void C_NEO_Player::AddPoints(int score, bool bAllowNegativeScore, bool bIgnorePl //pl.frags = m_iFrags; NEO TODO (Adam) Is this actually used anywhere? should we include a xp field in CPlayerState? } +bool C_NEO_Player::IsCloaked() const +{ + auto pTargetPlayer = C_NEO_Player::GetVisionTargetNEOPlayer(); + if (!pTargetPlayer) + { + return m_bInThermOpticCamo; + } + + bool inThermalVision = pTargetPlayer->IsInVision() && pTargetPlayer->GetClass() == NEO_CLASS_SUPPORT; + return m_bInThermOpticCamo && !inThermalVision; +} + ShadowType_t C_NEO_Player::ShadowCastType( void ) { - if (IsCloaked()) + if (m_bInThermOpticCamo) { return SHADOWS_NONE; } diff --git a/src/game/client/neo/c_neo_player.h b/src/game/client/neo/c_neo_player.h index b613f5ebf8..761c0fd2fe 100644 --- a/src/game/client/neo/c_neo_player.h +++ b/src/game/client/neo/c_neo_player.h @@ -162,7 +162,7 @@ class C_NEO_Player : public C_HL2MP_Player C_NEOPredictedViewModel *GetNEOViewModel() { return static_cast(GetViewModel()); } - bool IsCloaked() const { return m_bInThermOpticCamo; } + bool IsCloaked() const; float GetCloakFactor() const { return m_flTocFactor; } bool IsAirborne() const { return (!(GetFlags() & FL_ONGROUND)); } bool IsInVision() const { return m_bInVision; } diff --git a/src/game/shared/neo/weapons/weapon_neobasecombatweapon.cpp b/src/game/shared/neo/weapons/weapon_neobasecombatweapon.cpp index d9783b1b2c..2f2f99ed75 100644 --- a/src/game/shared/neo/weapons/weapon_neobasecombatweapon.cpp +++ b/src/game/shared/neo/weapons/weapon_neobasecombatweapon.cpp @@ -1293,7 +1293,7 @@ int CNEOBaseCombatWeapon::DrawModel(int flags) bool inThermalVision = pTargetPlayer->IsInVision() && pTargetPlayer->GetClass() == NEO_CLASS_SUPPORT; int ret = 0; - if (inThermalVision && (!pOwner || (pOwner && !pOwner->IsCloaked()))) + if (inThermalVision && (!pOwner || (pOwner && !pOwner->m_bInThermOpticCamo))) { IMaterial* pass = materials->FindMaterial("dev/thermal_weapon_model", TEXTURE_GROUP_MODEL); modelrender->ForcedMaterialOverride(pass); @@ -1302,7 +1302,7 @@ int CNEOBaseCombatWeapon::DrawModel(int flags) return ret; } - if ((pOwner && pOwner->IsCloaked()) && !inThermalVision) + if ((pOwner && pOwner->m_bInThermOpticCamo) && !inThermalVision) { IMaterial* pass = materials->FindMaterial("models/player/toc", TEXTURE_GROUP_CLIENT_EFFECTS); modelrender->ForcedMaterialOverride(pass);