summaryrefslogtreecommitdiff
path: root/game/server/tf/halloween/halloween_base_boss.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/server/tf/halloween/halloween_base_boss.h')
-rw-r--r--game/server/tf/halloween/halloween_base_boss.h109
1 files changed, 109 insertions, 0 deletions
diff --git a/game/server/tf/halloween/halloween_base_boss.h b/game/server/tf/halloween/halloween_base_boss.h
new file mode 100644
index 0000000..3cb6c03
--- /dev/null
+++ b/game/server/tf/halloween/halloween_base_boss.h
@@ -0,0 +1,109 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+// halloween_boss_base.h
+// Shared code for the Halloween Bosses
+// Michael Booth, October 2011
+
+#ifndef HALLOWEEN_BOSS_BASE_H
+#define HALLOWEEN_BOSS_BASE_H
+
+#include "tf_shareddefs.h"
+#include "NextBot.h"
+#include "NextBotBehavior.h"
+#include "NextBotGroundLocomotion.h"
+#include "headless_hatman_body.h"
+#include "Path/NextBotPathFollow.h"
+
+
+class CTFPlayer;
+
+
+//----------------------------------------------------------------------------
+class CHalloweenBaseBoss : public NextBotCombatCharacter
+{
+public:
+ DECLARE_CLASS( CHalloweenBaseBoss, NextBotCombatCharacter );
+
+ CHalloweenBaseBoss();
+ virtual ~CHalloweenBaseBoss();
+
+ virtual void Spawn( void );
+ virtual int OnTakeDamage( const CTakeDamageInfo &rawInfo ) OVERRIDE;
+ virtual int OnTakeDamage_Alive( const CTakeDamageInfo &info );
+ virtual void Event_Killed( const CTakeDamageInfo &info ) OVERRIDE;
+ virtual void UpdateOnRemove();
+
+ virtual void Update( void );
+
+ void Break( void ); // bust into gibs
+
+ struct AttackerInfo
+ {
+ CHandle< CTFPlayer > m_attacker;
+ float m_timestamp;
+ bool m_wasLastHitFromMeleeWeapon;
+ };
+ const CUtlVector< AttackerInfo > &GetAttackerVector( void ) const;
+ void RememberAttacker( CTFPlayer *player, bool wasMeleeHit, float damage );
+
+ bool WasSpawnedByCheats( void ) const;
+
+ virtual float GetCritInjuryMultiplier( void ) const; // when we are hit by a crit, damage is mutiplied by this
+
+ float GetInjuryRate( void ) const; // return average recent damage taken per second
+ float GetMaxInjuryRate( void ) const; // return maximum damage taken per second
+
+ virtual int GetLevel() const { return 0; }
+
+ virtual HalloweenBossType GetBossType() const { return HALLOWEEN_BOSS_INVALID; }
+ static CHalloweenBaseBoss* SpawnBossAtPos( HalloweenBossType bossType, const Vector& vSpawnPos, int nTeam = TF_TEAM_HALLOWEEN, CBaseEntity* pOwner = NULL );
+
+ bool IsSpell() const { return GetTeamNumber() != TF_TEAM_HALLOWEEN; }
+
+ enum HalloweenStatsEventType
+ {
+ HALLOWEEN_EVENT_BOSS_SPAWN = 0,
+ };
+
+private:
+ CUtlVector< AttackerInfo > m_attackerVector; // list of everyone who injured me, and when
+
+ void UpdateDamagePerSecond( void );
+ struct DamageRateInfo
+ {
+ float m_timestamp;
+ float m_damage;
+ };
+ CUtlVector< DamageRateInfo > m_damageVector;
+
+ float m_damagePerSecond;
+ float m_maxDamagePerSecond;
+
+ bool m_wasSpawnedByCheats;
+};
+
+inline float CHalloweenBaseBoss::GetInjuryRate( void ) const
+{
+ return m_damagePerSecond;
+}
+
+inline float CHalloweenBaseBoss::GetMaxInjuryRate( void ) const
+{
+ return m_maxDamagePerSecond;
+}
+
+inline float CHalloweenBaseBoss::GetCritInjuryMultiplier( void ) const
+{
+ return TF_DAMAGE_CRIT_MULTIPLIER;
+}
+
+inline bool CHalloweenBaseBoss::WasSpawnedByCheats( void ) const
+{
+ return m_wasSpawnedByCheats;
+}
+
+inline const CUtlVector< CHalloweenBaseBoss::AttackerInfo > &CHalloweenBaseBoss::GetAttackerVector( void ) const
+{
+ return m_attackerVector;
+}
+
+#endif // HALLOWEEN_BOSS_BASE_H