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.
177 lines
5.7 KiB
177 lines
5.7 KiB
#ifndef _DEFINED_ASW_DRONE_ADVANCED_H |
|
#define _DEFINED_ASW_DRONE_ADVANCED_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "asw_alien_jumper.h" |
|
#include "ai_blended_movement.h" |
|
#include "util_shared.h" |
|
|
|
//typedef CAI_BlendingHost< CAI_BehaviorHost<CASW_BlendedAlien> > CAI_DroneBase; |
|
|
|
class CASW_Door; |
|
class CASW_Drone_Movement; |
|
|
|
class CASW_Drone_Advanced : public CASW_Alien_Jumper |
|
{ |
|
public: |
|
|
|
DECLARE_CLASS( CASW_Drone_Advanced, CASW_Alien_Jumper ); |
|
DECLARE_SERVERCLASS(); |
|
//DECLARE_PREDICTABLE(); |
|
DECLARE_DATADESC(); |
|
CASW_Drone_Advanced( void ); |
|
virtual ~CASW_Drone_Advanced( void ); |
|
|
|
virtual void Spawn(); |
|
virtual void Precache(); |
|
CAI_Navigator* CreateNavigator(); |
|
|
|
virtual int MeleeAttack1Conditions( float flDot, float flDist ); |
|
virtual int MeleeAttack2Conditions( float flDot, float flDist ); |
|
void MeleeAttack( float distance, float damage, QAngle &viewPunch, Vector &shove ); |
|
|
|
virtual bool MovementCost( int moveType, const Vector &vecStart, const Vector &vecEnd, float *pCost ); |
|
|
|
virtual float GetIdealSpeed() const; |
|
virtual float GetIdealAccel() const; |
|
virtual float MaxYawSpeed(); |
|
virtual float GetSequenceGroundSpeed( int iSequence ); |
|
virtual bool ModifyAutoMovement( Vector &vecNewPos ); |
|
virtual bool IsNavigationUrgent(); |
|
virtual void NPCThink(); |
|
virtual Class_T Classify( void ) { return (Class_T) CLASS_ASW_DRONE; } |
|
virtual void HandleAnimEvent( animevent_t *pEvent ); |
|
virtual bool CorpseGib( const CTakeDamageInfo &info ); |
|
virtual bool IsHeavyDamage( const CTakeDamageInfo &info ); |
|
virtual void BuildScheduleTestBits( void ); |
|
virtual bool OverrideMoveFacing( const AILocalMoveGoal_t &move, float flInterval ); |
|
virtual void GatherEnemyConditions( CBaseEntity *pEnemy ); |
|
virtual Activity NPC_TranslateActivity( Activity eNewActivity ); |
|
virtual void RunTaskOverlay(); |
|
virtual void RunTask( const Task_t *pTask ); |
|
virtual bool ShouldGib( const CTakeDamageInfo &info ); |
|
virtual bool CanBreak() { return true; }; |
|
virtual bool HasDeadBodyGroup() { return true; }; |
|
virtual int OnTakeDamage_Dead( const CTakeDamageInfo &info ); |
|
virtual void Event_Killed( const CTakeDamageInfo &info ); |
|
virtual bool IsMeleeAttacking(); |
|
virtual bool ShouldStopBeforeMeleeAttack() { return !m_bHasAttacked; } |
|
bool m_bHasAttacked; |
|
//void RunAttackTask( int task ); |
|
//void ReachedEndOfSequence(); |
|
|
|
virtual bool ValidBlockingDoor(); |
|
virtual void GatherConditions(); |
|
virtual int SelectSchedule(); |
|
virtual int SelectFailSchedule( int failedSchedule, int failedTask, AI_TaskFailureCode_t taskFailCode ); |
|
virtual int SelectFlinchSchedule_ASW(); |
|
virtual void CheckFlinches(); |
|
virtual Activity GetFlinchActivity( bool bHeavyDamage, bool bGesture ); |
|
virtual int TranslateSchedule( int scheduleType ); |
|
virtual void StartTask( const Task_t *pTask ); |
|
virtual bool IsCurTaskContinuousMove(); |
|
virtual bool OnObstructionPreSteer( AILocalMoveGoal_t *pMoveGoal, |
|
float distClear, |
|
AIMoveResult_t *pResult ); |
|
virtual bool OnObstructingASWDoor( AILocalMoveGoal_t *pMoveGoal, |
|
CASW_Door *pDoor, |
|
float distClear, |
|
AIMoveResult_t *pResult ); |
|
Activity SelectDoorBash(); |
|
void SetSmallDoorBashHull(bool bSmall); |
|
bool m_bUsingSmallDoorBashHull; |
|
float LinearDistanceToDoor(); |
|
void MoveAwayFromDoor(); |
|
bool IsBehindDoor(CBaseEntity *pOther); |
|
void SetDoorBashYaw(); |
|
virtual bool ShouldClearOrdersOnMovementComplete(); |
|
int m_iDoorPos; // which part of the door we're going to head towards (0=middle, 1 and 2 are the sides) |
|
|
|
virtual void StartTouch( CBaseEntity *pOther ); |
|
float m_fLastTouchHurtTime; |
|
float m_flNextSmallFlinchTime; |
|
|
|
// sounds |
|
virtual void PainSound( const CTakeDamageInfo &info ); |
|
virtual void AlertSound(); |
|
virtual void DeathSound( const CTakeDamageInfo &info ); |
|
|
|
// overriden movement |
|
virtual bool OverrideMove( float flInterval ); |
|
virtual bool MoveExecute_Alive(float flInterval); |
|
Vector m_vecSavedVelocity; |
|
float m_flSavedSpeed; |
|
virtual bool IsMoving(); |
|
bool IsPerformingOverrideMove() const; |
|
bool m_bPerformingOverride; |
|
bool FailedOverrideMove() const; // did we get stuck last time we tried to do an override move? |
|
bool m_bFailedOverrideMove; |
|
float m_fFailedOverrideTime; |
|
virtual bool HasOverridePathTo(CBaseEntity *pEnt); |
|
bool CheckStuck(); |
|
Vector m_vecLastGoodPosition; |
|
virtual bool CanBePushedAway(); |
|
|
|
// jumping |
|
virtual bool ShouldJump(); |
|
|
|
virtual int DrawDebugTextOverlays(); |
|
|
|
virtual void SetHealthByDifficultyLevel(); |
|
|
|
static float s_fNextTooCloseChatterTime; |
|
|
|
CNetworkVar( EHANDLE, m_hAimTarget ); |
|
|
|
enum |
|
{ |
|
COND_DRONE_BLOCKED_BY_DOOR = BaseClass::NEXT_CONDITION, |
|
COND_DRONE_DOOR_OPENED, |
|
COND_DRONE_LOS, // drone has soft line of sight to his enemy |
|
COND_DRONE_GAINED_LOS, // drone didn't have soft los last think, but does now |
|
COND_DRONE_LOST_LOS, // drone had soft line of sight last think, but has lost it this think |
|
NEXT_CONDITION, |
|
}; |
|
|
|
private: |
|
CHandle< CASW_Door > m_hBlockingDoor; |
|
float m_flDoorBashYaw; |
|
bool m_bJumper; // can this drone jump? |
|
|
|
CSimTimer m_DurationDoorBash; |
|
bool m_bDoneAlienCloseChatter; // has this alien made a marine shout out in fear yet? |
|
|
|
Activity m_FlinchActivity; |
|
|
|
float m_fLastLostLOSTime; |
|
bool m_bLastSoftLOS; |
|
|
|
Vector m_vecEnemyStandoffPosition; |
|
|
|
DEFINE_CUSTOM_AI; |
|
}; |
|
|
|
enum |
|
{ |
|
TASK_DRONE_YAW_TO_DOOR = LAST_ASW_ALIEN_JUMPER_SHARED_TASK, |
|
TASK_DRONE_ATTACK_DOOR, |
|
TASK_DRONE_WAIT_FOR_OVERRIDE_MOVE, |
|
TASK_DRONE_GET_PATH_TO_DOOR, |
|
TASK_DRONE_WAIT_FOR_DOOR_MOVEMENT, |
|
TASK_DRONE_DOOR_WAIT, |
|
TASK_DRONE_GET_CIRCLE_PATH, |
|
TASK_DRONE_WAIT_FACE_ENEMY, |
|
LAST_ASW_DRONE_SHARED_TASK, |
|
}; |
|
|
|
class CDroneTraceFilterLOS : public CTraceFilterSimple |
|
{ |
|
public: |
|
CDroneTraceFilterLOS( IHandleEntity *pHandleEntity, int collisionGroup ); |
|
bool ShouldHitEntity( IHandleEntity *pServerEntity, int contentsMask ); |
|
}; |
|
|
|
|
|
#endif // _DEFINED_ASW_DRONE_ADVANCED_H
|
|
|