summaryrefslogtreecommitdiff
path: root/game/server/tf/halloween/halloween_behavior/headless_hatman_attack.h
diff options
context:
space:
mode:
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.h54
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