(svn r20816) -Codechange [FS#3835]: make waypoint default names work like depots, stations and vehicles (Krille)

pull/155/head
rubidium 14 years ago
parent 64f3c1e243
commit 1de34d3103

@ -23,7 +23,7 @@ struct Depot : DepotPool::PoolItem<&_depot_pool> {
char *name;
TileIndex xy;
uint16 town_cn; ///< The Nth depot for this town (consecutive number)
uint16 town_cn; ///< The N-1th depot for this town (consecutive number)
Date build_date; ///< Date of construction
Depot(TileIndex xy = INVALID_TILE) : xy(xy) {}

@ -2295,6 +2295,19 @@ bool AfterLoadGame()
SetWaterClass(t, WATER_CLASS_INVALID);
}
}
/* Waypoints with custom name may have a non-unique town_cn,
* renumber those. First set all affected waypoints to the
* highest possible number to get them numbered in the
* order they have in the pool. */
Waypoint *wp;
FOR_ALL_WAYPOINTS(wp) {
if (wp->name != NULL) wp->town_cn = UINT16_MAX;
}
FOR_ALL_WAYPOINTS(wp) {
if (wp->name != NULL) MakeDefaultName(wp);
}
}
/* Road stops is 'only' updating some caches */

@ -240,8 +240,8 @@ extern TownID _new_town_id;
template <class T>
void MakeDefaultName(T *obj)
{
/* We only want to set names if it hasn't been set before. */
assert(obj->name == NULL);
/* We only want to set names if it hasn't been set before, or when we're calling from afterload. */
assert(obj->name == NULL || obj->town_cn == UINT16_MAX);
obj->town = ClosestTownFromTile(obj->xy, UINT_MAX);
@ -266,8 +266,8 @@ void MakeDefaultName(T *obj)
/* check only valid waypoints... */
if (lobj != NULL && obj != lobj) {
/* only objects with 'generic' name within the same city and with the same type*/
if (lobj->name == NULL && lobj->town == obj->town && lobj->IsOfType(obj)) {
/* only objects within the same city and with the same type */
if (lobj->town == obj->town && lobj->IsOfType(obj)) {
/* if lobj->town_cn < next, uint will overflow to '+inf' */
uint i = (uint)lobj->town_cn - next;

@ -15,7 +15,7 @@
#include "base_station_base.h"
struct Waypoint : SpecializedStation<Waypoint, true> {
uint16 town_cn; ///< The Nth waypoint for this town (consecutive number)
uint16 town_cn; ///< The N-1th waypoint for this town (consecutive number)
Waypoint(TileIndex tile = INVALID_TILE) : SpecializedStation<Waypoint, true>(tile) { }
~Waypoint();

@ -406,13 +406,7 @@ CommandCost CmdRenameWaypoint(TileIndex tile, DoCommandFlag flags, uint32 p1, ui
if (flags & DC_EXEC) {
free(wp->name);
if (reset) {
wp->name = NULL;
MakeDefaultName(wp);
} else {
wp->name = strdup(text);
}
wp->name = reset ? NULL : strdup(text);
wp->UpdateVirtCoord();
}

Loading…
Cancel
Save