Plasma Engine  2.0
Loading...
Searching...
No Matches
PointOfInterestGraph_inl.h
1#pragma once
2
3#include <RecastPlugin/Components/PointOfInterestGraph.h>
4
5template <typename POINTTYPE>
6void plPointOfInterestGraph<POINTTYPE>::Initialize(const plVec3& vCenter, const plVec3& vHalfExtents, float fCellSize)
7{
8 m_Points.Clear();
9 m_Octree.CreateTree(vCenter, vHalfExtents, fCellSize);
10}
11
12template <typename POINTTYPE>
13POINTTYPE& plPointOfInterestGraph<POINTTYPE>::AddPoint(const plVec3& vPosition)
14{
15 const plUInt32 id = m_Points.GetCount();
16 auto& pt = m_Points.ExpandAndGetRef();
17
18 m_Octree.InsertObject(vPosition, plVec3::MakeZero(), 0, id, nullptr, true).IgnoreResult();
19
20 return pt;
21}
22
23template <typename POINTTYPE>
24void plPointOfInterestGraph<POINTTYPE>::FindPointsOfInterest(const plVec3& vPosition, float fRadius, plDynamicArray<plUInt32>& out_points) const
25{
26 if (m_Octree.IsEmpty())
27 return;
28
29 struct Data
30 {
31 plDynamicArray<plUInt32>* m_pResults;
32 };
33
34 Data data;
35 data.m_pResults = &out_points;
36
37 auto cb = [](void* pPassThrough, plDynamicTreeObjectConst object) -> bool {
38 auto pData = static_cast<Data*>(pPassThrough);
39
40 const plUInt32 id = (plUInt32)object.Value().m_iObjectInstance;
41 pData->m_pResults->PushBack(id);
42
43 return true;
44 };
45
46 m_Octree.FindObjectsInRange(vPosition, fRadius, cb, &data);
47}
void PushBack(const T &value)
Pushes value at the end of the array.
Definition ArrayBase_inl.h:333
Definition DynamicArray.h:81
Definition PointOfInterestGraph.h:9
static plVec3Template< float > MakeZero()
Definition Vec3.h:38
Base class for all iterators.
Definition Map.h:11