diff options
author | alberth <alberth@openttd.org> | 2010-10-02 09:48:01 +0000 |
---|---|---|
committer | alberth <alberth@openttd.org> | 2010-10-02 09:48:01 +0000 |
commit | 2a796187efdaeb0050d0501ad7b468fdce84c2ee (patch) | |
tree | 661d8328c651d73e59e9fd2524d474382d263dee /src | |
parent | 581d1070b4f96bdcf191b4f6d397475d189bc9e0 (diff) | |
download | openttd-2a796187efdaeb0050d0501ad7b468fdce84c2ee.tar.xz |
(svn r20863) -Codechange: Make AyStarMain_Loop a method.
Diffstat (limited to 'src')
-rw-r--r-- | src/pathfinder/npf/aystar.cpp | 23 | ||||
-rw-r--r-- | src/pathfinder/npf/aystar.h | 3 |
2 files changed, 12 insertions, 14 deletions
diff --git a/src/pathfinder/npf/aystar.cpp b/src/pathfinder/npf/aystar.cpp index 0895a0845..0facc358f 100644 --- a/src/pathfinder/npf/aystar.cpp +++ b/src/pathfinder/npf/aystar.cpp @@ -153,40 +153,40 @@ static int AyStarMain_CheckTile(AyStar *aystar, AyStarNode *current, OpenListNod * AYSTAR_FOUND_END_NODE : indicates we found the end. Path_found now is true, and in path is the path found. * AYSTAR_STILL_BUSY : indicates we have done this tile, did not found the path yet, and have items left to try. */ -static int AyStarMain_Loop(AyStar *aystar) +int AyStar::Loop() { int i; /* Get the best node from OpenList */ - OpenListNode *current = AyStarMain_OpenList_Pop(aystar); + OpenListNode *current = AyStarMain_OpenList_Pop(this); /* If empty, drop an error */ if (current == NULL) return AYSTAR_EMPTY_OPENLIST; /* Check for end node and if found, return that code */ - if (aystar->EndNodeCheck(aystar, current) == AYSTAR_FOUND_END_NODE) { - if (aystar->FoundEndNode != NULL) { - aystar->FoundEndNode(aystar, current); + if (this->EndNodeCheck(this, current) == AYSTAR_FOUND_END_NODE) { + if (this->FoundEndNode != NULL) { + this->FoundEndNode(this, current); } free(current); return AYSTAR_FOUND_END_NODE; } /* Add the node to the ClosedList */ - AyStarMain_ClosedList_Add(aystar, ¤t->path); + AyStarMain_ClosedList_Add(this, ¤t->path); /* Load the neighbours */ - aystar->GetNeighbours(aystar, current); + this->GetNeighbours(this, current); /* Go through all neighbours */ - for (i = 0; i < aystar->num_neighbours; i++) { + for (i = 0; i < this->num_neighbours; i++) { /* Check and add them to the OpenList if needed */ - aystar->checktile(aystar, &aystar->neighbours[i], current); + this->checktile(this, &this->neighbours[i], current); } /* Free the node */ free(current); - if (aystar->max_search_nodes != 0 && Hash_Size(&aystar->ClosedListHash) >= aystar->max_search_nodes) { + if (this->max_search_nodes != 0 && Hash_Size(&this->ClosedListHash) >= this->max_search_nodes) { /* We've expanded enough nodes */ return AYSTAR_LIMIT_REACHED; } else { @@ -243,7 +243,7 @@ int AyStarMain_Main(AyStar *aystar) int r, i = 0; /* Loop through the OpenList * Quit if result is no AYSTAR_STILL_BUSY or is more than loops_per_tick */ - while ((r = aystar->loop(aystar)) == AYSTAR_STILL_BUSY && (aystar->loops_per_tick == 0 || ++i < aystar->loops_per_tick)) { } + while ((r = aystar->Loop()) == AYSTAR_STILL_BUSY && (aystar->loops_per_tick == 0 || ++i < aystar->loops_per_tick)) { } #ifdef AYSTAR_DEBUG switch (r) { case AYSTAR_FOUND_END_NODE: printf("[AyStar] Found path!\n"); break; @@ -295,7 +295,6 @@ void init_AyStar(AyStar *aystar, Hash_HashProc hash, uint num_buckets) aystar->addstart = AyStarMain_AddStartNode; aystar->main = AyStarMain_Main; - aystar->loop = AyStarMain_Loop; aystar->clear = AyStarMain_Clear; aystar->checktile = AyStarMain_CheckTile; } diff --git a/src/pathfinder/npf/aystar.h b/src/pathfinder/npf/aystar.h index b604118f9..8088ba7fe 100644 --- a/src/pathfinder/npf/aystar.h +++ b/src/pathfinder/npf/aystar.h @@ -106,7 +106,6 @@ typedef void AyStar_FoundEndNode(AyStar *aystar, OpenListNode *current); /* For internal use, see aystar.cpp */ typedef void AyStar_AddStartNode(AyStar *aystar, AyStarNode *start_node, uint g); typedef int AyStar_Main(AyStar *aystar); -typedef int AyStar_Loop(AyStar *aystar); typedef int AyStar_CheckTile(AyStar *aystar, AyStarNode *current, OpenListNode *parent); typedef void AyStar_Clear(AyStar *aystar); @@ -150,7 +149,7 @@ struct AyStar { * main() should be called externally */ AyStar_AddStartNode *addstart; AyStar_Main *main; - AyStar_Loop *loop; + int Loop(); void Free(); AyStar_Clear *clear; AyStar_CheckTile *checktile; |