summaryrefslogtreecommitdiff
path: root/game/shared/tf/tf_weapon_pda.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/shared/tf/tf_weapon_pda.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/shared/tf/tf_weapon_pda.cpp')
-rw-r--r--game/shared/tf/tf_weapon_pda.cpp542
1 files changed, 542 insertions, 0 deletions
diff --git a/game/shared/tf/tf_weapon_pda.cpp b/game/shared/tf/tf_weapon_pda.cpp
new file mode 100644
index 0000000..c9398f8
--- /dev/null
+++ b/game/shared/tf/tf_weapon_pda.cpp
@@ -0,0 +1,542 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+#include "cbase.h"
+
+#ifdef CLIENT_DLL
+#include "iinput.h"
+#endif
+
+#include "tf_weapon_pda.h"
+#include "in_buttons.h"
+#include "tf_gamerules.h"
+#include "tf_weaponbase_gun.h"
+
+// Server specific.
+#if !defined( CLIENT_DLL )
+ #include "tf_player.h"
+ #include "vguiscreen.h"
+// Client specific.
+#else
+ #include "c_tf_player.h"
+ #include <igameevents.h>
+ #include "tf_hud_menu_engy_build.h"
+ #include "tf_hud_menu_engy_destroy.h"
+ #include "tf_hud_menu_spy_disguise.h"
+ #include "prediction.h"
+ #ifdef STAGING_ONLY
+ #include "tf_hud_menu_spy_build.h"
+ #endif // STAGING_ONLY
+#endif
+
+//=============================================================================
+//
+// TFWeaponBase Melee tables.
+//
+IMPLEMENT_NETWORKCLASS_ALIASED( TFWeaponPDA, DT_TFWeaponPDA )
+
+BEGIN_NETWORK_TABLE( CTFWeaponPDA, DT_TFWeaponPDA )
+END_NETWORK_TABLE()
+
+BEGIN_PREDICTION_DATA( CTFWeaponPDA )
+END_PREDICTION_DATA()
+
+// Server specific.
+#if !defined( CLIENT_DLL )
+BEGIN_DATADESC( CTFWeaponPDA )
+END_DATADESC()
+#endif
+
+LINK_ENTITY_TO_CLASS( tf_pda_expansion_dispenser, CTFWeaponPDAExpansion_Dispenser );
+IMPLEMENT_NETWORKCLASS_ALIASED( TFWeaponPDAExpansion_Dispenser, DT_TFWeaponPDAExpansion_Dispenser )
+
+// Network Table --
+BEGIN_NETWORK_TABLE( CTFWeaponPDAExpansion_Dispenser, DT_TFWeaponPDAExpansion_Dispenser )
+END_NETWORK_TABLE()
+// -- Network Table
+
+// Data Desc --
+BEGIN_DATADESC( CTFWeaponPDAExpansion_Dispenser )
+END_DATADESC()
+
+//************************************************************************************************
+LINK_ENTITY_TO_CLASS( tf_pda_expansion_teleporter, CTFWeaponPDAExpansion_Teleporter );
+IMPLEMENT_NETWORKCLASS_ALIASED( TFWeaponPDAExpansion_Teleporter, DT_TFWeaponPDAExpansion_Teleporter )
+
+// Network Table --
+BEGIN_NETWORK_TABLE( CTFWeaponPDAExpansion_Teleporter, DT_TFWeaponPDAExpansion_Teleporter )
+END_NETWORK_TABLE()
+// -- Network Table
+
+// Data Desc --
+BEGIN_DATADESC( CTFWeaponPDAExpansion_Teleporter )
+END_DATADESC()
+
+
+CTFWeaponPDA::CTFWeaponPDA()
+{
+}
+
+
+void CTFWeaponPDA::Spawn()
+{
+ BaseClass::Spawn();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: cancel menu
+//-----------------------------------------------------------------------------
+void CTFWeaponPDA::PrimaryAttack( void )
+{
+ CTFPlayer *pOwner = ToTFPlayer( GetOwner() );
+ if ( !pOwner )
+ {
+ return;
+ }
+
+ pOwner->SelectLastItem();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: toggle invis
+//-----------------------------------------------------------------------------
+void CTFWeaponPDA::SecondaryAttack( void )
+{
+ // semi-auto behaviour
+ if ( m_bInAttack2 )
+ return;
+
+ // Get the player owning the weapon.
+ CTFPlayer *pPlayer = ToTFPlayer( GetPlayerOwner() );
+ if ( !pPlayer )
+ return;
+
+ pPlayer->DoClassSpecialSkill();
+
+ m_bInAttack2 = true;
+
+ m_flNextSecondaryAttack = gpGlobals->curtime + 0.5;
+}
+
+#if !defined( CLIENT_DLL )
+
+ void CTFWeaponPDA::Precache()
+ {
+ BaseClass::Precache();
+ PrecacheVGuiScreen( GetPanelName() );
+ }
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Gets info about the control panels
+ //-----------------------------------------------------------------------------
+ void CTFWeaponPDA::GetControlPanelInfo( int nPanelIndex, const char *&pPanelName )
+ {
+ pPanelName = GetPanelName();
+ }
+
+#else
+
+ float CTFWeaponPDA::CalcViewmodelBob( void )
+ {
+ // no bob
+ return BaseClass::CalcViewmodelBob();
+ }
+
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Output : Returns true on success, false on failure.
+//-----------------------------------------------------------------------------
+bool CTFWeaponPDA::ShouldShowControlPanels( void )
+{
+ return true;
+}
+
+#ifdef CLIENT_DLL
+void CTFWeaponPDA::OnDataChanged( DataUpdateType_t type )
+{
+ if ( m_iState != m_iOldState && GetOwner() == C_TFPlayer::GetLocalTFPlayer() )
+ {
+ // Was active, now not
+ if ( m_iOldState == WEAPON_IS_ACTIVE && m_iState != m_iOldState )
+ {
+ CHudBaseBuildMenu *pBuildMenu = GetBuildMenu();
+ Assert( pBuildMenu );
+ if ( pBuildMenu )
+ {
+ pBuildMenu->SetBuilderEquipped( false );
+ }
+ }
+ else if ( m_iState == WEAPON_IS_ACTIVE && m_iOldState == WEAPON_IS_CARRIED_BY_PLAYER ) // Was inactive, now is
+ {
+ CHudBaseBuildMenu *pBuildMenu = GetBuildMenu();
+ Assert( pBuildMenu );
+ if ( pBuildMenu )
+ {
+ pBuildMenu->SetBuilderEquipped( true );
+ }
+ }
+ }
+
+ BaseClass::OnDataChanged( type );
+}
+
+
+void CTFWeaponPDA::UpdateOnRemove()
+{
+ CHudBaseBuildMenu *pBuildMenu = GetBuildMenu();
+ Assert( pBuildMenu );
+ if ( pBuildMenu )
+ {
+ pBuildMenu->SetBuilderEquipped( false );
+ }
+ return BaseClass::UpdateOnRemove();
+}
+
+#endif
+
+//==============================
+
+IMPLEMENT_NETWORKCLASS_ALIASED( TFWeaponPDA_Engineer_Build, DT_TFWeaponPDA_Engineer_Build )
+
+BEGIN_NETWORK_TABLE( CTFWeaponPDA_Engineer_Build, DT_TFWeaponPDA_Engineer_Build )
+END_NETWORK_TABLE()
+
+BEGIN_PREDICTION_DATA( CTFWeaponPDA_Engineer_Build )
+END_PREDICTION_DATA()
+
+LINK_ENTITY_TO_CLASS( tf_weapon_pda_engineer_build, CTFWeaponPDA_Engineer_Build );
+PRECACHE_WEAPON_REGISTER( tf_weapon_pda_engineer_build );
+
+#ifdef CLIENT_DLL
+CHudBaseBuildMenu *CTFWeaponPDA_Engineer_Build::GetBuildMenu() const
+{
+ return GET_HUDELEMENT( CHudMenuEngyBuild );
+}
+#endif // CLIENT_DLL
+
+
+//==============================
+
+IMPLEMENT_NETWORKCLASS_ALIASED( TFWeaponPDA_Engineer_Destroy, DT_TFWeaponPDA_Engineer_Destroy )
+
+BEGIN_NETWORK_TABLE( CTFWeaponPDA_Engineer_Destroy, DT_TFWeaponPDA_Engineer_Destroy )
+END_NETWORK_TABLE()
+
+BEGIN_PREDICTION_DATA( CTFWeaponPDA_Engineer_Destroy )
+END_PREDICTION_DATA()
+
+LINK_ENTITY_TO_CLASS( tf_weapon_pda_engineer_destroy, CTFWeaponPDA_Engineer_Destroy );
+PRECACHE_WEAPON_REGISTER( tf_weapon_pda_engineer_destroy );
+
+#ifdef CLIENT_DLL
+CHudBaseBuildMenu *CTFWeaponPDA_Engineer_Destroy::GetBuildMenu() const
+{
+ return GET_HUDELEMENT( CHudMenuEngyDestroy );
+}
+#endif // CLIENT_DLL
+
+//==============================
+
+IMPLEMENT_NETWORKCLASS_ALIASED( TFWeaponPDA_Spy, DT_TFWeaponPDA_Spy )
+
+BEGIN_NETWORK_TABLE( CTFWeaponPDA_Spy, DT_TFWeaponPDA_Spy )
+END_NETWORK_TABLE()
+
+BEGIN_PREDICTION_DATA( CTFWeaponPDA_Spy )
+END_PREDICTION_DATA()
+
+LINK_ENTITY_TO_CLASS( tf_weapon_pda_spy, CTFWeaponPDA_Spy );
+PRECACHE_WEAPON_REGISTER( tf_weapon_pda_spy );
+
+#ifdef CLIENT_DLL
+CHudBaseBuildMenu *CTFWeaponPDA_Spy::GetBuildMenu() const
+{
+ return GET_HUDELEMENT( CHudMenuSpyDisguise );
+}
+#endif // CLIENT_DLL
+
+#ifdef STAGING_ONLY
+//==============================
+
+IMPLEMENT_NETWORKCLASS_ALIASED( TFWeaponPDA_Spy_Build, DT_TFWeaponPDA_Spy_Build )
+
+BEGIN_NETWORK_TABLE( CTFWeaponPDA_Spy_Build, DT_TFWeaponPDA_Spy_Build )
+END_NETWORK_TABLE()
+
+BEGIN_PREDICTION_DATA( CTFWeaponPDA_Spy_Build )
+END_PREDICTION_DATA()
+
+LINK_ENTITY_TO_CLASS( tf_weapon_pda_spy_build, CTFWeaponPDA_Spy_Build );
+PRECACHE_WEAPON_REGISTER( tf_weapon_pda_spy_build );
+
+#ifdef CLIENT_DLL
+CHudBaseBuildMenu *CTFWeaponPDA_Spy_Build::GetBuildMenu() const
+{
+ return GET_HUDELEMENT( CHudMenuSpyBuild );
+}
+#endif // CLIENT_DLL
+#endif // STAGING_ONLY
+
+//==============================
+
+void CTFWeaponPDA_Spy::ItemPreFrame( void )
+{
+ BaseClass::ItemPreFrame();
+
+ ProcessDisguiseImpulse();
+ CheckDisguiseTimer();
+}
+
+void CTFWeaponPDA_Spy::ItemBusyFrame( void )
+{
+ BaseClass::ItemBusyFrame();
+
+ ProcessDisguiseImpulse();
+ CheckDisguiseTimer();
+}
+
+void CTFWeaponPDA_Spy::ItemHolsterFrame( void )
+{
+ BaseClass::ItemHolsterFrame();
+
+ ProcessDisguiseImpulse();
+ CheckDisguiseTimer();
+}
+
+void CTFWeaponPDA_Spy::ProcessDisguiseImpulse( void )
+{
+ CTFPlayer *pPlayer = ToTFPlayer( GetPlayerOwner() );
+ if ( !pPlayer )
+ return;
+
+ pPlayer->m_Shared.ProcessDisguiseImpulse( pPlayer );
+}
+
+void CTFWeaponPDA_Spy::CheckDisguiseTimer( void )
+{
+ /*
+ // Get the player owning the weapon.
+ CTFPlayer *pPlayer = ToTFPlayer( GetPlayerOwner() );
+ if ( !pPlayer )
+ return;
+
+ if ( pPlayer->m_Shared.InCond( TF_COND_DISGUISING ) )
+ {
+ if ( gpGlobals->curtime > pPlayer->m_Shared.GetDisguiseCompleteTime() )
+ {
+ pPlayer->m_Shared.CompleteDisguise();
+ }
+ }
+ */
+}
+
+#ifdef CLIENT_DLL
+
+bool CTFWeaponPDA_Spy::Deploy( void )
+{
+ bool bDeploy = BaseClass::Deploy();
+
+ if ( bDeploy )
+ {
+ // let the spy pda menu know to reset
+ IGameEvent *event = gameeventmanager->CreateEvent( "spy_pda_reset" );
+ if ( event )
+ {
+ gameeventmanager->FireEventClientSide( event );
+ }
+ }
+
+ return bDeploy;
+}
+
+#endif
+
+
+bool CTFWeaponPDA_Spy::CanBeSelected( void )
+{
+ CTFPlayer *pOwner = ToTFPlayer( GetOwner() );
+ if ( pOwner && !pOwner->CanDisguise() )
+ {
+ return false;
+ }
+
+ return BaseClass::CanBeSelected();
+}
+
+
+bool CTFWeaponPDA_Spy::VisibleInWeaponSelection( void )
+{
+ if ( !CanBeSelected() )
+ return false;
+
+ return BaseClass::VisibleInWeaponSelection();
+}
+
+
+//-----------------------------------------------------------------------------
+// PDA Expansion Slots
+void CTFWeaponPDAExpansion_Dispenser::Equip( CBasePlayer *pOwner )
+{
+#ifdef GAME_DLL
+ CTFPlayer *pPlayer = ToTFPlayer( pOwner );
+ if ( pPlayer )
+ {
+ // Detonate
+ CBaseObject *pObject = pPlayer->GetObjectOfType( OBJ_DISPENSER );
+ if ( pObject )
+ {
+ pObject->DetonateObject();
+ }
+ }
+#endif
+ BaseClass::Equip( pOwner );
+}
+//-----------------------------------------------------------------------------
+void CTFWeaponPDAExpansion_Dispenser::UnEquip( CBasePlayer *pOwner )
+{
+#ifdef GAME_DLL
+ CTFPlayer *pPlayer = ToTFPlayer( pOwner );
+ if ( pPlayer )
+ {
+ // Detonate
+ CBaseObject *pObject = pPlayer->GetObjectOfType( OBJ_DISPENSER );
+ if ( pObject )
+ {
+ pObject->DetonateObject();
+ }
+ }
+#endif
+ BaseClass::UnEquip( pOwner );
+}
+
+//-----------------------------------------------------------------------------
+void CTFWeaponPDAExpansion_Teleporter::Equip( CBasePlayer *pOwner )
+{
+#ifdef GAME_DLL
+ CTFPlayer *pPlayer = ToTFPlayer( pOwner );
+ if ( pPlayer )
+ {
+ // Detonate entrance and exit
+ CBaseObject *pObject = pPlayer->GetObjectOfType( OBJ_TELEPORTER, 0 );
+ if ( pObject )
+ {
+ pObject->DetonateObject();
+ }
+ pObject = pPlayer->GetObjectOfType( OBJ_TELEPORTER, 1 );
+ if ( pObject )
+ {
+ pObject->DetonateObject();
+ }
+
+ pObject = pPlayer->GetObjectOfType( OBJ_TELEPORTER, 2 );
+ if ( pObject )
+ {
+ pObject->DetonateObject();
+ }
+ pObject = pPlayer->GetObjectOfType( OBJ_TELEPORTER, 3 );
+ if ( pObject )
+ {
+ pObject->DetonateObject();
+ }
+ }
+#endif
+ BaseClass::Equip( pOwner );
+}
+//-----------------------------------------------------------------------------
+void CTFWeaponPDAExpansion_Teleporter::UnEquip( CBasePlayer *pOwner )
+{
+#ifdef GAME_DLL
+ CTFPlayer *pPlayer = ToTFPlayer( pOwner );
+ if ( pPlayer )
+ {
+ // Detonate entrance and exit
+ CBaseObject *pObject = pPlayer->GetObjectOfType( OBJ_TELEPORTER, 0 );
+ if ( pObject )
+ {
+ pObject->DetonateObject();
+ }
+ pObject = pPlayer->GetObjectOfType( OBJ_TELEPORTER, 1 );
+ if ( pObject )
+ {
+ pObject->DetonateObject();
+ }
+
+ pObject = pPlayer->GetObjectOfType( OBJ_TELEPORTER, 2 );
+ if ( pObject )
+ {
+ pObject->DetonateObject();
+ }
+ pObject = pPlayer->GetObjectOfType( OBJ_TELEPORTER, 3 );
+ if ( pObject )
+ {
+ pObject->DetonateObject();
+ }
+ }
+#endif
+ BaseClass::UnEquip( pOwner );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Check if we should show the "destroy" panel
+//-----------------------------------------------------------------------------
+bool CTFWeaponPDA_Engineer_Destroy::VisibleInWeaponSelection( void )
+{
+ if ( IsConsole()
+#ifdef CLIENT_DLL
+ || ::input->IsSteamControllerActive()
+ || tf_build_menu_controller_mode.GetBool()
+#endif
+ )
+ {
+ return false;
+ }
+
+ return BaseClass::VisibleInWeaponSelection();
+}
+
+
+
+#ifdef STAGING_ONLY
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+bool CTFWeaponPDA_Spy_Build::CanDeploy( void )
+{
+ if ( !TFGameRules() || !TFGameRules()->GameModeUsesUpgrades() )
+ return false;
+
+ CTFPlayer *pPlayer = GetTFPlayerOwner();
+ if ( !pPlayer || !pPlayer->m_Shared.CanBuildSpyTraps() )
+ return false;
+
+ return BaseClass::CanDeploy();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: UI Progress
+//-----------------------------------------------------------------------------
+float CTFWeaponPDA_Spy_Build::GetProgress( void )
+{
+ CTFPlayer *pPlayer = GetTFPlayerOwner();
+ if ( !pPlayer )
+ return 0.f;
+
+ return pPlayer->m_Shared.GetRageMeter() / 100.0f;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+bool CTFWeaponPDA_Spy_Build::VisibleInWeaponSelection( void )
+{
+ if ( !BaseClass::VisibleInWeaponSelection() )
+ return false;
+
+ return TFGameRules() && TFGameRules()->GameModeUsesUpgrades();
+}
+#endif // STAGING_ONLY \ No newline at end of file