diff options
Diffstat (limited to 'game/server/tf/halloween/halloween_behavior/headless_hatman_attack.h')
| -rw-r--r-- | game/server/tf/halloween/halloween_behavior/headless_hatman_attack.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/game/server/tf/halloween/halloween_behavior/headless_hatman_attack.h b/game/server/tf/halloween/halloween_behavior/headless_hatman_attack.h new file mode 100644 index 0000000..d54ae80 --- /dev/null +++ b/game/server/tf/halloween/halloween_behavior/headless_hatman_attack.h @@ -0,0 +1,54 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// headless_hatman_attack.h +// Halloween Boss chase and attack behavior +// Michael Booth, October 2010 + +#ifndef HEADLESS_HATMAN_ATTACK_H +#define HEADLESS_HATMAN_ATTACK_H + +//--------------------------------------------------------------------------------------------- +//--------------------------------------------------------------------------------------------- +class CHeadlessHatmanAttack : public Action< CHeadlessHatman > +{ +public: + virtual ActionResult< CHeadlessHatman > OnStart( CHeadlessHatman *me, Action< CHeadlessHatman > *priorAction ); + virtual ActionResult< CHeadlessHatman > Update( CHeadlessHatman *me, float interval ); + + virtual EventDesiredResult< CHeadlessHatman > OnStuck( CHeadlessHatman *me ); + virtual EventDesiredResult< CHeadlessHatman > OnContact( CHeadlessHatman *me, CBaseEntity *other, CGameTrace *result = NULL ); + + virtual const char *GetName( void ) const { return "Attack"; } // return name of this action + +private: + PathFollower m_path; + + Vector m_homePos; + CountdownTimer m_homePosRecalcTimer; + void RecomputeHomePosition( void ); + + CountdownTimer m_axeSwingTimer; + CountdownTimer m_attackTimer; + CountdownTimer m_laughTimer; + CountdownTimer m_scareTimer; + CountdownTimer m_warnITTimer; + CountdownTimer m_footfallTimer; + + void AttackTarget( CHeadlessHatman *me, CBaseCombatCharacter *pTarget, float flAttackRange ); + void UpdateAxeSwing( CHeadlessHatman *me ); + bool IsSwingingAxe( void ) const; + + CHandle< CTFPlayer > m_closestVisible; + + CHandle< CTFPlayer > m_lastIT; + CountdownTimer m_chaseVictimTimer; + void ValidateChaseVictim( CHeadlessHatman *me ); + bool IsPotentiallyChaseable( CHeadlessHatman *me, CTFPlayer *victim ); + + CHandle< CBaseCombatCharacter > m_attackTarget; // the victim I'm momentarily attacking + CountdownTimer m_attackTargetFocusTimer; + void SelectVictim( CHeadlessHatman *me ); +}; + + + +#endif // HEADLESS_HATMAN_ATTACK_H |