mirror of https://github.com/OpenTTD/OpenTTD.git
(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
This commit is contained in:
parent
b690e85604
commit
7c1f1d823f
32
openttd.c
32
openttd.c
|
@ -1210,22 +1210,22 @@ bool AfterLoadGame(void)
|
||||||
* all about ;) */
|
* all about ;) */
|
||||||
if (CheckSavegameVersionOldStyle(6, 1)) {
|
if (CheckSavegameVersionOldStyle(6, 1)) {
|
||||||
BEGIN_TILE_LOOP(tile, MapSizeX(), MapSizeY(), 0) {
|
BEGIN_TILE_LOOP(tile, MapSizeX(), MapSizeY(), 0) {
|
||||||
if (IsTileType(tile, MP_HOUSE)) {
|
switch (GetTileType(tile)) {
|
||||||
_m[tile].m4 = _m[tile].m2;
|
case MP_HOUSE:
|
||||||
//XXX magic
|
_m[tile].m4 = _m[tile].m2;
|
||||||
SetTileType(tile, MP_VOID);
|
SetTownIndex(tile, CalcClosestTownFromTile(tile, (uint)-1)->index);
|
||||||
_m[tile].m2 = ClosestTownFromTile(tile,(uint)-1)->index;
|
break;
|
||||||
SetTileType(tile, MP_HOUSE);
|
|
||||||
} else if (IsTileType(tile, MP_STREET)) {
|
case MP_STREET:
|
||||||
//XXX magic
|
_m[tile].m4 |= (_m[tile].m2 << 4);
|
||||||
_m[tile].m4 |= (_m[tile].m2 << 4);
|
if (IsTileOwner(tile, OWNER_TOWN)) {
|
||||||
if (IsTileOwner(tile, OWNER_TOWN)) {
|
SetTownIndex(tile, CalcClosestTownFromTile(tile, (uint)-1)->index);
|
||||||
SetTileType(tile, MP_VOID);
|
} else {
|
||||||
_m[tile].m2 = ClosestTownFromTile(tile,(uint)-1)->index;
|
SetTownIndex(tile, 0);
|
||||||
SetTileType(tile, MP_STREET);
|
}
|
||||||
} else {
|
break;
|
||||||
SetTownIndex(tile, 0);
|
|
||||||
}
|
default: break;
|
||||||
}
|
}
|
||||||
} END_TILE_LOOP(tile, MapSizeX(), MapSizeY(), 0);
|
} END_TILE_LOOP(tile, MapSizeX(), MapSizeY(), 0);
|
||||||
}
|
}
|
||||||
|
|
22
town_cmd.c
22
town_cmd.c
|
@ -1739,18 +1739,12 @@ bool CheckIfAuthorityAllows(TileIndex tile)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Town *ClosestTownFromTile(TileIndex tile, uint threshold)
|
Town* CalcClosestTownFromTile(TileIndex tile, uint threshold)
|
||||||
{
|
{
|
||||||
Town *t;
|
Town *t;
|
||||||
uint dist, best = threshold;
|
uint dist, best = threshold;
|
||||||
Town *best_town = NULL;
|
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) {
|
FOR_ALL_TOWNS(t) {
|
||||||
if (t->xy != 0) {
|
if (t->xy != 0) {
|
||||||
dist = DistanceManhattan(tile, t->xy);
|
dist = DistanceManhattan(tile, t->xy);
|
||||||
|
@ -1764,6 +1758,20 @@ Town *ClosestTownFromTile(TileIndex tile, uint threshold)
|
||||||
return best_town;
|
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)
|
void ChangeTownRating(Town *t, int add, int max)
|
||||||
{
|
{
|
||||||
int rating;
|
int rating;
|
||||||
|
|
|
@ -20,14 +20,13 @@ static inline TownID GetTownIndex(TileIndex t)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the town index for a street tile.
|
* Set the town index for a road or house tile.
|
||||||
* @param tile the tile
|
* @param tile the tile
|
||||||
* @param index the index of the town
|
* @param index the index of the town
|
||||||
* @pre IsTileType(tile, MP_STREET)
|
|
||||||
*/
|
*/
|
||||||
static inline void SetTownIndex(TileIndex t, TownID index)
|
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;
|
_m[t].m2 = index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,6 +80,10 @@ static inline Town* GetTownByTile(TileIndex t)
|
||||||
return GetTown(GetTownIndex(t));
|
return GetTown(GetTownIndex(t));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Town* CalcClosestTownFromTile(TileIndex tile, uint threshold);
|
||||||
|
|
||||||
|
|
||||||
static inline void MakeHouseTile(TileIndex t, TownID tid, byte counter, byte stage, byte type)
|
static inline void MakeHouseTile(TileIndex t, TownID tid, byte counter, byte stage, byte type)
|
||||||
{
|
{
|
||||||
assert(IsTileType(t, MP_CLEAR));
|
assert(IsTileType(t, MP_CLEAR));
|
||||||
|
|
Loading…
Reference in New Issue