minor changes to floorplan
fixed some compile issues worked on nav-meshes added some tests
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
#include "NavMeshWalkParams.h"
|
||||
#include "../NavMeshLocation.h"
|
||||
#include "../../math/Distributions.h"
|
||||
#include "../../misc/PerfCheck.h"
|
||||
|
||||
namespace NM {
|
||||
|
||||
@@ -13,6 +14,10 @@ namespace NM {
|
||||
|
||||
NavMeshLocation<Tria> end;
|
||||
|
||||
NavMeshPotentialWalk(const NavMeshWalkParams<Tria>& requested) : requested(requested) {
|
||||
;
|
||||
}
|
||||
|
||||
NavMeshPotentialWalk(const NavMeshWalkParams<Tria>& requested, const NavMeshLocation<Tria>& end) : requested(requested), end(end) {
|
||||
;
|
||||
}
|
||||
@@ -57,10 +62,9 @@ namespace NM {
|
||||
|
||||
virtual double getProbability(const NavMeshPotentialWalk<Tria>& walk) const override {
|
||||
|
||||
if (walk.requested.start.pos == walk.end.pos) {
|
||||
std::cout << "warn! start-position == end-positon" << std::endl;
|
||||
return 0;
|
||||
}
|
||||
PERF_REGION(4, "WalkEvalHeadingStartEnd");
|
||||
|
||||
Assert::notEqual(walk.requested.start.pos, walk.end.pos, "start equals end position");
|
||||
|
||||
const Heading head(walk.requested.start.pos.xy(), walk.end.pos.xy());
|
||||
const float diff = head.getDiffHalfRAD(walk.requested.heading);
|
||||
@@ -72,6 +76,38 @@ namespace NM {
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* evaluate the difference between head(start,end) and the requested heading
|
||||
*/
|
||||
template <typename Tria> class WalkEvalHeadingStartEndNormal : public NavMeshWalkEval<Tria> {
|
||||
|
||||
const double sigma_rad;
|
||||
Distribution::Normal<double> dist;
|
||||
|
||||
public:
|
||||
|
||||
WalkEvalHeadingStartEndNormal(const double sigma_rad = 0.04) :
|
||||
sigma_rad(sigma_rad), dist(0, sigma_rad) {
|
||||
;
|
||||
}
|
||||
|
||||
virtual double getProbability(const NavMeshPotentialWalk<Tria>& walk) const override {
|
||||
|
||||
PERF_REGION(4, "WalkEvalHeadingStartEnd");
|
||||
|
||||
Assert::notEqual(walk.requested.start.pos, walk.end.pos, "start equals end position");
|
||||
|
||||
const Heading head(walk.requested.start.pos.xy(), walk.end.pos.xy());
|
||||
const float diff = head.getDiffHalfRAD(walk.requested.heading);
|
||||
//const float diff = Heading::getSignedDiff(params.heading, head);
|
||||
//return Distribution::Normal<double>::getProbability(0, sigma, diff);
|
||||
return dist.getProbability(diff);
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* evaluate the difference between distance(start, end) and the requested distance
|
||||
*/
|
||||
@@ -87,6 +123,8 @@ namespace NM {
|
||||
|
||||
virtual double getProbability(const NavMeshPotentialWalk<Tria>& walk) const override {
|
||||
|
||||
PERF_REGION(5, "WalkEvalDistance");
|
||||
|
||||
const float requestedDistance_m = walk.requested.getToBeWalkedDistance();
|
||||
const float walkedDistance_m = walk.requested.start.pos.getDistance(walk.end.pos);
|
||||
const float diff = walkedDistance_m - requestedDistance_m;
|
||||
|
||||
Reference in New Issue
Block a user