From 5dbfb5c272ba058dc0204b63fecb6e312aefa6b8 Mon Sep 17 00:00:00 2001 From: bjarni Date: Wed, 27 Sep 2006 12:17:33 +0000 Subject: [PATCH] (svn r6524) -Code cleanup r6515: cleaned up the command to start/stop all vehicles in a depot. IsWholeTrainInDepot() is removed as CheckTrainInDepot() could be used instead Cleaned up the check to see if a vehicle is valid for start/stop --- train.h | 8 +------- train_cmd.c | 2 +- vehicle.c | 14 +++++++++----- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/train.h b/train.h index bb0b309eb0..485e80b6f7 100644 --- a/train.h +++ b/train.h @@ -218,12 +218,6 @@ static inline Vehicle *GetNextVehicle(const Vehicle *v) void ConvertOldMultiheadToNew(void); void ConnectMultiheadedTrains(void); -static inline bool IsWholeTrainInDepot(const Vehicle *v) -{ - for (; v != NULL; v = v->next) { - if (!(v->vehstatus & VS_HIDDEN)) return false; - } - return true; -} +int CheckTrainInDepot(const Vehicle *v, bool needs_to_be_stopped); #endif /* TRAIN_H */ diff --git a/train_cmd.c b/train_cmd.c index c63941e59c..d3533ac394 100644 --- a/train_cmd.c +++ b/train_cmd.c @@ -832,7 +832,7 @@ int32 CmdBuildRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) /* Check if all the wagons of the given train are in a depot, returns the * number of cars (including loco) then. If not it returns -1 */ -static int CheckTrainInDepot(const Vehicle *v, bool needs_to_be_stopped) +int CheckTrainInDepot(const Vehicle *v, bool needs_to_be_stopped) { int count; TileIndex tile = v->tile; diff --git a/vehicle.c b/vehicle.c index 114d1f6242..e5cff4fdf0 100644 --- a/vehicle.c +++ b/vehicle.c @@ -1570,8 +1570,8 @@ int32 CmdMassStartStopVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2 int32 return_value = CMD_ERROR; uint i; uint stop_command; - byte vehicle_type = p1; - byte start_stop = p2; + byte vehicle_type = GB(p1, 0, 8); + bool start_stop = HASBIT(p2, 0); switch (vehicle_type) { case VEH_Train: stop_command = CMD_START_STOP_TRAIN; break; @@ -1589,8 +1589,12 @@ int32 CmdMassStartStopVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2 int32 ret; if (!!(v->vehstatus & VS_STOPPED) != start_stop) continue; - if (!(v->vehstatus & VS_HIDDEN)) continue; - if (p1 == VEH_Train && !IsWholeTrainInDepot(v)) continue; + if (vehicle_type == VEH_Train) { + if (CheckTrainInDepot(v, false) == -1) continue; + } else { + if (!(v->vehstatus & VS_HIDDEN)) continue; + } + ret = DoCommand(tile, v->index, 0, flags, stop_command); if (!CmdFailed(ret)) { @@ -1601,7 +1605,7 @@ int32 CmdMassStartStopVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2 } } - free((void*)vl); + free(vl); return return_value; }