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.
152 lines
3.4 KiB
152 lines
3.4 KiB
//========== Copyright © 2008, Valve Corporation, All rights reserved. ========
|
|
//
|
|
// Purpose:
|
|
//
|
|
//=============================================================================
|
|
|
|
#ifndef AI_BEHAVIOR_FIGHTFROMCOVER_H
|
|
#define AI_BEHAVIOR_FIGHTFROMCOVER_H
|
|
|
|
#if defined( _WIN32 )
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "ai_goalentity.h"
|
|
#include "ai_behavior.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
class CAI_FightFromCoverGoal : public CAI_GoalEntity
|
|
{
|
|
DECLARE_CLASS( CAI_FightFromCoverGoal, CAI_GoalEntity );
|
|
|
|
public:
|
|
CAI_FightFromCoverGoal();
|
|
|
|
const Vector &GetFrontPosition();
|
|
const Vector &GetFrontDirection();
|
|
const QAngle &GetFrontAngles();
|
|
|
|
virtual void OnActivate();
|
|
virtual void OnDeactivate();
|
|
|
|
virtual void EnableGoal( CAI_BaseNPC *pAI );
|
|
virtual void DisableGoal( CAI_BaseNPC *pAI );
|
|
|
|
void FrontThink();
|
|
|
|
virtual void ResolveNames();
|
|
|
|
void InputSetDirectionalMarker( inputdata_t &inputdata );
|
|
|
|
void BeginMovingFront();
|
|
void EndMovingFront();
|
|
|
|
int DrawDebugTextOverlays();
|
|
|
|
string_t m_DirectionalMarker;
|
|
string_t m_GenericHintType;
|
|
|
|
EHANDLE m_hDirectionalMarker;
|
|
float m_WidthZone;
|
|
float m_LengthZone;
|
|
float m_HeightZone;
|
|
float m_BiasZone;
|
|
|
|
Vector m_vFront;
|
|
Vector m_vDir;
|
|
|
|
DECLARE_DATADESC();
|
|
};
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
class CAI_FightFromCoverBehavior : public CAI_SimpleBehavior
|
|
{
|
|
DECLARE_CLASS( CAI_FightFromCoverBehavior, CAI_SimpleBehavior );
|
|
DECLARE_DATADESC();
|
|
DEFINE_CUSTOM_SCHEDULE_PROVIDER;
|
|
public:
|
|
|
|
CAI_FightFromCoverBehavior();
|
|
|
|
void SetGoal( CAI_FightFromCoverGoal *pGoal );
|
|
void ClearGoal();
|
|
|
|
private:
|
|
|
|
struct Animation_t
|
|
{
|
|
Animation_t() { Reset(); }
|
|
void Reset() { bActivity = true; id = ACT_INVALID; }
|
|
|
|
bool bActivity;
|
|
int id;
|
|
};
|
|
|
|
void OnRestore() { UpdateAnimationsFromHint(); }
|
|
|
|
void GatherConditions();
|
|
|
|
bool CanSelectSchedule();
|
|
int SelectSchedule();
|
|
|
|
void StartTask( const Task_t *pTask );
|
|
void RunTask( const Task_t *pTask );
|
|
|
|
bool StartAnimationTask( const Animation_t &animation, bool bReset = false, Activity defaultActivity = ACT_IDLE );
|
|
|
|
bool FValidateHintType ( CAI_Hint *pHint );
|
|
static bool HintSearchFilter( void *pContext, CAI_Hint *pCandidate );
|
|
|
|
bool IsPointInZone( const Vector &v );
|
|
|
|
void OnUpdateShotRegulator();
|
|
|
|
void UpdateAnimationsFromHint();
|
|
bool GetAnimation( CScriptScope &scope, const char *pszKey, Animation_t *pAnimation );
|
|
|
|
enum
|
|
{
|
|
// Schedules
|
|
SCHED_FFC_RUN_TO_HINT = BaseClass::NEXT_SCHEDULE,
|
|
SCHED_FFC_HOLD_COVER,
|
|
SCHED_FFC_PEEK,
|
|
SCHED_FFC_HOLD_PEEK,
|
|
SCHED_FFC_RELOAD,
|
|
SCHED_FFC_ATTACK,
|
|
NEXT_SCHEDULE,
|
|
|
|
// Tasks
|
|
TASK_FFC_GET_PATH_TO_HINT = BaseClass::NEXT_TASK,
|
|
TASK_FFC_COVER,
|
|
TASK_FFC_PEEK,
|
|
TASK_FFC_ATTACK,
|
|
NEXT_TASK = BaseClass::NEXT_TASK,
|
|
|
|
// Conditions
|
|
COND_FFC_HINT_CHANGE = BaseClass::NEXT_CONDITION,
|
|
NEXT_CONDITION,
|
|
};
|
|
|
|
virtual const char *GetName() { return "FightFromCover"; }
|
|
|
|
CHandle<CAI_FightFromCoverGoal> m_hGoal;
|
|
|
|
CAI_MoveMonitor m_FrontMoveMonitor;
|
|
CSimpleSimTimer m_FrontTimer;
|
|
|
|
Animation_t m_EntryAnim;
|
|
Animation_t m_MoveAnim;
|
|
Animation_t m_CoverAnim;
|
|
Animation_t m_ReloadAnim;
|
|
Animation_t m_PeekAnim;
|
|
Animation_t m_ShootAnim;
|
|
Animation_t m_ExitAnim;
|
|
};
|
|
|
|
|
|
#endif // AI_BEHAVIOR_FIGHTFROMCOVER_H
|