Changeset - r3983:b2c269b85722
[Not reviewed]
master
0 3 0
tron - 18 years ago 2006-06-08 18:31:54
tron@openttd.org
(svn r5171) Get rid of an ungly hack in the load routine, which temporarily turned house and road tiles into void tiles to calculate the closest town
3 files changed with 37 insertions and 26 deletions:
0 comments (0 inline, 0 general)
openttd.c
Show inline comments
 
@@ -1210,22 +1210,22 @@ bool AfterLoadGame(void)
 
	 *  all about ;) */
 
	if (CheckSavegameVersionOldStyle(6, 1)) {
 
		BEGIN_TILE_LOOP(tile, MapSizeX(), MapSizeY(), 0) {
 
			if (IsTileType(tile, MP_HOUSE)) {
 
				_m[tile].m4 = _m[tile].m2;
 
				//XXX magic
 
				SetTileType(tile, MP_VOID);
 
				_m[tile].m2 = ClosestTownFromTile(tile,(uint)-1)->index;
 
				SetTileType(tile, MP_HOUSE);
 
			} else if (IsTileType(tile, MP_STREET)) {
 
				//XXX magic
 
				_m[tile].m4 |= (_m[tile].m2 << 4);
 
				if (IsTileOwner(tile, OWNER_TOWN)) {
 
					SetTileType(tile, MP_VOID);
 
					_m[tile].m2 = ClosestTownFromTile(tile,(uint)-1)->index;
 
					SetTileType(tile, MP_STREET);
 
				} else {
 
					SetTownIndex(tile, 0);
 
				}
 
			switch (GetTileType(tile)) {
 
				case MP_HOUSE:
 
					_m[tile].m4 = _m[tile].m2;
 
					SetTownIndex(tile, CalcClosestTownFromTile(tile, (uint)-1)->index);
 
					break;
 

	
 
				case MP_STREET:
 
					_m[tile].m4 |= (_m[tile].m2 << 4);
 
					if (IsTileOwner(tile, OWNER_TOWN)) {
 
						SetTownIndex(tile, CalcClosestTownFromTile(tile, (uint)-1)->index);
 
					} else {
 
						SetTownIndex(tile, 0);
 
					}
 
					break;
 

	
 
				default: break;
 
			}
 
		} END_TILE_LOOP(tile, MapSizeX(), MapSizeY(), 0);
 
	}
town_cmd.c
Show inline comments
 
@@ -1739,18 +1739,12 @@ bool CheckIfAuthorityAllows(TileIndex ti
 
}
 

	
 

	
 
Town *ClosestTownFromTile(TileIndex tile, uint threshold)
 
Town* CalcClosestTownFromTile(TileIndex tile, uint threshold)
 
{
 
	Town *t;
 
	uint dist, best = threshold;
 
	Town *best_town = NULL;
 

	
 
	if (IsTileType(tile, MP_HOUSE) || (
 
				IsTileType(tile, MP_STREET) &&
 
				(IsLevelCrossing(tile) ? GetCrossingRoadOwner(tile) : GetTileOwner(tile)) == OWNER_TOWN
 
			))
 
		return GetTownByTile(tile);
 

	
 
	FOR_ALL_TOWNS(t) {
 
		if (t->xy != 0) {
 
			dist = DistanceManhattan(tile, t->xy);
 
@@ -1764,6 +1758,20 @@ Town *ClosestTownFromTile(TileIndex tile
 
	return best_town;
 
}
 

	
 

	
 
Town *ClosestTownFromTile(TileIndex tile, uint threshold)
 
{
 
	if (IsTileType(tile, MP_HOUSE) || (
 
				IsTileType(tile, MP_STREET) &&
 
				(IsLevelCrossing(tile) ? GetCrossingRoadOwner(tile) : GetTileOwner(tile)) == OWNER_TOWN
 
			)) {
 
		return GetTownByTile(tile);
 
	} else {
 
		return CalcClosestTownFromTile(tile, threshold);
 
	}
 
}
 

	
 

	
 
void ChangeTownRating(Town *t, int add, int max)
 
{
 
	int rating;
town_map.h
Show inline comments
 
@@ -20,14 +20,13 @@ static inline TownID GetTownIndex(TileIn
 
}
 

	
 
/**
 
 * Set the town index for a street tile.
 
 * Set the town index for a road or house tile.
 
 * @param tile the tile
 
 * @param index the index of the town
 
 * @pre IsTileType(tile, MP_STREET)
 
 */
 
static inline void SetTownIndex(TileIndex t, TownID index)
 
{
 
	assert(IsTileType(t, MP_STREET));
 
	assert(IsTileType(t, MP_STREET) || IsTileType(t, MP_HOUSE));
 
	_m[t].m2 = index;
 
}
 

	
 
@@ -81,6 +80,10 @@ static inline Town* GetTownByTile(TileIn
 
	return GetTown(GetTownIndex(t));
 
}
 

	
 

	
 
Town* CalcClosestTownFromTile(TileIndex tile, uint threshold);
 

	
 

	
 
static inline void MakeHouseTile(TileIndex t, TownID tid, byte counter, byte stage, byte type)
 
{
 
	assert(IsTileType(t, MP_CLEAR));
0 comments (0 inline, 0 general)