File diff r1976:fcef181ed14a → r1977:1f8b99c96041
waypoint.c
Show inline comments
 
@@ -108,49 +108,49 @@ void MakeDefaultWaypointName(Waypoint *w
 
	bool used_waypoint[MAX_WAYPOINTS_PER_TOWN];
 
	int i;
 

	
 
	wp->town_index = ClosestTownFromTile(wp->xy, (uint)-1)->index;
 

	
 
	memset(used_waypoint, 0, sizeof(used_waypoint));
 

	
 
	/* Find an unused waypoint number belonging to this town */
 
	FOR_ALL_WAYPOINTS(local_wp) {
 
		if (wp == local_wp)
 
			continue;
 

	
 
		if (local_wp->xy && local_wp->string == STR_NULL && local_wp->town_index == wp->town_index)
 
			used_waypoint[local_wp->town_cn] = true;
 
	}
 

	
 
	/* Find an empty spot */
 
	for (i = 0; used_waypoint[i] && i < MAX_WAYPOINTS_PER_TOWN; i++) {}
 

	
 
	wp->string = STR_NULL;
 
	wp->town_cn = i;
 
}
 

	
 
/* Find a deleted waypoint close to a tile. */
 
static Waypoint *FindDeletedWaypointCloseTo(uint tile)
 
static Waypoint *FindDeletedWaypointCloseTo(TileIndex tile)
 
{
 
	Waypoint *wp, *best = NULL;
 
	uint thres = 8, cur_dist;
 

	
 
	FOR_ALL_WAYPOINTS(wp) {
 
		if (wp->deleted && wp->xy) {
 
			cur_dist = DistanceManhattan(tile, wp->xy);
 
			if (cur_dist < thres) {
 
				thres = cur_dist;
 
				best = wp;
 
			}
 
		}
 
	}
 

	
 
	return best;
 
}
 

	
 
/** Convert existing rail to waypoint. Eg build a waypoint station over
 
 * piece of rail
 
 * @param x,y coordinates where waypoint will be built
 
 * @param p1 graphics for waypoint type, bit 8 signifies custom waypoint gfx (& 0x100)
 
 * @param p2 unused
 
 */
 
int32 CmdBuildTrainWaypoint(int x, int y, uint32 flags, uint32 p1, uint32 p2)
 
@@ -222,49 +222,49 @@ static void DoDeleteWaypoint(Waypoint *w
 
	order.type = OT_GOTO_WAYPOINT;
 
	order.station = wp->index;
 
	DeleteDestinationFromVehicleOrder(order);
 

	
 
	if (wp->string != STR_NULL)
 
		DeleteName(wp->string);
 

	
 
	RedrawWaypointSign(wp);
 
}
 

	
 
/* Daily loop for waypoints */
 
void WaypointsDailyLoop(void)
 
{
 
	Waypoint *wp;
 

	
 
	/* Check if we need to delete a waypoint */
 
	FOR_ALL_WAYPOINTS(wp) {
 
		if (wp->deleted && !--wp->deleted) {
 
			DoDeleteWaypoint(wp);
 
		}
 
	}
 
}
 

	
 
/* Remove a waypoint */
 
int32 RemoveTrainWaypoint(uint tile, uint32 flags, bool justremove)
 
int32 RemoveTrainWaypoint(TileIndex tile, uint32 flags, bool justremove)
 
{
 
	Waypoint *wp;
 

	
 
	/* Make sure it's a waypoint */
 
	if (!IsTileType(tile, MP_RAILWAY) || !IsRailWaypoint(_map5[tile]))
 
		return CMD_ERROR;
 

	
 
	if (!CheckTileOwnership(tile) && !(_current_player == OWNER_WATER))
 
		return CMD_ERROR;
 

	
 
	if (!EnsureNoVehicle(tile))
 
		return CMD_ERROR;
 

	
 
	if (flags & DC_EXEC) {
 
		int direction = _map5[tile] & RAIL_WAYPOINT_TRACK_MASK;
 

	
 
		wp = GetWaypointByTile(tile);
 

	
 
		wp->deleted = 30; // let it live for this many days before we do the actual deletion.
 
		RedrawWaypointSign(wp);
 

	
 
		if (justremove) {
 
			ModifyTile(tile, MP_MAP5, 1<<direction);
 
			_map3_lo[tile] &= ~16;
 
@@ -314,49 +314,49 @@ int32 CmdRenameWaypoint(int x, int y, ui
 

	
 
			wp->string = str;
 
			wp->town_cn = 0;
 

	
 
			UpdateWaypointSign(wp);
 
			MarkWholeScreenDirty();
 
		} else {
 
			DeleteName(str);
 
		}
 
	}	else {
 
		if (flags & DC_EXEC) {
 
			wp = GetWaypoint(p1);
 
			if (wp->string != STR_NULL)
 
				DeleteName(wp->string);
 

	
 
			MakeDefaultWaypointName(wp);
 
			UpdateWaypointSign(wp);
 
			MarkWholeScreenDirty();
 
		}
 
	}
 
	return 0;
 
}
 

	
 
/* This hacks together some dummy one-shot Station structure for a waypoint. */
 
Station *ComposeWaypointStation(uint tile)
 
Station *ComposeWaypointStation(TileIndex tile)
 
{
 
	Waypoint *wp = GetWaypointByTile(tile);
 
	static Station stat;
 

	
 
	stat.train_tile = stat.xy = wp->xy;
 
	stat.town = GetTown(wp->town_index);
 
	stat.string_id = wp->string == STR_NULL ? /* FIXME? */ 0 : wp->string;
 
	stat.build_date = wp->build_date;
 
	stat.class_id = 6;
 
	stat.stat_id = wp->stat_id;
 

	
 
	return &stat;
 
}
 

	
 
extern uint16 _custom_sprites_base;
 

	
 
/* Draw a waypoint */
 
void DrawWaypointSprite(int x, int y, int stat_id, int railtype)
 
{
 
	StationSpec *stat;
 
	uint32 relocation;
 
	DrawTileSprites *cust;
 
	DrawTileSeqStruct const *seq;
 
	uint32 ormod, img;