worked on grid-walking
worked on grid-generation added helper library for nav-meshes started working on nav meshes
This commit is contained in:
@@ -4,7 +4,20 @@
|
||||
#include "../../Grid.h"
|
||||
#include "../../../floorplan/v2/Floorplan.h"
|
||||
#include "HelperPoly3.h"
|
||||
#include <unordered_set>
|
||||
|
||||
#if (GRID_MODE == GM_BOX)
|
||||
|
||||
#define GF3_ITER_XY for (int y = y1; y <= y2; y += gs_cm) { for (int x = x1; x <= x2; x += gs_cm) {
|
||||
|
||||
#elif (GRID_MODE == GM_HOBEYCOMB)
|
||||
|
||||
#define GF3_ITER_XY\
|
||||
for (int y = y1; y <= y2; y += gs_cm) {\
|
||||
const int xx = (y / gs_cm % 2 == 0) ? (0) : (gs_cm/2);\
|
||||
for (int x = x1-xx; x <= x2; x += gs_cm) {
|
||||
|
||||
#endif
|
||||
|
||||
template <typename Node> class GridFactory3 {
|
||||
|
||||
@@ -125,6 +138,7 @@ public:
|
||||
if (n1 == n2) {continue;}
|
||||
|
||||
|
||||
// stair with floor
|
||||
if (
|
||||
(n1.getType() == GridNode::TYPE_STAIR && n2.getType() == GridNode::TYPE_FLOOR) ||
|
||||
(n2.getType() == GridNode::TYPE_STAIR && n1.getType() == GridNode::TYPE_FLOOR)
|
||||
@@ -132,25 +146,28 @@ public:
|
||||
|
||||
const float distxy = n1.inMeter().xy().getDistance(n2.inMeter().xy());
|
||||
const float distz_cm = std::abs(n1.z_cm - n2.z_cm);
|
||||
if (distxy > 0 && distxy < gs_cm * 1.5 / 100.0f && distz_cm < gs_cm) {
|
||||
if (distxy > 0 && distxy < gs_cm * 1.2 / 100.0f && distz_cm < gs_cm) { // [1.85]
|
||||
if (n1.fullyConnected()) {continue;}
|
||||
if (n2.fullyConnected()) {continue;}
|
||||
grid.connectUniDir(n1, n2);
|
||||
}
|
||||
|
||||
// floor with floor
|
||||
} else if (n1.getType() == GridNode::TYPE_FLOOR && n2.getType() == GridNode::TYPE_FLOOR) {
|
||||
if (n1.getDistanceInCM(n2) < gs_cm * 1.45 && !isBlocked(map, n1, n2)) {
|
||||
if (n1.getDistanceInCM(n2) < gs_cm * 1.2 && !isBlocked(map, n1, n2)) { // [1.2 | 1.845]
|
||||
if (n1.fullyConnected()) {continue;}
|
||||
if (n2.fullyConnected()) {continue;}
|
||||
grid.connectUniDir(n1, n2);
|
||||
}
|
||||
|
||||
// stair with stair
|
||||
} else if (n1.getType() == GridNode::TYPE_STAIR && n2.getType() == GridNode::TYPE_STAIR) {
|
||||
|
||||
const float distxy = n1.inMeter().xy().getDistance(n2.inMeter().xy());
|
||||
const float distz_cm = std::abs(n1.z_cm - n2.z_cm);
|
||||
|
||||
// if (n1.getDistanceInCM(n2) < gs_cm * 1.45 && !isBlocked(map, n1, n2)) {
|
||||
if (distxy < gs_cm * 1.45 / 100.0f && distz_cm <= gs_cm) {
|
||||
if (distxy < gs_cm * 1.2 / 100.0f && distz_cm <= gs_cm) { // [1.845]
|
||||
if (n1.fullyConnected()) {continue;}
|
||||
if (n2.fullyConnected()) {continue;}
|
||||
grid.connectUniDir(n1, n2);
|
||||
@@ -328,8 +345,7 @@ public:
|
||||
polygons.push_back(Combo(pol, poly));
|
||||
}
|
||||
|
||||
for (int y = y1; y <= y2; y += gs_cm) {
|
||||
for (int x = x1; x <= x2; x += gs_cm) {
|
||||
GF3_ITER_XY
|
||||
|
||||
int type = GridNode::TYPE_FLOOR;
|
||||
bool remove = false;
|
||||
@@ -429,8 +445,11 @@ public:
|
||||
|
||||
//int zFloor = floor->atHeight * 100;
|
||||
|
||||
for (int y = y1; y <= y2; y += gs_cm) {
|
||||
for (int x = x1; x <= x2; x += gs_cm) {
|
||||
// for (int y = y1; y <= y2; y += gs_cm) {
|
||||
// const int xx = (y / gs_cm % 2 == 0) ? (0) : (gs_cm/2);
|
||||
// for (int x = x1-xx; x <= x2; x += gs_cm) {
|
||||
|
||||
GF3_ITER_XY
|
||||
|
||||
int z = 0;
|
||||
Point2 p(x/100.0f, y/100.0f);
|
||||
|
||||
Reference in New Issue
Block a user