//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // //============================================================================= #ifndef TF_WEAPON_BAT_H #define TF_WEAPON_BAT_H #ifdef _WIN32 #pragma once #endif #include "tf_weaponbase_melee.h" #include "tf_weaponbase_grenadeproj.h" #include "tf_weapon_grenade_pipebomb.h" #include "tf_shareddefs.h" #include "tf_viewmodel.h" #ifdef CLIENT_DLL #define CTFBat C_TFBat #define CTFBat_Wood C_TFBat_Wood #define CTFBat_Fish C_TFBat_Fish #define CTFStunBall C_TFStunBall #define CTFBat_Giftwrap C_TFBat_Giftwrap #define CTFBall_Ornament C_TFBall_Ornament #endif //============================================================================= // // Bat class. // class CTFBat : public CTFWeaponBaseMelee { public: DECLARE_CLASS( CTFBat, CTFWeaponBaseMelee ); DECLARE_NETWORKCLASS(); DECLARE_PREDICTABLE(); CTFBat(); virtual int GetWeaponID( void ) const { return TF_WEAPON_BAT; } virtual bool BatDeflects() { return false; } virtual void Smack( void ); virtual void PlayDeflectionSound( bool bPlayer ); private: CTFBat( const CTFBat & ) {} }; //============================================================================= // // CTFBat_Fish class. // class CTFBat_Fish : public CTFBat { public: DECLARE_CLASS( CTFBat_Fish, CTFBat ); DECLARE_NETWORKCLASS(); DECLARE_PREDICTABLE(); virtual int GetWeaponID( void ) const { return TF_WEAPON_BAT_FISH; } }; //============================================================================= // // CTFBat_Wood class. // class CTFBat_Wood : public CTFBat { public: DECLARE_CLASS( CTFBat_Wood, CTFBat ); DECLARE_NETWORKCLASS(); DECLARE_PREDICTABLE(); CTFBat_Wood(); virtual int GetWeaponID( void ) const { return TF_WEAPON_BAT_WOOD; } virtual bool BatDeflects() { return false; } virtual void SecondaryAttack( void ); void SecondaryAttackAnim( CTFPlayer *pPlayer ); virtual bool SendWeaponAnim( int iActivity ); virtual bool CanCreateBall( CTFPlayer* pPlayer ); virtual void LaunchBall( void ); void LaunchBallThink( void ); virtual float InternalGetEffectBarRechargeTime( void ) { return 15.0; } virtual int GetEffectBarAmmo( void ) { return TF_AMMO_GRENADES1; } #ifdef GAME_DLL virtual void GetBallDynamics( Vector& vecLoc, QAngle& vecAngles, Vector& vecVelocity, AngularImpulse& angImpulse, CTFPlayer* pPlayer ); #endif #ifdef CLIENT_DLL virtual void SetWeaponVisible( bool visible ); // Child removal: virtual void Drop( const Vector &vecVelocity ); virtual void WeaponReset( void ); virtual void UpdateOnRemove( void ); virtual void OnDataChanged( DataUpdateType_t updateType ); void AddBallChild( void ); void RemoveBallChild( void ); #endif virtual void PickedUpBall( void ); float GetProgress( void ) { return GetEffectBarProgress(); } const char* GetEffectLabelText( void ) { return "#TF_BALL"; } virtual const char *GetBallViewModelName( void ) const { return "models/weapons/v_models/v_baseball.mdl"; } #ifdef GAME_DLL virtual CBaseEntity* CreateBall( void ); #endif int m_iEnemyBallID; #ifdef CLIENT_DLL EHANDLE m_hStunBallVM; // View model ball. #endif }; //============================================================================= // // StunBall class. // class CTFStunBall : public CTFGrenadePipebombProjectile { public: DECLARE_CLASS( CTFStunBall, CTFGrenadePipebombProjectile ); DECLARE_NETWORKCLASS(); #ifdef GAME_DLL CTFStunBall(); static CTFStunBall* Create( const Vector &vecOrigin, const QAngle &vecAngles, CBaseEntity *pOwner ); virtual void Precache( void ); virtual void Spawn( void ); void SetInitialSpeed( float flSpd ) { m_flInitialSpeed = flSpd; } virtual int GetWeaponID( void ) const { return TF_WEAPON_GRENADE_STUNBALL; } virtual const char *GetBallModelName( void ) const; virtual const char *GetBallViewModelName( void ) const; virtual bool IsAllowedToExplode( void ) OVERRIDE { return false; } virtual void Explode( trace_t *pTrace, int bitsDamageType ); virtual void ApplyBallImpactEffectOnVictim( CBaseEntity *pOther ); virtual void PipebombTouch( CBaseEntity *pOther ); virtual void VPhysicsCollision( int index, gamevcollisionevent_t *pEvent ); virtual float GetDamage( void ); virtual int GetDamageType( void ) { return DMG_CLUB; } virtual Vector GetDamageForce( void ); virtual float GetShakeAmplitude( void ) { return 0.0; } virtual float GetShakeRadius( void ) { return 0.0; } void RemoveBallTrail( void ); virtual bool IsDestroyable( void ) OVERRIDE { return false; } int m_iOriginalOwnerID; private: float m_flInitialSpeed; float m_flBallTrailLife; EHANDLE m_pBallTrail; #else virtual const char *GetTrailParticleName( void ); virtual void CreateTrailParticles( void ); #endif }; //============================================================================= // // Winter Holiday 2011 wrapping paper tube and glass ornament ball // class CTFBat_Giftwrap : public CTFBat_Wood { public: DECLARE_CLASS( CTFBat_Giftwrap, CTFBat_Wood ); DECLARE_NETWORKCLASS(); DECLARE_PREDICTABLE(); virtual void Spawn( void ); virtual int GetWeaponID( void ) const { return TF_WEAPON_BAT_GIFTWRAP; } virtual const char *GetEffectLabelText( void ) { return "#TF_BALL"; } virtual const char *GetBallViewModelName( void ) const { return "models/weapons/c_models/c_xms_festive_ornament.mdl"; } #ifdef GAME_DLL virtual CBaseEntity* CreateBall( void ); #endif }; //============================================================================= // // Winter Holiday 2011 wrapping paper tube and glass ornament ball // class CTFBall_Ornament : public CTFStunBall { public: DECLARE_CLASS( CTFBall_Ornament, CTFStunBall ); DECLARE_NETWORKCLASS(); #ifdef GAME_DLL static CTFBall_Ornament* Create( const Vector &vecOrigin, const QAngle &vecAngles, CBaseEntity *pOwner ); virtual void Precache( void ); virtual int GetWeaponID( void ) const { return TF_WEAPON_GRENADE_ORNAMENT_BALL; } virtual const char *GetBallModelName( void ) const; virtual const char *GetBallViewModelName( void ) const; virtual bool IsAllowedToExplode( void ) OVERRIDE { return true; } virtual void Explode( trace_t *pTrace, int bitsDamageType ) OVERRIDE; virtual void PipebombTouch( CBaseEntity *pOther ) OVERRIDE; virtual void VPhysicsCollision( int index, gamevcollisionevent_t *pEvent ) OVERRIDE; void VPhysicsCollisionThink( void ); virtual void ApplyBallImpactEffectOnVictim( CBaseEntity *pOther ); protected: Vector m_vCollisionVelocity; #endif }; #endif // TF_WEAPON_BAT_H