Changeset - r9449:005042909719
[Not reviewed]
master
0 4 0
belugas - 16 years ago 2008-06-03 02:20:27
belugas@openttd.org
(svn r13367) -Codechange: Allow CircularTileSearch function to return the tile where search has been successful, or INVALID_TILE if it has not
4 files changed with 14 insertions and 8 deletions:
0 comments (0 inline, 0 general)
src/industry_cmd.cpp
Show inline comments
 
@@ -995,7 +995,7 @@ static void ChopLumberMillTrees(Industry
 

	
 
	if (!IsIndustryCompleted(tile)) return;  ///< Can't proceed if not completed
 

	
 
	if (CircularTileSearch(tile, 40, SearchLumberMillTrees, 0)) ///< 40x40 tiles  to search
 
	if (CircularTileSearch(&tile, 40, SearchLumberMillTrees, 0)) ///< 40x40 tiles  to search
 
		i->produced_cargo_waiting[0] = min(0xffff, i->produced_cargo_waiting[0] + 45); ///< Found a tree, add according value to waiting cargo
 
}
 

	
src/map.cpp
Show inline comments
 
@@ -258,7 +258,7 @@ uint DistanceFromEdge(TileIndex tile)
 
 * Although it really is a square search...
 
 * Every tile will be tested by means of the callback function proc,
 
 * which will determine if yes or no the given tile meets criteria of search.
 
 * @param tile to start the search from
 
 * @param tile to start the search from. Upon completion, it will return the tile matching the search
 
 * @param size: number of tiles per side of the desired search area
 
 * @param proc: callback testing function pointer.
 
 * @param data to be passed to the callback function. Depends on the implementation
 
@@ -266,7 +266,7 @@ uint DistanceFromEdge(TileIndex tile)
 
 * @pre proc != NULL
 
 * @pre size > 0
 
 */
 
bool CircularTileSearch(TileIndex tile, uint size, TestTileOnSearchProc proc, uint32 data)
 
bool CircularTileSearch(TileIndex *tile, uint size, TestTileOnSearchProc proc, uint32 data)
 
{
 
	uint n, x, y;
 
	DiagDirection dir;
 
@@ -274,14 +274,17 @@ bool CircularTileSearch(TileIndex tile, 
 
	assert(proc != NULL);
 
	assert(size > 0);
 

	
 
	x = TileX(tile);
 
	y = TileY(tile);
 
	x = TileX(*tile);
 
	y = TileY(*tile);
 

	
 
	if (size % 2 == 1) {
 
		/* If the length of the side is uneven, the center has to be checked
 
		 * separately, as the pattern of uneven sides requires to go around the center */
 
		n = 2;
 
		if (proc(TileXY(x, y), data)) return true;
 
		if (proc(TileXY(x, y), data)) {
 
			*tile = TileXY(x, y);
 
			return true;
 
		}
 

	
 
		/* If tile test is not successful, get one tile down and left,
 
		 * ready for a test in first circle around center tile */
 
@@ -302,6 +305,7 @@ bool CircularTileSearch(TileIndex tile, 
 
			for (j = n; j != 0; j--) {
 
				if (x <= MapMaxX() && y <= MapMaxY() && ///< Is the tile within the map?
 
						proc(TileXY(x, y), data)) {     ///< Is the callback successful?
 
					*tile = TileXY(x, y);
 
					return true;                        ///< then stop the search
 
				}
 

	
 
@@ -314,5 +318,7 @@ bool CircularTileSearch(TileIndex tile, 
 
		x += _tileoffs_by_dir[DIR_W].x;
 
		y += _tileoffs_by_dir[DIR_W].y;
 
	}
 

	
 
	*tile = INVALID_TILE;
 
	return false;
 
}
src/map_func.h
Show inline comments
 
@@ -391,7 +391,7 @@ typedef bool TestTileOnSearchProc(TileIn
 
/**
 
 * Searches for some cirumstances of a tile around a given tile with a helper function.
 
 */
 
bool CircularTileSearch(TileIndex tile, uint size, TestTileOnSearchProc proc, uint32 data);
 
bool CircularTileSearch(TileIndex *tile, uint size, TestTileOnSearchProc proc, uint32 data);
 

	
 
/**
 
 * Get a random tile out of a given seed.
src/town_cmd.cpp
Show inline comments
 
@@ -2193,7 +2193,7 @@ static void TownActionBuildStatue(Town *
 
{
 
	TileIndex tile = t->xy;
 

	
 
	if (CircularTileSearch(tile, 9, SearchTileForStatue, t->index)) {
 
	if (CircularTileSearch(&tile, 9, SearchTileForStatue, t->index)) {
 
		SetBit(t->statues, _current_player); // Once found and built, "inform" the Town
 
	}
 
}
0 comments (0 inline, 0 general)