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.
112 lines
3.5 KiB
112 lines
3.5 KiB
#ifndef _INCLUDED_ASW_PARASITE_H |
|
#define _INCLUDED_ASW_PARASITE_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "asw_alien.h" |
|
#include "asw_egg.h" |
|
|
|
class CSoundPatch; |
|
class CASW_Marine; |
|
class CASW_Colonist; |
|
|
|
class CASW_Parasite : public CASW_Alien |
|
{ |
|
DECLARE_CLASS( CASW_Parasite, CASW_Alien ); |
|
public: |
|
DECLARE_SERVERCLASS(); |
|
DECLARE_DATADESC(); |
|
CASW_Parasite(); |
|
virtual ~CASW_Parasite(); |
|
|
|
void Spawn(); |
|
void Precache(); |
|
float GetIdealSpeed() const; |
|
float GetIdealAccel( ) const; |
|
float MaxYawSpeed( void ); |
|
void HandleAnimEvent( animevent_t *pEvent ); |
|
Class_T Classify( void ) { return (Class_T) CLASS_ASW_PARASITE; } |
|
virtual bool ShouldGib( const CTakeDamageInfo &info ); |
|
bool CorpseGib( const CTakeDamageInfo &info ); |
|
void BuildScheduleTestBits( void ); |
|
void GatherEnemyConditions( CBaseEntity *pEnemy ); |
|
virtual bool CanBeSeenBy( CAI_BaseNPC *pNPC ); |
|
void StartTask(const Task_t *pTask); |
|
void RunTask( const Task_t *pTask ); |
|
int SelectSchedule(); |
|
int TranslateSchedule( int scheduleType ); |
|
virtual void Event_Killed( const CTakeDamageInfo &info ); |
|
virtual int OnTakeDamage_Alive( const CTakeDamageInfo &info ); |
|
virtual void JumpAttack( bool bRandomJump, const Vector &vecPos = vec3_origin, bool bThrown = false ); |
|
void Leap( const Vector &vecVel ); |
|
int RangeAttack1Conditions( float flDot, float flDist ); |
|
virtual float InnateRange1MinRange( void ); |
|
virtual float InnateRange1MaxRange( void ); |
|
void LeapThink(); |
|
void InfestThink(); |
|
virtual void NPCThink(); |
|
void NormalTouch(CBaseEntity* pOther); |
|
void LeapTouch(CBaseEntity* pOther); |
|
int CalcDamageInfo( CTakeDamageInfo *pInfo ); |
|
void TouchDamage( CBaseEntity *pOther ); |
|
bool HasHeadroom(); |
|
void DoJumpFromEgg(); |
|
void SetJumpFromEgg(bool b, float flJumpDistance = 100.0f); |
|
bool m_bJumpFromEgg; |
|
float m_flEggJumpDistance; |
|
void IdleInEgg(bool b); |
|
CNetworkVar( bool, m_bDoEggIdle ); |
|
virtual void UpdateSleepState(bool bInPVS); |
|
Activity TranslateActivity( Activity baseAct, Activity *pIdealWeaponActivity ); |
|
void UpdatePlaybackRate(); |
|
virtual float GetSpringColRadius() { return 10.0f; } |
|
|
|
bool m_bMidJump, m_bCommittedToJump; |
|
Vector m_vecCommittedJumpPos; |
|
float m_flNextNPCThink; |
|
void SetIgnoreCollisionTime(float f) { m_flIgnoreWorldCollisionTime = f; } |
|
float m_flIgnoreWorldCollisionTime; |
|
|
|
virtual void SetHealthByDifficultyLevel(); |
|
void RunAnimation ( void ); |
|
// sounds |
|
virtual void AlertSound(); |
|
virtual void PainSound( const CTakeDamageInfo &info ); |
|
virtual void DeathSound( const CTakeDamageInfo &info ); |
|
virtual void AttackSound(); |
|
virtual void IdleSound(); |
|
virtual void PrescheduleThink(); |
|
virtual void BiteSound(); |
|
|
|
// the egg we hatched from, if any (we notify it when we die) |
|
void SetEgg(CASW_Egg* pEgg); |
|
CASW_Egg* GetEgg(); |
|
EHANDLE m_hEgg; |
|
CNetworkVar(bool, m_bStartIdleSound); |
|
|
|
// infesting |
|
void FinishedInfesting(); |
|
void InfestMarine(CASW_Marine* pMarine); |
|
void InfestColonist(CASW_Colonist* pColonist); |
|
CNetworkVar(bool, m_bInfesting); |
|
bool m_bDefanged; // if the parasite is defanged, he won't infest, just do melee damage on contact |
|
|
|
// parasites can be spawned by a parent Harvester, who wishes to be notified when we die |
|
EHANDLE m_hMother; |
|
virtual void SetMother(CASW_Alien* spawner); |
|
CASW_Alien* GetMother(); |
|
float m_fSuicideTime; // harvesites don't hang around for ever, but pop after a while if they're not in combat |
|
|
|
static float s_fNextSpottedChatterTime; |
|
static float s_fLastHarvesiteAttackSound; |
|
|
|
void StartInfestation(); |
|
bool CheckInfestTarget( CBaseEntity *pOther ); |
|
EHANDLE m_hPrepareToInfest; |
|
|
|
protected: |
|
DEFINE_CUSTOM_AI; |
|
}; |
|
|
|
#endif // _INCLUDED_ASW_PARASITE_H
|
|
|