Plasma Engine  2.0
Loading...
Searching...
No Matches
DetourCrowdWorldModule.h
1#pragma once
2
3#include <RecastPlugin/RecastPluginDLL.h>
4
5#include <Core/World/WorldModule.h>
6
7class dtCrowd;
8class dtCrowdAgent;
10
11
13{
15 float m_fRadius;
16
18 float m_fHeight;
19
22
25
28
29 void* m_pUserData;
30
31 static inline plDetourCrowdAgentParams Default()
32 {
34 params.m_fRadius = 0.3f;
35 params.m_fHeight = 1.8f;
36 params.m_fMaxAcceleration = 10.0f;
37 params.m_fMaxSpeed = 3.5f;
38 params.m_fSeparationWeight = 2.0f;
39 params.m_pUserData = nullptr;
40 return params;
41 }
42};
43
44
45class PL_RECASTPLUGIN_DLL plDetourCrowdWorldModule : public plWorldModule
46{
47 PL_DECLARE_WORLD_MODULE();
48 PL_ADD_DYNAMIC_REFLECTION(plDetourCrowdWorldModule, plWorldModule);
49
50public:
53
54 virtual void Initialize() override;
55 virtual void Deinitialize() override;
56
57 bool IsInitializedAndReady() const;
58
59 const dtCrowdAgent* GetAgentById(plInt32 iAgentId) const;
60
62 plInt32 CreateAgent(const plVec3& vPos, const plDetourCrowdAgentParams& params);
63
64 void DestroyAgent(plInt32 iAgentId);
65
66 void SetAgentTargetPosition(plInt32 iAgentId, const plVec3& vPos, const plVec3& vQueryHalfExtents = plVec3(0.5f, 0.5f, 0.5f));
67
68 void ClearAgentTargetPosition(plInt32 iAgentId);
69
70 void UpdateAgentParams(plInt32 iAgentId, const plDetourCrowdAgentParams& params);
71
72private:
73 void UpdateNavMesh(const UpdateContext& ctx);
74 void UpdateCrowd(const UpdateContext& ctx);
75 void VisualizeCrowd(const UpdateContext& ctx);
76
77 void FillDtCrowdAgentParams(const plDetourCrowdAgentParams& params, struct dtCrowdAgentParams& out_params) const;
78
79 plInt32 m_iMaxAgents = 128;
80 float m_fMaxAgentRadius = 2.0f;
81 dtCrowd* m_pDtCrowd = nullptr;
82 plRecastWorldModule* m_pRecastModule = nullptr;
83};
Definition DetourCrowdWorldModule.h:46
Definition RecastWorldModule.h:16
A world encapsulates a scene graph of game objects and various component managers and their component...
Definition World.h:22
Definition WorldModule.h:10
virtual void Initialize()
This method is called after the constructor. A derived type can override this method to do initializa...
Definition WorldModule.h:98
virtual void Deinitialize()
This method is called before the destructor. A derived type can override this method to do deinitiali...
Definition WorldModule.h:101
Definition DetourCrowdWorldModule.h:13
float m_fMaxAcceleration
Maximum allowed acceleration. [Limit: >= 0].
Definition DetourCrowdWorldModule.h:21
float m_fHeight
Agent height. [Limit: > 0].
Definition DetourCrowdWorldModule.h:18
float m_fRadius
Agent radius. [Limit: >= 0].
Definition DetourCrowdWorldModule.h:15
float m_fMaxSpeed
Maximum allowed speed. [Limit: >= 0].
Definition DetourCrowdWorldModule.h:24
float m_fSeparationWeight
How aggresive the agent manager should be at avoiding collisions with this agent. [Limit: >= 0].
Definition DetourCrowdWorldModule.h:27
Definition WorldModule.h:33