[Add] Finished off the rest of this pathfinding shiz. Enjoy KonoM!!

This commit is contained in:
Rtch90 2012-02-04 21:05:56 +00:00
parent 67ff7dc171
commit 5e0130019d

View File

@ -331,34 +331,154 @@ public:
// It will be useful to be able to view the open // It will be useful to be able to view the open
// and closed lists at each step for debugging. // and closed lists at each step for debugging.
UserState* GetOpenListStart(void); UserState* GetOpenListStart(void) {
UserState* GetOpenListStart(float& f, float& g, float& h); float f, g, h;
UserState* GetOpenListNext(void); return GetOpenListStart(f, g, h);
UserState* GetOpenListNext(float& f, float& g, float& h); }
UserState* GetOpenListStart(float& f, float& g, float& h) {
iterDbgOpen = _openList.begin();
if(iterDbgOpen != _openList.end()) {
f = (*iterDbgOpen)->f;
g = (*iterDbgOpen)->g;
h = (*iterDbgOpen)->h;
return &(*iterDbgOpen)->_userState;
}
return NULL;
}
UserState* GetOpenListNext(void) {
float f, g, h;
return GetOpenListNext(f, g, h);
}
UserState* GetOpenListNext(float& f, float& g, float& h) {
iterDbgOpen++;
if(iterDbgOpen != _openList.end()) {
f = (*iterDbgOpen)->f;
g = (*iterDbgOpen)->g;
h = (*iterDbgOpen)->h;
return &(*iterDbgOpen)->_userState;
}
return NULL;
}
// Closes states. // Closes states.
UserState* GetClosedListStart(void); UserState* GetClosedListStart(void) {
UserState* GetClosedListStart(float& f, float& g, float& h); float f, g, h;
UserState* GetClosedListNext(void); return GetClosedListStart(f, g, h);
UserState* GetClosedListNext(float& f, float& g, float& h); }
UserState* GetClosedListStart(float& f, float& g, float& h) {
iterDbgClosed = _closedList.begin();
if(iterDbgClosed != _closedList.begin()) {
f = (*iterDbgClosed)->f;
g = (*iterDbgClosed)->g;
h = (*iterDbgClosed)->h;
return &(iterDbgClosed)->_userState;
}
return NULL;
}
UserState* GetClosedListNext(void) {
float f, g, h;
return GetClosedListNext(f, g, h);
}
UserState* GetClosedListNext(float& f, float& g, float& h) {
iterDbgClosed++;
if(iterDbgClosed != _closedList.end()) {
f = (*iterDbgClosed)->f;
g = (*iterDbgClosed)->g;
h = (*iterDbgClosed)->h;
return &(*iterDbgClosed)->_userState;
}
return NULL;
}
// Get the number of steps. // Get the number of steps.
int GetStepCount(void) {return _steps; } int GetStepCount(void) {return _steps; }
private: private:
// Called when a search fails or is cancelled to free up all unused memory. // Called when a search fails or is cancelled to free up all unused memory.
void FreeAllNodes(void); void FreeAllNodes(void) {
// Iterate the open list and delete all nodes.
typename vector<Node*>::iterator iterOpen = _openList.begin();
while(iterOpen != _openList.end()) {
Node* n = (*iterOpen);
FreeNode(n);
iterOpen++;
}
_openList.clear();
// Iterate closed list and delete unused nodes.
typename vector<Node*>::iterator iterClosed;
for(iterClosed = _closedList.begin(); iterClosed != _closedList.end(); iterClosed++) {
Node* n = (*iterClosed);
FreeNode(n);
}
_closedList.clear();
// Delete the goal.
FreeNode(_goal);
}
/* /*
* Called when the search ends. A lot of nodes may * Called when the search ends. A lot of nodes may
* be created that are still present when the search * be created that are still present when the search
* ends. They will be deleted with this method. * ends. They will be deleted with this method.
*/ */
void FreeUnusedNodes(void); void FreeUnusedNodes(void) {
// Iterate open list and delete unused nodes.
typename vector<Node*>::iterator iterOpen = _openList.begin();
Node* AllocateNode(void); while(iterOpen != _openList.end()) {
Node *n = (*iterOpen);
void FreeNode(Node* node); if(!n->child) {
FreeNode(n);
n = NULL;
}
iterOpen++;
}
_openList.clear();
// Iterate closed list and delete all unused nodes.
typename vector<Node*>::iterator iterClosed;
for(iterClosed = _closedList.begin(); iterClosed != _closedList.end(); iterClosed++) {
Node *n = (*iterClosed);
if(!n->child) {
FreeNode(n);
n = NULL;
}
}
_closedList.clear();
}
Node* AllocateNode(void) {
Node *p = new Node;
return p;
}
void FreeNode(Node* node) {
_allocateNodeCount--;
delete node;
}
// Data. // Data.
private: private: