changeset 15088:a63b4234140f draft

(svn r19714) -Feature: ctrl+click on a vehicle to start/stop it
author smatz <smatz@openttd.org>
date Sat, 24 Apr 2010 20:55:51 +0000
parents cf6b5f0aae1d
children e0fd48f3f61b
files src/command_func.h src/depot_gui.cpp src/lang/english.txt src/network/network_command.cpp src/vehicle_cmd.cpp src/vehicle_gui.cpp src/vehicle_gui.h src/viewport.cpp
diffstat 8 files changed, 42 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/command_func.h
+++ b/src/command_func.h
@@ -140,5 +140,6 @@
 
 /* vehicle_gui.cpp */
 CommandCallback CcBuildPrimaryVehicle;
+CommandCallback CcStartStopVehicle;
 
 #endif /* COMMAND_FUNC_H */
--- a/src/depot_gui.cpp
+++ b/src/depot_gui.cpp
@@ -509,7 +509,7 @@
 				break;
 
 			case MODE_START_STOP: // click start/stop flag
-				StartStopVehicle(v);
+				StartStopVehicle(v, false);
 				break;
 
 			default: NOT_REACHED();
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -2967,6 +2967,12 @@
 STR_VEHICLE_STATUS_HEADING_FOR_HANGAR_SERVICE                   :{LTBLUE}Service at {STATION} Hangar
 STR_VEHICLE_STATUS_HEADING_FOR_HANGAR_SERVICE_VEL               :{LTBLUE}Service at {STATION} Hangar, {VELOCITY}
 
+# Vehicle stopped/started animations
+STR_VEHICLE_COMMAND_STOPPED_SMALL                               :{TINYFONT}{RED}Stopped
+STR_VEHICLE_COMMAND_STOPPED                                     :{RED}Stopped
+STR_VEHICLE_COMMAND_STARTED_SMALL                               :{TINYFONT}{GREEN}Started
+STR_VEHICLE_COMMAND_STARTED                                     :{GREEN}Started
+
 # Vehicle details
 STR_VEHICLE_DETAILS_CAPTION                                     :{WHITE}{VEHICLE} (Details)
 STR_VEHICLE_NAME_BUTTON                                         :{BLACK}Name
--- a/src/network/network_command.cpp
+++ b/src/network/network_command.cpp
@@ -49,6 +49,7 @@
 	/* 0x16 */ CcFoundRandomTown,
 	/* 0x17 */ CcRoadStop,
 	/* 0x18 */ CcBuildIndustry,
+	/* 0x19 */ CcStartStopVehicle,
 };
 
 /** Local queue of packets */
--- a/src/vehicle_cmd.cpp
+++ b/src/vehicle_cmd.cpp
@@ -64,7 +64,7 @@
 /** Start/Stop a vehicle
  * @param tile unused
  * @param flags type of operation
- * @param p1 vehicle to start/stop
+ * @param p1 vehicle to start/stop, don't forget to change CcStartStopVehicle if you modify this!
  * @param p2 bit 0: Shall the start/stop newgrf callback be evaluated (only valid with DC_AUTOREPLACE for network safety)
  * @param text unused
  * @return the cost of this operation or an error
--- a/src/vehicle_gui.cpp
+++ b/src/vehicle_gui.cpp
@@ -1869,13 +1869,33 @@
 };
 
 /**
+ * This is the Callback method after the cloning attempt of a vehicle
+ * @param result the result of the cloning command
+ * @param tile unused
+ * @param p1 vehicle ID
+ * @param p2 unused
+ */
+void CcStartStopVehicle(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
+{
+	if (result.Failed()) return;
+
+	const Vehicle *v = Vehicle::GetIfValid(p1);
+	if (v == NULL || !v->IsPrimaryVehicle() || v->owner != _local_company) return;
+
+	StringID msg = (v->vehstatus & VS_STOPPED) ? STR_VEHICLE_COMMAND_STOPPED : STR_VEHICLE_COMMAND_STARTED;
+	Point pt = RemapCoords(v->x_pos, v->y_pos, v->z_pos);
+	AddTextEffect(msg, pt.x, pt.y, DAY_TICKS, TE_RISING);
+}
+
+/**
  * Executes #CMD_START_STOP_VEHICLE for given vehicle.
  * @param v Vehicle to start/stop
+ * @param texteffect Should a texteffect be shown?
  */
-void StartStopVehicle(const Vehicle *v)
+void StartStopVehicle(const Vehicle *v, bool texteffect)
 {
 	assert(v->IsPrimaryVehicle());
-	DoCommandP(v->tile, v->index, 0, _vehicle_command_translation_table[VCT_CMD_START_STOP][v->type]);
+	DoCommandP(v->tile, v->index, 0, _vehicle_command_translation_table[VCT_CMD_START_STOP][v->type], texteffect ? CcStartStopVehicle : NULL);
 }
 
 /** Checks whether the vehicle may be refitted at the moment.*/
@@ -2129,7 +2149,7 @@
 					if (tile != INVALID_TILE) ScrollMainWindowToTile(tile);
 				} else {
 					/* Start/Stop */
-					StartStopVehicle(v);
+					StartStopVehicle(v, false);
 				}
 				break;
 			case VVW_WIDGET_CENTER_MAIN_VIEH: {// center main view
--- a/src/vehicle_gui.h
+++ b/src/vehicle_gui.h
@@ -108,7 +108,7 @@
 
 /* Unified window procedure */
 void ShowVehicleViewWindow(const Vehicle *v);
-void StartStopVehicle(const Vehicle *v);
+void StartStopVehicle(const Vehicle *v, bool texteffect);
 
 Vehicle *CheckClickOnVehicle(const struct ViewPort *vp, int x, int y);
 
--- a/src/viewport.cpp
+++ b/src/viewport.cpp
@@ -1811,7 +1811,14 @@
 	v = CheckClickOnVehicle(vp, x, y);
 	if (v != NULL) {
 		DEBUG(misc, 2, "Vehicle %d (index %d) at %p", v->unitnumber, v->index, v);
-		if (IsCompanyBuildableVehicleType(v)) ShowVehicleViewWindow(v->First());
+		if (IsCompanyBuildableVehicleType(v)) {
+			v = v->First();
+			if (_ctrl_pressed && v->owner == _local_company) {
+				StartStopVehicle(v, true);
+			} else {
+				ShowVehicleViewWindow(v);
+			}
+		}
 		return true;
 	}
 	return CheckClickOnLandscape(vp, x, y);