Mercurial > hg > openttd
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);