fixed grid factory issue with stairs
added some sanity checks
This commit is contained in:
@@ -157,18 +157,24 @@ public:
|
||||
// remember the z-position of the already-existing grid-node we connected the stair to
|
||||
connectedWithHeights.insert(grid[sn.gridIdx].z_cm);
|
||||
|
||||
// mark the node as stair-node
|
||||
//grid[sn.gridIdx].setType(GridNode::TYPE_STAIR);
|
||||
|
||||
} else {
|
||||
|
||||
sn.gridIdx = grid.add(T(gp.x_cm, gp.y_cm, gp.z_cm));
|
||||
|
||||
// check if there is a nearby floor-node to delete
|
||||
// -> remove nodes directly above/below the stair
|
||||
const int deleteDist_cm = 100;
|
||||
const float distToBelow = gp.z_cm - floor->getStartingZ()*100;
|
||||
const float distToAbove = floor->getEndingZ()*100 - gp.z_cm;
|
||||
if (distToBelow > gs_cm && distToBelow < deleteDist_cm) {
|
||||
//if (distToBelow > gs_cm && distToBelow < deleteDist_cm) {
|
||||
if (distToBelow > 0 && distToBelow < deleteDist_cm) {
|
||||
T* n = (T*) grid.getNodePtrFor(GridPoint(gp.x_cm, gp.y_cm, floor->getStartingZ()*100));
|
||||
if (n) {toDelete.push_back(n);}
|
||||
} else if (distToAbove > gs_cm && distToAbove < deleteDist_cm) {
|
||||
//} else if (distToAbove > gs_cm && distToAbove < deleteDist_cm) {
|
||||
} else if (distToAbove > 0 && distToAbove < deleteDist_cm) {
|
||||
T* n = (T*) grid.getNodePtrFor(GridPoint(gp.x_cm, gp.y_cm, floor->getEndingZ()*100));
|
||||
if (n) {toDelete.push_back(n);}
|
||||
}
|
||||
@@ -181,7 +187,11 @@ public:
|
||||
}
|
||||
|
||||
// sanity check
|
||||
Assert::isTrue(connectedWithHeights.size() == 2, "stair is not correctly connected to starting and ending floor!");
|
||||
// connectedWithHeights should contain 2 entries:
|
||||
// one for the starting floor
|
||||
// one for the ending floor
|
||||
// this mainly fails, when there is a REMOVING outline-area that removes to many nodes and the stair can not be connected
|
||||
Assert::isTrue(connectedWithHeights.size() == 2, "stair is not correctly connected to starting and ending floor!");
|
||||
|
||||
// now connect all new nodes with their neighbors
|
||||
// do not perform normal grid-connection but examine the nodes within the generated vector
|
||||
@@ -225,6 +235,9 @@ public:
|
||||
|
||||
void finalize() {
|
||||
|
||||
//std::cout << "stairs.finalize() crashes!" << std::endl;
|
||||
//return;
|
||||
|
||||
// delete all pending nodes and perform a cleanup
|
||||
if (!toDelete.empty()) {
|
||||
for (T* n : toDelete) {grid.remove(*n);}
|
||||
|
||||
Reference in New Issue
Block a user