worked on nav-meshes

This commit is contained in:
2018-01-10 08:31:14 +01:00
parent ca6fed5371
commit 3fc9688825
9 changed files with 165 additions and 36 deletions

View File

@@ -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);
}
}