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.
113 lines
3.5 KiB
113 lines
3.5 KiB
1 year ago
|
#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
|