mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-06 14:27:16 +00:00
(svn r20816) -Codechange [FS#3835]: make waypoint default names work like depots, stations and vehicles (Krille)
This commit is contained in:
parent
b01c63cd23
commit
af18c30f30
@ -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…
Reference in New Issue
Block a user