From d09db07ca1a0b3a828eb57dd1cc11915d099f1de Mon Sep 17 00:00:00 2001 From: tron Date: Wed, 16 Nov 2005 12:52:01 +0000 Subject: (svn r3204) Make handling of clicking on vehicles a bit less ugly by avoiding function declarations in .c files and unnecessary indirection --- viewport.c | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) (limited to 'viewport.c') diff --git a/viewport.c b/viewport.c index c3cc10834..c807a3965 100644 --- a/viewport.c +++ b/viewport.c @@ -4,6 +4,7 @@ #include "openttd.h" #include "debug.h" #include "functions.h" +#include "gui.h" #include "spritecache.h" #include "strings.h" #include "table/sprites.h" @@ -1696,25 +1697,28 @@ static void CheckClickOnLandscape(const ViewPort *vp, int x, int y) if (pt.x != -1) ClickTile(TileVirtXY(pt.x, pt.y)); } -void HandleClickOnTrain(Vehicle *v); -void HandleClickOnRoadVeh(Vehicle *v); -void HandleClickOnAircraft(Vehicle *v); -void HandleClickOnShip(Vehicle *v); -static void HandleClickOnSpecialVeh(Vehicle *v) {} -void HandleClickOnDisasterVeh(Vehicle *v); -typedef void OnVehicleClickProc(Vehicle *v); -static OnVehicleClickProc * const _on_vehicle_click_proc[6] = { - HandleClickOnTrain, - HandleClickOnRoadVeh, - HandleClickOnShip, - HandleClickOnAircraft, - HandleClickOnSpecialVeh, - HandleClickOnDisasterVeh, + +static void SafeShowTrainViewWindow(const Vehicle* v) +{ + if (v->subtype != TS_Front_Engine) v = GetFirstVehicleInChain(v); + ShowTrainViewWindow(v); +} + +static void Nop(const Vehicle* v) {} + +typedef void OnVehicleClickProc(const Vehicle* v); +static OnVehicleClickProc* const _on_vehicle_click_proc[] = { + SafeShowTrainViewWindow, + ShowRoadVehViewWindow, + ShowShipViewWindow, + ShowAircraftViewWindow, + Nop, // Special vehicles + Nop // Disaster vehicles }; void HandleViewportClicked(const ViewPort *vp, int x, int y) { - Vehicle* v; + const Vehicle* v; if (CheckClickOnTown(vp, x, y)) return; if (CheckClickOnStation(vp, x, y)) return; -- cgit v1.2.3-54-g00ecf