Recast Navigation
Navigation-mesh Toolset for Games
Loading...
Searching...
No Matches
Tool_Crowd.h
Go to the documentation of this file.
1//
2// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org
3//
4// This software is provided 'as-is', without any express or implied
5// warranty. In no event will the authors be held liable for any damages
6// arising from the use of this software.
7// Permission is granted to anyone to use this software for any purpose,
8// including commercial applications, and to alter it and redistribute it
9// freely, subject to the following restrictions:
10// 1. The origin of this software must not be misrepresented; you must not
11// claim that you wrote the original software. If you use this software
12// in a product, an acknowledgment in the product documentation would be
13// appreciated but is not required.
14// 2. Altered source versions must be plainly marked as such, and must not be
15// misrepresented as being the original software.
16// 3. This notice may not be removed or altered from any source distribution.
17//
18
19#pragma once
20
21#include "DetourCrowd.h"
22#include "Sample.h"
23#include "ValueHistory.h"
24
26{
27 bool showCorners = false;
29 bool showPath = false;
30 bool showVO = false;
31 bool showOpt = false;
32 bool showNeighbors = false;
33
34 bool showLabels = false;
35 bool showGrid = false;
36 bool showNodes = false;
37 bool showPerfGraph = false;
38 bool showDetailAll = false;
39
40 bool anticipateTurns = true;
41 bool optimizeVis = true;
42 bool optimizeTopo = true;
43 bool obstacleAvoidance = true;
45 bool separation = false;
46 float separationWeight = 2.0f;
47};
48
51{
52 Sample* sample = nullptr;
53
54 float targetPosition[3]{};
55 dtPolyRef targetPolyRef{0};
56
57 dtCrowdAgentDebugInfo agentDebug;
58 dtObstacleAvoidanceDebugData* obstacleAvoidanceDebugData = nullptr;
59
60 static constexpr int AGENT_MAX_TRAIL = 64;
61 static constexpr int MAX_AGENTS = 128;
62
63 struct AgentTrail
64 {
65 float trail[AGENT_MAX_TRAIL * 3];
66 int htrail;
67 };
68 AgentTrail trails[MAX_AGENTS];
69
70 ValueHistory crowdTotalTime;
71 ValueHistory crowdSampleCount;
72
73 CrowdToolParams toolParams;
74
75 bool run = true;
76
77public:
80 CrowdToolState(const CrowdToolState&&) = delete;
83 ~CrowdToolState() override;
84
85 void init(Sample* newSample) override;
86 void reset() override;
87 void render() override;
88 void renderOverlay() override;
89 void update(float dt) override;
90
91 [[nodiscard]] bool isRunning() const { return run; }
92 void setRunning(const bool s) { run = s; }
93
94 void addAgent(const float* pos);
95 void removeAgent(int idx);
96 void highlightAgent(int idx);
97 void updateAgentParams();
98 int hitTestAgents(const float* s, const float* p);
99 void setMoveTarget(const float* p, bool adjust);
100 void updateTick(float dt);
101
102 CrowdToolParams* getToolParams() { return &toolParams; }
103};
104
105class CrowdTool : public SampleTool
106{
107 Sample* sample = nullptr;
108 CrowdToolState* state = nullptr;
109
110 enum class ToolMode : uint8_t
111 {
112 CREATE,
113 MOVE_TARGET,
114 SELECT,
115 TOGGLE_POLYS
116 };
117 ToolMode mode = ToolMode::CREATE;
118
119public:
121 void init(Sample* sample) override;
122 void reset() override;
123 void drawMenuUI() override;
124 void onClick(const float* s, const float* p, bool shift) override;
125 void onToggle() override;
126 void singleStep() override;
127 void update(float dt) override;
128 void render() override;
129 void drawOverlayUI() override;
130};
SampleToolType
Tool types.
Definition Sample.h:33
Tool to create crowds.
Definition Tool_Crowd.h:51
void setMoveTarget(const float *p, bool adjust)
Definition Tool_Crowd.cpp:809
CrowdToolParams * getToolParams()
Definition Tool_Crowd.h:102
CrowdToolState & operator=(const CrowdToolState &&)=delete
CrowdToolState & operator=(const CrowdToolState &)=delete
CrowdToolState()
Definition Tool_Crowd.cpp:94
void render() override
Definition Tool_Crowd.cpp:169
int hitTestAgents(const float *s, const float *p)
Definition Tool_Crowd.cpp:876
void reset() override
Definition Tool_Crowd.cpp:167
CrowdToolState(const CrowdToolState &&)=delete
void setRunning(const bool s)
Definition Tool_Crowd.h:92
void updateAgentParams()
Definition Tool_Crowd.cpp:910
void updateTick(float dt)
Definition Tool_Crowd.cpp:948
void removeAgent(int idx)
Definition Tool_Crowd.cpp:780
void init(Sample *newSample) override
Definition Tool_Crowd.cpp:111
~CrowdToolState() override
Definition Tool_Crowd.cpp:106
void update(float dt) override
Definition Tool_Crowd.cpp:714
void highlightAgent(int idx)
Definition Tool_Crowd.cpp:796
void addAgent(const float *pos)
Definition Tool_Crowd.cpp:722
CrowdToolState(const CrowdToolState &)=delete
void renderOverlay() override
Definition Tool_Crowd.cpp:587
bool isRunning() const
Definition Tool_Crowd.h:91
Definition Tool_Crowd.h:106
void render() override
Definition Tool_Crowd.cpp:1173
void onToggle() override
Definition Tool_Crowd.cpp:1159
void singleStep() override
Definition Tool_Crowd.cpp:1146
void update(float dt) override
Definition Tool_Crowd.cpp:1168
SampleToolType type() override
Definition Tool_Crowd.h:120
void init(Sample *sample) override
Definition Tool_Crowd.cpp:987
void reset() override
Definition Tool_Crowd.cpp:1004
void drawOverlayUI() override
Definition Tool_Crowd.cpp:1175
void drawMenuUI() override
Definition Tool_Crowd.cpp:1006
void onClick(const float *s, const float *p, bool shift) override
Definition Tool_Crowd.cpp:1074
Definition Sample.h:116
Definition ValueHistory.h:7
Definition DetourObstacleAvoidance.h:39
unsigned int dtPolyRef
A handle to a polygon within a navigation mesh tile.
Definition DetourNavMesh.h:48
Definition Tool_Crowd.h:26
bool showNeighbors
Definition Tool_Crowd.h:32
bool showNodes
Definition Tool_Crowd.h:36
bool showLabels
Definition Tool_Crowd.h:34
bool showGrid
Definition Tool_Crowd.h:35
bool showPath
Definition Tool_Crowd.h:29
bool optimizeVis
Definition Tool_Crowd.h:41
bool separation
Definition Tool_Crowd.h:45
int obstacleAvoidanceType
Definition Tool_Crowd.h:44
bool showDetailAll
Definition Tool_Crowd.h:38
bool showCorners
Definition Tool_Crowd.h:27
bool showVO
Definition Tool_Crowd.h:30
bool anticipateTurns
Definition Tool_Crowd.h:40
bool showPerfGraph
Definition Tool_Crowd.h:37
bool showCollisionSegments
Definition Tool_Crowd.h:28
bool optimizeTopo
Definition Tool_Crowd.h:42
float separationWeight
Definition Tool_Crowd.h:46
bool obstacleAvoidance
Definition Tool_Crowd.h:43
bool showOpt
Definition Tool_Crowd.h:31
Definition Sample.h:104
Definition Sample.h:85
Definition DetourCrowd.h:195