diff options
author | bjarni <bjarni@openttd.org> | 2006-08-30 23:01:45 +0000 |
---|---|---|
committer | bjarni <bjarni@openttd.org> | 2006-08-30 23:01:45 +0000 |
commit | e2f8ef4f725b991e6f082e7f746024951ad48a14 (patch) | |
tree | 6a3d86da825371df4091d7d15c07bafed940be72 | |
parent | 65c03f32ee5adb8a3b51aaebd46d6aa84ad9f15c (diff) | |
download | openttd-e2f8ef4f725b991e6f082e7f746024951ad48a14.tar.xz |
(svn r6249) -Fix: fixed assert when pressing goto depot in an empty list (forgot to disable the button in this condition)
-Code cleanup r6246: simplified SendAllVehiclesToDepot() and moved an { in PlayerVehWndProc()
-rw-r--r-- | vehicle.c | 35 | ||||
-rw-r--r-- | vehicle_gui.c | 52 |
2 files changed, 39 insertions, 48 deletions
@@ -1908,31 +1908,22 @@ static void MaybeReplaceVehicle(Vehicle *v) int32 SendAllVehiclesToDepot(byte type, uint32 flags, bool service, PlayerID owner) { const uint subtype = (type != VEH_Aircraft) ? Train_Front : 2; - if (flags & DC_EXEC) { + const Vehicle *v; + /* Send all the vehicles to a depot */ - const Vehicle *v; - FOR_ALL_VEHICLES(v) { - if (v->type == type && v->owner == owner && ( - (type == VEH_Train && IsFrontEngine(v)) || - (type != VEH_Train && v->subtype <= subtype))) { - DoCommand(v->tile, v->index, service, flags, CMD_SEND_TO_DEPOT(type)); - } - } - } else { - /* See if we can find a vehicle to send to a depot */ - const Vehicle *v; - FOR_ALL_VEHICLES(v) { - if (v->type == type && v->owner == owner && ( - (type == VEH_Train && IsFrontEngine(v)) || - (type != VEH_Train && v->subtype <= subtype))) { - /* We found one vehicle to send to a depot. No need to search for more. The command is valid */ - if (!DoCommand(v->tile, v->index, service, flags, CMD_SEND_TO_DEPOT(type))) return 0; - } + FOR_ALL_VEHICLES(v) { + if (v->type == type && v->owner == owner && ( + (type == VEH_Train && IsFrontEngine(v)) || + (type != VEH_Train && v->subtype <= subtype))) { + /* Return 0 if DC_EXEC is not set and a DoCommand() returns 0 (valid goto depot command) */ + /* In this case we know that at least one vehicle can be send to a depot and we will issue the command */ + /* Since we will issue the command nomatter how many vehicles more than one it's valid for, we skip checking the rest */ + /* When DC_EXEC is set, we need to run this loop for all vehicles nomatter return values from each vehicle */ + if (!DoCommand(v->tile, v->index, service, flags, CMD_SEND_TO_DEPOT(type)) && !(flags & DC_EXEC)) return 0; } - - return CMD_ERROR; } - return 0; + + return (flags & DC_EXEC) ? 0 : CMD_ERROR; } diff --git a/vehicle_gui.c b/vehicle_gui.c index dd9b39154..b79ae41d6 100644 --- a/vehicle_gui.c +++ b/vehicle_gui.c @@ -1268,6 +1268,7 @@ void PlayerVehWndProc(Window *w, WindowEvent *e) SetDParam(0, p->name_1); SetDParam(1, p->name_2); SetDParam(2, w->vscroll.count); + if (vl->list_length == 0) SETBIT(w->disabled_state, 9); if (vehicle_type == VEH_Aircraft) { w->widget[9].unkA = STR_SEND_TO_HANGARS; w->widget[9].tooltips = STR_SEND_TO_HANGARS_TIP; @@ -1404,35 +1405,34 @@ void PlayerVehWndProc(Window *w, WindowEvent *e) } } break; - case 9: /* Left button */ + case 9: { /* Left button */ + uint16 window_type = w->window_number & VLW_FLAGS; if (GB(w->window_number, 0, 8) /* OwnerID */ != _local_player) break; - { - uint16 window_type = w->window_number & VLW_FLAGS; - switch (window_type) { - case VLW_STANDARD: - case VLW_SHARED_ORDERS: { - /* Send to depot */ - const Vehicle *v; - assert(vl->list_length != 0); - v = vl->sort_list[0]; - DoCommandP(v->tile, v->index, window_type | _ctrl_pressed ? 3 : 2, NULL, CMD_SEND_TO_DEPOT(vehicle_type)); - break; - } - - case VLW_STATION_LIST: - /* Build new Vehicle */ - switch (vehicle_type) { - case VEH_Train: ShowBuildTrainWindow(0); break; - case VEH_Road: ShowBuildRoadVehWindow(0); break; - case VEH_Ship: ShowBuildShipWindow(0); break; - case VEH_Aircraft: ShowBuildAircraftWindow(0); break; - default: NOT_REACHED(); break; - } - break; - default: NOT_REACHED(); break; + switch (window_type) { + case VLW_STANDARD: + case VLW_SHARED_ORDERS: { + /* Send to depot */ + const Vehicle *v; + assert(vl->list_length != 0); + v = vl->sort_list[0]; + DoCommandP(v->tile, v->index, window_type | _ctrl_pressed ? 3 : 2, NULL, CMD_SEND_TO_DEPOT(vehicle_type)); + break; } - break; + + case VLW_STATION_LIST: + /* Build new Vehicle */ + switch (vehicle_type) { + case VEH_Train: ShowBuildTrainWindow(0); break; + case VEH_Road: ShowBuildRoadVehWindow(0); break; + case VEH_Ship: ShowBuildShipWindow(0); break; + case VEH_Aircraft: ShowBuildAircraftWindow(0); break; + default: NOT_REACHED(); break; + } + break; + default: NOT_REACHED(); break; } + break; + } case 10: /* Right button */ ShowReplaceVehicleWindow(vehicle_type); |