summaryrefslogtreecommitdiff
path: root/game/client/tf2/proxy_shield.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/tf2/proxy_shield.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/client/tf2/proxy_shield.cpp')
-rw-r--r--game/client/tf2/proxy_shield.cpp313
1 files changed, 313 insertions, 0 deletions
diff --git a/game/client/tf2/proxy_shield.cpp b/game/client/tf2/proxy_shield.cpp
new file mode 100644
index 0000000..214a579
--- /dev/null
+++ b/game/client/tf2/proxy_shield.cpp
@@ -0,0 +1,313 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#include "cbase.h"
+#include "materialsystem/imaterial.h"
+#include "materialsystem/imaterialsystem.h"
+#include <KeyValues.h>
+#include "materialsystem/imaterialvar.h"
+#include "C_BaseTFPlayer.h"
+#include "functionproxy.h"
+#include "C_PlayerResource.h"
+#include "Weapon_CombatShield.h"
+
+// for the 2/5/03 demo
+#include "c_demo_entities.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+
+//-----------------------------------------------------------------------------
+// Shield proxy base class
+//-----------------------------------------------------------------------------
+class CTFShieldProxy : public CResultProxy
+{
+protected:
+ C_WeaponCombatShield *BindArgToShield( void *pArg );
+};
+
+
+//-----------------------------------------------------------------------------
+// Gets the shield
+//-----------------------------------------------------------------------------
+C_WeaponCombatShield *CTFShieldProxy::BindArgToShield( void *pArg )
+{
+ C_BaseEntity *pEntity = BindArgToEntity( pArg );
+ if (!pEntity)
+ return NULL;
+
+ if (dynamic_cast<C_BaseViewModel*>(pEntity))
+ {
+ // If this is the view model, snack the state from the local player...
+ C_BaseTFPlayer* pPlayer = C_BaseTFPlayer::GetLocalPlayer();
+ return pPlayer->GetShield();
+ }
+
+ if ( dynamic_cast<C_BaseTFPlayer*>(pEntity) )
+ {
+ C_BaseTFPlayer* pPlayer = dynamic_cast<C_BaseTFPlayer*>( pEntity );
+ return pPlayer->GetShield();
+ }
+
+ return dynamic_cast<C_WeaponCombatShield*>( pEntity );
+}
+
+
+//=============================================================================
+//
+// TF Shield raising proxy.
+//
+class CTFShieldRaiseProxy : public CTFShieldProxy
+{
+public:
+
+ virtual bool Init( IMaterial *pMaterial, KeyValues *pKeyValues );
+ virtual void OnBind( void *pEnt );
+
+private:
+ CFloatInput m_Factor;
+};
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+bool CTFShieldRaiseProxy::Init( IMaterial *pMaterial, KeyValues *pKeyValues )
+{
+ if ( !CResultProxy::Init( pMaterial, pKeyValues ) )
+ return false;
+
+ // Init shield raise times.
+ if ( !m_Factor.Init( pMaterial, pKeyValues, "scale", 1 ) )
+ return false;
+
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+void CTFShieldRaiseProxy::OnBind( void *pArg )
+{
+ float flTimeSinceRaised = 0.0f;
+ C_WeaponCombatShield *pShield = BindArgToShield( pArg );
+ if (pShield)
+ {
+ flTimeSinceRaised = pShield->GetRaisingTime();
+ }
+
+ // Return the time in seconds from when we started raising.
+ SetFloatResult( flTimeSinceRaised * m_Factor.GetFloat() );
+}
+
+EXPOSE_INTERFACE( CTFShieldRaiseProxy, IMaterialProxy, "TFShieldRaise" IMATERIAL_PROXY_INTERFACE_VERSION );
+
+//=============================================================================
+//
+// TF Shield lowering proxy.
+//
+class CTFShieldLowerProxy : public CTFShieldProxy
+{
+public:
+
+ virtual bool Init( IMaterial *pMaterial, KeyValues *pKeyValues );
+ virtual void OnBind( void *pEnt );
+
+private:
+ CFloatInput m_Factor;
+};
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+bool CTFShieldLowerProxy::Init( IMaterial *pMaterial, KeyValues *pKeyValues )
+{
+ if ( !CResultProxy::Init( pMaterial, pKeyValues ) )
+ return false;
+
+ // Init shield raise times.
+ if ( !m_Factor.Init( pMaterial, pKeyValues, "scale", 1 ) )
+ return false;
+
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+void CTFShieldLowerProxy::OnBind( void *pArg )
+{
+ float flTimeSinceLowered = 0.0f;
+ C_WeaponCombatShield *pShield = BindArgToShield( pArg );
+ if ( pShield )
+ {
+ flTimeSinceLowered = pShield->GetLoweringTime();
+ }
+ else
+ {
+ // NOTE: This is for the Feb 5 03 demo only
+ C_BaseEntity *pEntity = BindArgToEntity( pArg );
+ C_Cycler_TF2Commando *pDemoCommando = dynamic_cast<C_Cycler_TF2Commando*>( pEntity );
+ if (pDemoCommando)
+ {
+ flTimeSinceLowered = pDemoCommando->GetShieldLowerTime();
+ }
+ }
+
+ // Return the time in seconds from when we started lowering.
+ Assert( m_pResult );
+ SetFloatResult( flTimeSinceLowered * m_Factor.GetFloat() );
+
+// Msg( "Lowering = %f\n", flTimeSinceLowered );
+}
+
+EXPOSE_INTERFACE( CTFShieldLowerProxy, IMaterialProxy, "TFShieldLower" IMATERIAL_PROXY_INTERFACE_VERSION );
+
+//=============================================================================
+//
+// TF Shield raising proxy.
+//
+class CTFShieldVisibilityProxy : public CTFShieldProxy
+{
+public:
+ virtual bool Init( IMaterial *pMaterial, KeyValues *pKeyValues );
+ virtual void OnBind( void *pEnt );
+
+private:
+ CFloatInput m_RaiseFactor;
+ CFloatInput m_LowerFactor;
+};
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+bool CTFShieldVisibilityProxy::Init( IMaterial *pMaterial, KeyValues *pKeyValues )
+{
+ if ( !CResultProxy::Init( pMaterial, pKeyValues ) )
+ return false;
+
+ // Init shield raise times.
+ if ( !m_RaiseFactor.Init( pMaterial, pKeyValues, "raisescale", 1 ) )
+ return false;
+
+ if ( !m_LowerFactor.Init( pMaterial, pKeyValues, "lowerscale", 1 ) )
+ return false;
+
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+void CTFShieldVisibilityProxy::OnBind( void *pArg )
+{
+ float flAlpha = 0.0f;
+ C_WeaponCombatShield *pShield = BindArgToShield( pArg );
+ if ( pShield )
+ {
+ if (pShield->GetRaisingTime() != 0.0f)
+ {
+ flAlpha = pShield->GetRaisingTime() * m_RaiseFactor.GetFloat();
+ flAlpha = clamp( flAlpha, 0, 1 );
+ }
+ else
+ {
+ flAlpha = 1.0f - pShield->GetLoweringTime() * m_LowerFactor.GetFloat();
+ flAlpha = clamp( flAlpha, 0, 1 );
+ }
+ }
+
+ // Return the time in seconds from when we started lowering.
+ Assert( m_pResult );
+ SetFloatResult( flAlpha );
+}
+
+EXPOSE_INTERFACE( CTFShieldVisibilityProxy, IMaterialProxy, "TFShieldVisibility" IMATERIAL_PROXY_INTERFACE_VERSION );
+
+
+//=============================================================================
+//
+// TF Shield active proxy.
+//
+class CTFShieldActiveProxy : public CTFShieldProxy
+{
+public:
+
+ virtual bool Init( IMaterial *pMaterial, KeyValues *pKeyValues );
+ virtual void OnBind( void *pEnt );
+};
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+bool CTFShieldActiveProxy::Init( IMaterial *pMaterial, KeyValues *pKeyValues )
+{
+ if ( !CResultProxy::Init( pMaterial, pKeyValues ) )
+ return false;
+
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+void CTFShieldActiveProxy::OnBind( void *pArg )
+{
+ bool bIsShieldUp = false;
+ C_WeaponCombatShield *pShield = BindArgToShield( pArg );
+ if ( pShield )
+ {
+ bIsShieldUp = ( pShield->IsUp() == 1.0f );
+ }
+ else
+ {
+ // NOTE: This is for the Feb 5 03 demo only
+ C_BaseEntity *pEntity = BindArgToEntity( pArg );
+ C_Cycler_TF2Commando *pDemoCommando = dynamic_cast<C_Cycler_TF2Commando*>( pEntity );
+ if (pDemoCommando)
+ {
+ bIsShieldUp = pDemoCommando->IsShieldActive();
+ }
+ }
+
+ Assert( m_pResult );
+ SetFloatResult( ( float )bIsShieldUp );
+
+// Msg( "Active = %d\n", bIsShieldUp );
+}
+
+EXPOSE_INTERFACE( CTFShieldActiveProxy, IMaterialProxy, "TFShieldActive" IMATERIAL_PROXY_INTERFACE_VERSION );
+
+//=============================================================================
+//
+// TF Shield health proxy.
+//
+class CTFShieldHealthProxy : public CTFShieldProxy
+{
+public:
+
+ virtual bool Init( IMaterial *pMaterial, KeyValues *pKeyValues );
+ virtual void OnBind( void *pEnt );
+};
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+bool CTFShieldHealthProxy::Init( IMaterial *pMaterial, KeyValues *pKeyValues )
+{
+ if ( !CResultProxy::Init( pMaterial, pKeyValues ) )
+ return false;
+
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+void CTFShieldHealthProxy::OnBind( void *pArg )
+{
+ float flShieldHealth = 1;
+ C_WeaponCombatShield *pShield = BindArgToShield( pArg );
+ if ( pShield )
+ {
+ flShieldHealth = pShield->GetShieldHealth();
+ }
+
+ Assert( m_pResult );
+ SetFloatResult( flShieldHealth );
+}
+
+EXPOSE_INTERFACE( CTFShieldHealthProxy, IMaterialProxy, "TFShieldHealth" IMATERIAL_PROXY_INTERFACE_VERSION );