Files @ r9583:b6e25a00b908
Branch filter:

Location: cpp/openttd-patchpack/source/src/roadveh_gui.cpp - annotation

rubidium
(svn r13621) -Fix: building roadbits in the wrong direction on bridges or building roadbits from underneath the bridge to the bridgehead is impossible, so don't silently ignore that error when building over houses and industries is not ignored.
r5584:545d748cc681
r5584:545d748cc681
r9111:983de9c5a848
r6393:f9322fdf4c2c
r5584:545d748cc681
r5584:545d748cc681
r5584:545d748cc681
r5584:545d748cc681
r5584:545d748cc681
r8107:82461791b7a2
r8224:194097dc7288
r8224:194097dc7288
r8116:df67d3c5e4fd
r5584:545d748cc681
r5584:545d748cc681
r8114:866ed489ed98
r8144:1432edd15267
r8214:9a3935f9ef4e
r8784:f3d6ba8eb078
r5584:545d748cc681
r8264:d493cb51fe8a
r8264:d493cb51fe8a
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7824:e4e35ff9ee2c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7824:e4e35ff9ee2c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7824:e4e35ff9ee2c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7824:e4e35ff9ee2c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7824:e4e35ff9ee2c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7824:e4e35ff9ee2c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r7530:8eaeedf8b40c
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r8144:1432edd15267
r5584:545d748cc681
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r8828:13b26c4bf7f4
r8828:13b26c4bf7f4
r8828:13b26c4bf7f4
r8828:13b26c4bf7f4
r8828:13b26c4bf7f4
r8828:13b26c4bf7f4
r8828:13b26c4bf7f4
r6857:1e07df806ef1
r7134:b101dff10042
r6857:1e07df806ef1
r6857:1e07df806ef1
r8828:13b26c4bf7f4
r8828:13b26c4bf7f4
r8828:13b26c4bf7f4
r8828:13b26c4bf7f4
r6857:1e07df806ef1
r6857:1e07df806ef1
r8828:13b26c4bf7f4
r8828:13b26c4bf7f4
r8828:13b26c4bf7f4
r8828:13b26c4bf7f4
r8828:13b26c4bf7f4
r8828:13b26c4bf7f4
r5584:545d748cc681
r5584:545d748cc681
r5584:545d748cc681
r5584:545d748cc681
r5584:545d748cc681
r5584:545d748cc681
r5584:545d748cc681
r5584:545d748cc681
r5584:545d748cc681
r5584:545d748cc681
r5584:545d748cc681
r5584:545d748cc681
r7653:8b8bc2df3a7d
r5584:545d748cc681
r7486:610eee847f11
r5584:545d748cc681
/* $Id$ */

/** @file roadveh_gui.cpp GUI for road vehicles. */

#include "stdafx.h"
#include "openttd.h"
#include "debug.h"
#include "roadveh.h"
#include "gui.h"
#include "window_gui.h"
#include "viewport_func.h"
#include "gfx_func.h"
#include "command_func.h"
#include "vehicle_gui.h"
#include "newgrf_engine.h"
#include "strings_func.h"
#include "vehicle_func.h"
#include "string_func.h"
#include "order_func.h"

#include "table/sprites.h"
#include "table/strings.h"

void DrawRoadVehDetails(const Vehicle *v, int x, int y)
{
	uint y_offset = RoadVehHasArticPart(v) ? 15 :0;
	StringID str;

	SetDParam(0, v->engine_type);
	SetDParam(1, v->build_year);
	SetDParam(2, v->value);
	DrawString(x, y + y_offset, STR_9011_BUILT_VALUE, TC_FROMSTRING);

	if (RoadVehHasArticPart(v)) {
		AcceptedCargo max_cargo;
		char capacity[512];

		memset(max_cargo, 0, sizeof(max_cargo));

		for (const Vehicle *u = v; u != NULL; u = u->Next()) {
			max_cargo[u->cargo_type] += u->cargo_cap;
		}

		GetString(capacity, STR_ARTICULATED_RV_CAPACITY, lastof(capacity));

		bool first = true;
		for (CargoID i = 0; i < NUM_CARGO; i++) {
			if (max_cargo[i] > 0) {
				char buffer[128];

				SetDParam(0, i);
				SetDParam(1, max_cargo[i]);
				GetString(buffer, STR_BARE_CARGO, lastof(buffer));

				if (!first) strecat(capacity, ", ", lastof(capacity));
				strecat(capacity, buffer, lastof(capacity));
				first = false;
			}
		}

		SetDParamStr(0, capacity);
		DrawStringTruncated(x, y + 10 + y_offset, STR_JUST_STRING, TC_BLUE, 380 - x);

		for (const Vehicle *u = v; u != NULL; u = u->Next()) {
			str = STR_8812_EMPTY;
			if (!u->cargo.Empty()) {
				SetDParam(0, u->cargo_type);
				SetDParam(1, u->cargo.Count());
				SetDParam(2, u->cargo.Source());
				str = STR_8813_FROM;
			}
			DrawString(x, y + 21 + y_offset, str, TC_FROMSTRING);

			y_offset += 11;
		}

		y_offset -= 11;
	} else {
		SetDParam(0, v->cargo_type);
		SetDParam(1, v->cargo_cap);
		DrawString(x, y + 10 + y_offset, STR_9012_CAPACITY, TC_FROMSTRING);

		str = STR_8812_EMPTY;
		if (!v->cargo.Empty()) {
			SetDParam(0, v->cargo_type);
			SetDParam(1, v->cargo.Count());
			SetDParam(2, v->cargo.Source());
			str = STR_8813_FROM;
		}
		DrawString(x, y + 21 + y_offset, str, TC_FROMSTRING);
	}

	/* Draw Transfer credits text */
	SetDParam(0, v->cargo.FeederShare());
	DrawString(x, y + 33 + y_offset, STR_FEEDER_CARGO_VALUE, TC_FROMSTRING);
}


static inline int RoadVehLengthToPixels(int length)
{
	return (length * 28) / 8;
}

void DrawRoadVehImage(const Vehicle *v, int x, int y, VehicleID selection, int count)
{
	/* Road vehicle lengths are measured in eighths of the standard length, so
	 * count is the number of standard vehicles that should be drawn. If it is
	 * 0, we draw enough vehicles for 10 standard vehicle lengths. */
	int max_length = (count == 0) ? 80 : count * 8;

	/* Width of highlight box */
	int highlight_w = 0;

	for (int dx = 0; v != NULL && dx < max_length ; v = v->Next()) {
		int width = v->u.road.cached_veh_length;

		if (dx + width > 0 && dx <= max_length) {
			SpriteID pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v);
			DrawSprite(v->GetImage(DIR_W), pal, x + 14 + RoadVehLengthToPixels(dx), y + 6);

			if (v->index == selection) {
				/* Set the highlight position */
				highlight_w = RoadVehLengthToPixels(width);
			} else if (_cursor.vehchain && highlight_w != 0) {
				highlight_w += RoadVehLengthToPixels(width);
			}
		}

		dx += width;
	}

	if (highlight_w != 0) {
		DrawFrameRect(x - 1, y - 1, x - 1 + highlight_w, y + 12, 15, FR_BORDERONLY);
	}
}

void CcBuildRoadVeh(bool success, TileIndex tile, uint32 p1, uint32 p2)
{
	const Vehicle *v;

	if (!success) return;

	v = GetVehicle(_new_vehicle_id);
	if (v->tile == _backup_orders_tile) {
		_backup_orders_tile = 0;
		RestoreVehicleOrders(v);
	}
	ShowVehicleViewWindow(v);
}