worked on grid-walking
worked on grid-generation added helper library for nav-meshes started working on nav meshes
This commit is contained in:
18
grid/Grid.h
18
grid/Grid.h
@@ -16,6 +16,11 @@
|
||||
#include "../geo/BBox3.h"
|
||||
#include "../misc/Debug.h"
|
||||
|
||||
#define GM_BOX 1
|
||||
#define GM_HOBEYCOMB 2
|
||||
#define GRID_MODE GM_BOX
|
||||
|
||||
|
||||
/**
|
||||
* grid of a given-size, storing some user-data-value which
|
||||
* - extends GridPoint and GridNode
|
||||
@@ -240,9 +245,18 @@ public:
|
||||
const uint64_t center = 1 << 19;
|
||||
|
||||
// build
|
||||
#if (GRID_MODE == GM_HOBEYCOMB)
|
||||
const int xx = ((int)std::round(p.y_cm / gridSize_cm) % 2 == 0) ? (0) : (gridSize_cm/2);
|
||||
const uint64_t x = center + (int64_t) idxX(p.x_cm-xx);
|
||||
const uint64_t y = center + (int64_t) idxY(p.y_cm);
|
||||
const uint64_t z = center + (int64_t) idxZ(p.z_cm);
|
||||
#elif (GRID_MODE == GM_BOX)
|
||||
const uint64_t x = center + (int64_t) idxX(p.x_cm);
|
||||
const uint64_t y = center + (int64_t) idxY(p.y_cm);
|
||||
const uint64_t z = center + (int64_t) idxZ(p.z_cm);
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
return (z << 40) | (y << 20) | (x << 0);
|
||||
|
||||
@@ -527,9 +541,13 @@ private:
|
||||
|
||||
/** asssert that the given element is aligned to the grid */
|
||||
void assertAligned(const T& elem) {
|
||||
#if (GRID_MODE == GM_HOBEYCOMB)
|
||||
|
||||
#elif (GRID_MODE == GM_BOX)
|
||||
if (((int)elem.x_cm % gridSize_cm) != 0) {throw Exception("element's x is not aligned!");}
|
||||
if (((int)elem.y_cm % gridSize_cm) != 0) {throw Exception("element's y is not aligned!");}
|
||||
//if (((int)elem.z_cm % gridSize_cm) != 0) {throw Exception("element's z is not aligned!");}
|
||||
#endif
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user