diff options
Diffstat (limited to 'game/server/tf/halloween/halloween_base_boss.h')
| -rw-r--r-- | game/server/tf/halloween/halloween_base_boss.h | 109 |
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 |