worked on nav-meshes
This commit is contained in:
@@ -5,12 +5,13 @@
|
||||
#include <vector>
|
||||
#include "../math/DrawList.h"
|
||||
#include "../geo/Point3.h"
|
||||
#include "NavMeshLocation.h"
|
||||
|
||||
template <typename Tria> class NavMeshRandom {
|
||||
|
||||
std::minstd_rand gen;
|
||||
std::uniform_real_distribution<float> dOnTriangle = std::uniform_real_distribution<float>(0.0f, 1.0f);
|
||||
const std::vector<Tria>& triangles;
|
||||
const std::vector<Tria*>& triangles;
|
||||
DrawList<size_t> lst;
|
||||
|
||||
public:
|
||||
@@ -22,24 +23,24 @@ public:
|
||||
};
|
||||
|
||||
/** ctor */
|
||||
NavMeshRandom(const std::vector<Tria>& triangles) : triangles(triangles) {
|
||||
NavMeshRandom(const std::vector<Tria*>& triangles) : triangles(triangles) {
|
||||
for (size_t idx = 0; idx < triangles.size(); ++idx) {
|
||||
lst.add(idx, triangles[idx].getArea());
|
||||
lst.add(idx, triangles[idx]->getArea());
|
||||
}
|
||||
}
|
||||
|
||||
/** draw a random point within the map */
|
||||
Result draw() {
|
||||
NavMeshLocation<Tria> draw() {
|
||||
|
||||
const size_t idx = lst.get();
|
||||
const Tria& tria = triangles[idx];
|
||||
const Tria* tria = triangles[idx];
|
||||
|
||||
while (true) {
|
||||
const float u = dOnTriangle(gen);
|
||||
const float v = dOnTriangle(gen);
|
||||
if (u+v > 1) {continue;}
|
||||
const Point3 pos = tria.getA() + (tria.getAB() * u) + (tria.getAC() * v);
|
||||
return Result(pos, idx);
|
||||
return NavMeshLocation<Tria>(pos, tria);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user