//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef TF_WEAPON_BUILDER_H #define TF_WEAPON_BUILDER_H #ifdef _WIN32 #pragma once #endif #include "tf_weaponbase.h" class CBaseObject; //========================================================= // Builder Weapon //========================================================= class CTFWeaponBuilder : public CTFWeaponBase { DECLARE_CLASS( CTFWeaponBuilder, CTFWeaponBase ); public: CTFWeaponBuilder(); ~CTFWeaponBuilder(); DECLARE_SERVERCLASS(); virtual void SetSubType( int iSubType ); virtual void SetObjectMode( int iMode ) { m_iObjectMode = iMode; } virtual void Precache( void ); virtual bool CanDeploy( void ); virtual bool Holster( CBaseCombatWeapon *pSwitchingTo = NULL ); virtual void ItemPostFrame( void ); virtual void PrimaryAttack( void ); virtual void SecondaryAttack( void ); virtual void WeaponIdle( void ); virtual bool Deploy( void ); virtual Activity GetDrawActivity( void ); virtual const char *GetViewModel( int iViewModel ) const; virtual const char *GetWorldModel( void ) const; virtual bool AllowsAutoSwitchTo( void ) const; virtual int GetType( void ) { return m_iObjectType; } virtual Activity TranslateViewmodelHandActivity( Activity actBase ); void SetCurrentState( int iState ); void SwitchOwnersWeaponToLast(); // Placement void StartPlacement( void ); void StopPlacement( void ); void UpdatePlacementState( void ); // do a check for valid placement bool IsValidPlacement( void ); // is this a valid placement pos? // Building void StartBuilding( void ); // Special P Sapper (Wheatley) Item void WheatleySapperIdle( CTFPlayer *pOwner ); bool IsWheatleySapper( void ); void WheatleyReset( bool bResetIntro = false ); void SetWheatleyState( int iNewState ); float WheatleyEmitSound( const char *snd , bool bEmitToAll = false, bool bNoRepeats = false ); bool IsWheatleyTalking( void ); void WheatleyDamage( void ); int GetWheatleyIdleWait(); // Selection bool HasAmmo( void ); int GetSlot( void ) const; int GetPosition( void ) const; const char *GetPrintName( void ) const; bool CanBuildObjectType( int iObjectType ); void SetObjectTypeAsBuildable( int iObjectType ); virtual int GetWeaponID( void ) const { return TF_WEAPON_BUILDER; } virtual void WeaponReset( void ); virtual float InternalGetEffectBarRechargeTime( void ) { return 15.0; } virtual int GetEffectBarAmmo( void ) { return TF_AMMO_GRENADES2; } public: CNetworkVar( int, m_iBuildState ); CNetworkVar( unsigned int, m_iObjectType ); CNetworkVar( unsigned int, m_iObjectMode ); CNetworkVar( bool, m_bRoboSapper ); CNetworkVar( float, m_flWheatleyTalkingUntil ); CNetworkArray( bool, m_aBuildableObjectTypes, OBJ_LAST ); CNetworkHandle( CBaseObject, m_hObjectBeingBuilt ); int m_iValidBuildPoseParam; float m_flNextDenySound; // P Sapper (Wheatley) float m_flNextVoicePakIdleStartTime; KeyValues *m_pkvWavList; int m_iSapState; float m_flWheatleyLastDamage; float m_flWheatleyLastDeploy; float m_flWheatleyLastHolster; int m_iWheatleyVOSequenceOffset; bool m_bWheatleyIntroPlayed; EHANDLE m_hLastSappedBuilding; Vector m_vLastKnownSapPos; private: bool m_bAttack3Down; }; // P Sapper (Wheatley) States enum { TF_PSAPSTATE_IDLE = 0, TF_PSAPSTATE_WAITINGHACK, TF_PSAPSTATE_WAITINGHACKPW, TF_PSAPSTATE_WAITINGHACKED, TF_PSAPSTATE_WAITINGFOLLOWUP, TF_PSAPSTATE_SPECIALIDLE_KNIFE, TF_PSAPSTATE_SPECIALIDLE_HARMLESS, TF_PSAPSTATE_SPECIALIDLE_HACK, TF_PSAPSTATE_INTRO, }; //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- class CTFWeaponSapper : public CTFWeaponBuilder, public ITFChargeUpWeapon { public: DECLARE_CLASS( CTFWeaponSapper, CTFWeaponBuilder ); DECLARE_SERVERCLASS(); //DECLARE_PREDICTABLE(); CTFWeaponSapper(); virtual void ItemPostFrame( void ); // ITFChargeUpWeapon virtual bool CanCharge( void ) { return GetChargeMaxTime() > 0; } virtual float GetChargeBeginTime( void ) { return m_flChargeBeginTime; } virtual float GetChargeMaxTime( void ) { float flChargeTime = 0; CALL_ATTRIB_HOOK_FLOAT( flChargeTime, sapper_deploy_time ); return flChargeTime; }; virtual const char *GetViewModel( int iViewModel ) const; virtual const char *GetWorldModel( void ) const; virtual Activity TranslateViewmodelHandActivity( Activity actBase ); private: //float m_flChargeBeginTime; bool m_bAttackDown; CNetworkVar( float, m_flChargeBeginTime ); }; #define WHEATLEY_IDLE_WAIT_SECS_MIN 10.0 #define WHEATLEY_IDLE_WAIT_SECS_MAX 20.0 #endif // TF_WEAPON_BUILDER_H