You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
2.9 KiB
109 lines
2.9 KiB
//========= 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
|
|
|