[Add] Finished off the rest of this pathfinding shiz. Enjoy KonoM!!
This commit is contained in:
parent
67ff7dc171
commit
5e0130019d
@ -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:
|
||||||
|
Loading…
Reference in New Issue
Block a user