Changeset - r16110:0eb4e685b16c
[Not reviewed]
master
0 5 0
rubidium - 14 years ago 2010-09-16 16:31:57
rubidium@openttd.org
(svn r20816) -Codechange [FS#3835]: make waypoint default names work like depots, stations and vehicles (Krille)
5 files changed with 20 insertions and 13 deletions:
0 comments (0 inline, 0 general)
src/depot_base.h
Show inline comments
 
@@ -20,13 +20,13 @@ extern DepotPool _depot_pool;
 

	
 
struct Depot : DepotPool::PoolItem<&_depot_pool> {
 
	Town *town;
 
	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) {}
 
	~Depot();
 

	
 
	static FORCEINLINE Depot *GetByTile(TileIndex tile)
src/saveload/afterload.cpp
Show inline comments
 
@@ -2292,12 +2292,25 @@ bool AfterLoadGame()
 
		for (TileIndex t = 0; t < map_size; t++) {
 
			if (!IsTileType(t, MP_STATION)) continue;
 
			if (!IsBuoy(t) && !IsOilRig(t) && !(IsDock(t) && GetTileSlope(t, NULL) == SLOPE_FLAT)) {
 
				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 */
 
	AfterLoadRoadStops();
 
	AfterLoadLabelMaps();
 

	
src/town.h
Show inline comments
 
@@ -237,14 +237,14 @@ extern TownID _new_town_id;
 
 * @tparam T The type/class to make a default name for
 
 * @param obj The object/instance we want to find the name for
 
 */
 
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);
 

	
 
	/* Find first unused number belonging to this town. This can never fail,
 
	 * as long as there can be at most 65535 waypoints/depots in total.
 
	 *
 
@@ -263,14 +263,14 @@ void MakeDefaultName(T *obj)
 

	
 
	do {
 
		T *lobj = T::GetIfValid(cid);
 

	
 
		/* 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;
 

	
 
				if (i < 32) {
 
					SetBit(used, i); // update bitmap
 
					if (i == 0) {
src/waypoint_base.h
Show inline comments
 
@@ -12,13 +12,13 @@
 
#ifndef WAYPOINT_H
 
#define WAYPOINT_H
 

	
 
#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();
 

	
 
	void UpdateVirtCoord();
 

	
src/waypoint_cmd.cpp
Show inline comments
 
@@ -403,18 +403,12 @@ CommandCost CmdRenameWaypoint(TileIndex 
 
		if (strlen(text) >= MAX_LENGTH_STATION_NAME_BYTES) return CMD_ERROR;
 
		if (!IsUniqueWaypointName(text)) return_cmd_error(STR_ERROR_NAME_MUST_BE_UNIQUE);
 
	}
 

	
 
	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();
 
	}
 
	return CommandCost();
 
}
0 comments (0 inline, 0 general)