170 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //========= 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
 |