1
This commit is contained in:
542
game/shared/tf/tf_weapon_pda.cpp
Normal file
542
game/shared/tf/tf_weapon_pda.cpp
Normal file
@ -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
|
Reference in New Issue
Block a user