Files
expvintl 419f2e4752 init
2025-02-23 17:40:52 +08:00

79 lines
2.7 KiB
C++

//
// name: TaskTreeClone.h
// description:
//
#ifndef TASK_TREE_CLONE_H
#define TASK_TREE_CLONE_H
// Game headers
#include "Task/System/TaskTree.h"
#include "Peds/PedDefines.h"
namespace rage
{
class netPlayer;
}
class CTask;
class CTaskFSMClone;
class CTaskInfo;
class CTaskTreeClone : public CTaskTree
{
public:
CTaskTreeClone(fwEntity* pEntity, const s32 iNumberOfPriorities);
virtual bool ProcessPhysics(float fTimeStep, int nTimeSlice, bool nmTasksOnly);
void RecalculateTasks();
void UpdateTaskSpecificData();
bool NetworkAttachmentIsOverridden() const { return m_OverridingNetworkAttachment; }
bool NetworkBlenderIsOverridden() const { return m_OverridingNetworkBlender; }
bool NetworkHeadingBlenderIsOverridden() const { return m_OverridingNetworkHeadingBlender; }
bool NetworkCollisionIsOverridden() const { return m_OverridingNetworkCollision; }
bool NetworkLocalHitReactionsAllowed() const { return m_LocalHitReactionsAllowed; }
bool NetworkUseInAirBlender() const { return m_UseInAirBlender; }
bool ControlPassingAllowed(const netPlayer& player, eMigrationType migrationType);
//PURPOSE
// Creates a clone task of the relevant type. This will only be done
// if the queriable interface for the ped contains a task info of the
// specified type that has not already been used to create a clone task
CTaskFSMClone *CreateCloneTaskForTaskType(u32 taskType);
//TO BE REMOVED - this function needs to go - but requires too many changes to other clone tasks to do just now
CTaskFSMClone *CreateCloneTaskFromInfo(CTaskInfo *taskInfo);
// Starts a clone task locally
void StartLocalCloneTask(CTaskFSMClone* pTask, u32 const iPriority = PED_TASK_PRIORITY_DEFAULT);
CTask* GetActiveCloneTask();
bool HasPendingLocalCloneTask() const { return (m_PendingLocalCloneTask.Get() != NULL); }
// PURPOSE: returns true if the tree is a clone tree
virtual const bool IsCloneTree() const { return true; }
private:
void UpdateTasks(const bool bDontDeleteHeadTask, const s32 iDefaultTaskPriority, float fTimeStep);
aiTaskTree::UpdateResult UpdateTask(aiTask* pTask, float fTimeStep);
void OnNewSubTaskCreated(aiTask* pTask, aiTask* pSubTask);
CTaskFSMClone *CreateCloneTaskFromTaskInfo(CTaskInfo *taskInfo, bool bIgnoreSequences=false);
bool m_UpdatingTasks;
bool m_OverridingNetworkAttachment;
bool m_OverridingNetworkBlender;
bool m_OverridingNetworkHeadingBlender;
bool m_OverridingNetworkCollision;
bool m_LocalHitReactionsAllowed;
bool m_UseInAirBlender;
taskRegdRef<CTaskFSMClone> m_PendingLocalCloneTask;
};
#endif // TASK_TREE_CLONE_H