some refactorings/fixes
worked on nav-mesh stuff new tests
This commit is contained in:
@@ -47,7 +47,7 @@ namespace NM {
|
||||
/**
|
||||
* evaluate the difference between head(start,end) and the requested heading
|
||||
*/
|
||||
template <typename Tria> class WalkEvalHeadingStartEnd : public NavMeshWalkEval<Tria> {
|
||||
template <typename Tria> class WalkEvalHeadingStartEndVonMises : public NavMeshWalkEval<Tria> {
|
||||
|
||||
const double sigma_rad;
|
||||
const double kappa;
|
||||
@@ -58,7 +58,7 @@ namespace NM {
|
||||
|
||||
// kappa = 1/var = 1/sigma^2
|
||||
// https://en.wikipedia.org/wiki/Von_Mises_distribution
|
||||
WalkEvalHeadingStartEnd(const double sigma_rad = 0.04) :
|
||||
WalkEvalHeadingStartEndVonMises(const double sigma_rad = 0.04) :
|
||||
sigma_rad(sigma_rad), kappa(1.0/(sigma_rad*sigma_rad)), _dist(0, kappa), dist(_dist.getLUT()) {
|
||||
;
|
||||
}
|
||||
@@ -144,10 +144,14 @@ namespace NM {
|
||||
*/
|
||||
template <typename Tria> class WalkEvalApproachesTarget : public NavMeshWalkEval<Tria> {
|
||||
|
||||
const double p = 0.65;
|
||||
const double p;
|
||||
|
||||
public:
|
||||
|
||||
WalkEvalApproachesTarget(const double pApproaching = 0.65) : p(pApproaching) {
|
||||
;
|
||||
}
|
||||
|
||||
virtual double getProbability(const NavMeshPotentialWalk<Tria>& walk) const override {
|
||||
|
||||
// sanity check
|
||||
@@ -156,10 +160,12 @@ namespace NM {
|
||||
const NavMeshLocation<Tria> locStart = walk.requested.start;
|
||||
const NavMeshLocation<Tria> locEnd = walk.end;
|
||||
|
||||
const float distFromNew = locEnd.tria->getDistanceToDestination<Tria>(locEnd.pos);
|
||||
const float distFromOld = locStart.tria->getDistanceToDestination<Tria>(locStart.pos);
|
||||
const float distFromNew = locEnd.tria-> template getDistanceToDestination<Tria>(locEnd.pos);
|
||||
const float distFromOld = locStart.tria-> template getDistanceToDestination<Tria>(locStart.pos);
|
||||
|
||||
return (distFromNew <= distFromOld) ? (p) : (1.0 - p);
|
||||
const double pRemain = 1.0 / (2+distFromNew);
|
||||
|
||||
return ((distFromNew <= distFromOld) ? (p) : (1.0 - p)) + std::pow(pRemain, 0.2);
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user