82 lines
1.8 KiB
C++
82 lines
1.8 KiB
C++
#ifndef NAVMESHWALKPARAMS_H
|
|
#define NAVMESHWALKPARAMS_H
|
|
|
|
#include "../../geo/Heading.h"
|
|
#include "../NavMeshLocation.h"
|
|
#include "../NavMeshType.h"
|
|
|
|
namespace NM {
|
|
|
|
/** configure pedestrian StepSizes */
|
|
struct StepSizes {
|
|
|
|
float stepSizeFloor_m = NAN;
|
|
float stepSizeStair_m = NAN;
|
|
|
|
bool isValid() const {
|
|
return (stepSizeFloor_m==stepSizeFloor_m) && (stepSizeStair_m==stepSizeStair_m);
|
|
}
|
|
|
|
template <typename Tria> float inMeter(const int steps, const NavMeshLocation<Tria>& start) const {
|
|
|
|
Assert::isTrue(isValid(), "invalid step-sizes given");
|
|
Assert::isNotNull(start.tria, "no starting triangle given");
|
|
|
|
if (start.tria->getType() == (int) NM::NavMeshType::STAIR_SKEWED) {
|
|
return stepSizeStair_m * steps;
|
|
} else {
|
|
return stepSizeFloor_m * steps;
|
|
}
|
|
|
|
// if (start.tria->isPlain()) {
|
|
// return stepSizeFloor_m * steps;
|
|
// } else {
|
|
// return stepSizeStair_m * steps;
|
|
// }
|
|
|
|
}
|
|
|
|
};
|
|
|
|
/** configure walking from -> to */
|
|
template <typename Tria> struct NavMeshWalkParams {
|
|
|
|
/** walk starts here (pos/tria) */
|
|
NavMeshLocation<Tria> start;
|
|
|
|
/** direction to walk to */
|
|
Heading heading;
|
|
|
|
/** number of steps to walk */
|
|
int numSteps;
|
|
|
|
/** configuration for pedestrian's step-sizes */
|
|
StepSizes stepSizes;
|
|
|
|
|
|
/** empty ctor */
|
|
NavMeshWalkParams() : heading(0) {;}
|
|
|
|
/** get the to-be-walked distance (steps vs. current location [stair/floor/..]) */
|
|
float getToBeWalkedDistance() const {
|
|
if (_toBeWalkedDistance != _toBeWalkedDistance) {
|
|
_toBeWalkedDistance = stepSizes.inMeter(numSteps, start);
|
|
}
|
|
return _toBeWalkedDistance;
|
|
}
|
|
|
|
void check() const {
|
|
Assert::isFalse(numSteps == 0, "num Steps = 0 is currently not supported. must be >= 1");
|
|
}
|
|
|
|
private:
|
|
|
|
// precalc
|
|
mutable float _toBeWalkedDistance = NAN;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
#endif // NAVMESHWALKPARAMS_H
|