Files
GTASource/game/vehicleAi/task/TaskVehicleApproach.h
expvintl 419f2e4752 init
2025-02-23 17:40:52 +08:00

113 lines
2.5 KiB
C++

#ifndef TASK_VEHICLE_APPROACH_H
#define TASK_VEHICLE_APPROACH_H
// Rage headers
#include "fwutil/Flags.h"
#include "fwvehicleai/pathfindtypes.h"
#include "system/bit.h"
// Game headers
#include "Task/System/Task.h"
#include "Task/System/TaskHelpers.h"
#include "Task/System/Tuning.h"
#include "VehicleAi/task/TaskVehicleMissionBase.h"
//=========================================================================
// CTaskVehicleApproach
//=========================================================================
class CTaskVehicleApproach : public CTaskVehicleMissionBase
{
public:
enum State
{
State_Start = 0,
State_ApproachTarget,
State_ApproachClosestRoadNode,
State_Wait,
State_Finish,
};
private:
enum RunningFlags
{
RF_ClosestRoadNodeChanged = BIT0,
};
public:
struct Tunables : public CTuning
{
Tunables();
float m_MaxDistanceAroundClosestRoadNode;
PAR_PARSABLE;
};
public:
CTaskVehicleApproach(const sVehicleMissionParams& rParams);
virtual ~CTaskVehicleApproach();
public:
bool GetTargetPosition(Vec3V_InOut vPosition) const;
public:
#if !__FINAL
void Debug() const;
friend class CTaskClassInfoManager;
static const char* GetStaticStateName(s32);
#endif // !__FINAL
// network:
virtual bool IsSyncedAcrossNetwork() const { return true; }
virtual CTaskVehicleSerialiserBase* GetTaskSerialiser() const { return rage_new CTaskVehicleSerialiser<CTaskVehicleApproach>; }
private:
virtual aiTask* Copy() const;
virtual s32 GetTaskTypeInternal() const { return CTaskTypes::TASK_VEHICLE_APPROACH; }
virtual s32 GetDefaultStateAfterAbort() const { return State_Finish; }
virtual FSM_Return ProcessPreFSM();
virtual FSM_Return UpdateFSM(const s32 iState, const FSM_Event iEvent);
private:
FSM_Return Start_OnUpdate();
void ApproachTarget_OnEnter();
FSM_Return ApproachTarget_OnUpdate();
void ApproachClosestRoadNode_OnEnter();
FSM_Return ApproachClosestRoadNode_OnUpdate();
void Wait_OnEnter();
FSM_Return Wait_OnUpdate();
private:
bool FindClosestRoadNodeFromDispatch(CNodeAddress& rClosestRoadNode) const;
bool FindClosestRoadNodeFromHelper(CNodeAddress& rClosestRoadNode);
bool GeneratePositionNearClosestRoadNode(Vec3V_InOut vPosition) const;
bool GenerateRandomPositionNearClosestRoadNode(Vec3V_InOut vPosition) const;
void ProcessClosestRoadNode();
void UpdateCruiseSpeed();
private:
CFindNearestCarNodeHelper m_FindNearestCarNodeHelper;
CNodeAddress m_ClosestRoadNode;
fwFlags8 m_uRunningFlags;
private:
static Tunables sm_Tunables;
};
#endif