summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/command_func.h1
-rw-r--r--src/depot_gui.cpp2
-rw-r--r--src/lang/english.txt6
-rw-r--r--src/network/network_command.cpp1
-rw-r--r--src/vehicle_cmd.cpp2
-rw-r--r--src/vehicle_gui.cpp26
-rw-r--r--src/vehicle_gui.h2
-rw-r--r--src/viewport.cpp9
8 files changed, 42 insertions, 7 deletions
diff --git a/src/command_func.h b/src/command_func.h
index b7738f4ef..462867a38 100644
--- a/src/command_func.h
+++ b/src/command_func.h
@@ -140,5 +140,6 @@ CommandCallback CcFoundRandomTown;
/* vehicle_gui.cpp */
CommandCallback CcBuildPrimaryVehicle;
+CommandCallback CcStartStopVehicle;
#endif /* COMMAND_FUNC_H */
diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp
index e6d5dfc7c..f663dcd57 100644
--- a/src/depot_gui.cpp
+++ b/src/depot_gui.cpp
@@ -509,7 +509,7 @@ struct DepotWindow : Window {
break;
case MODE_START_STOP: // click start/stop flag
- StartStopVehicle(v);
+ StartStopVehicle(v, false);
break;
default: NOT_REACHED();
diff --git a/src/lang/english.txt b/src/lang/english.txt
index ba1fedece..3f2bec04a 100644
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -2967,6 +2967,12 @@ STR_VEHICLE_STATUS_HEADING_FOR_SHIP_DEPOT_SERVICE_VEL :{LTBLUE}Service
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
diff --git a/src/network/network_command.cpp b/src/network/network_command.cpp
index 725b034d0..71724b509 100644
--- a/src/network/network_command.cpp
+++ b/src/network/network_command.cpp
@@ -49,6 +49,7 @@ static CommandCallback * const _callback_table[] = {
/* 0x16 */ CcFoundRandomTown,
/* 0x17 */ CcRoadStop,
/* 0x18 */ CcBuildIndustry,
+ /* 0x19 */ CcStartStopVehicle,
};
/** Local queue of packets */
diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp
index c621ed271..19c0016e1 100644
--- a/src/vehicle_cmd.cpp
+++ b/src/vehicle_cmd.cpp
@@ -64,7 +64,7 @@ const uint32 _send_to_depot_proc_table[] = {
/** 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
diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp
index db638838c..89a3f9430 100644
--- a/src/vehicle_gui.cpp
+++ b/src/vehicle_gui.cpp
@@ -1869,13 +1869,33 @@ static const uint32 _vehicle_command_translation_table[][4] = {
};
/**
+ * 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 @@ public:
if (tile != INVALID_TILE) ScrollMainWindowToTile(tile);
} else {
/* Start/Stop */
- StartStopVehicle(v);
+ StartStopVehicle(v, false);
}
break;
case VVW_WIDGET_CENTER_MAIN_VIEH: {// center main view
diff --git a/src/vehicle_gui.h b/src/vehicle_gui.h
index 029737204..07dda47fc 100644
--- a/src/vehicle_gui.h
+++ b/src/vehicle_gui.h
@@ -108,7 +108,7 @@ static inline WindowClass GetWindowClassForVehicleType(VehicleType vt)
/* 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);
diff --git a/src/viewport.cpp b/src/viewport.cpp
index 52488e140..18999d341 100644
--- a/src/viewport.cpp
+++ b/src/viewport.cpp
@@ -1811,7 +1811,14 @@ bool HandleViewportClicked(const ViewPort *vp, int x, int y)
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);