diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/depot_gui.cpp | 1 | ||||
-rw-r--r-- | src/vehicle.cpp | 132 | ||||
-rw-r--r-- | src/vehicle_func.h | 2 | ||||
-rw-r--r-- | src/vehicle_gui.cpp | 1 | ||||
-rw-r--r-- | src/vehicle_type.h | 3 | ||||
-rw-r--r-- | src/vehiclelist.cpp | 144 | ||||
-rw-r--r-- | src/vehiclelist.h | 15 |
7 files changed, 162 insertions, 136 deletions
diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index d767c395e..cbec1179c 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -26,6 +26,7 @@ #include "depot_base.h" #include "tilehighlight_func.h" #include "window_gui.h" +#include "vehiclelist.h" #include "table/strings.h" #include "table/sprites.h" diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 54c379edd..34f255994 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -51,6 +51,7 @@ #include "animated_tile_func.h" #include "effectvehicle_base.h" #include "core/alloc_func.hpp" +#include "vehiclelist.h" #include "table/sprites.h" #include "table/strings.h" @@ -1292,137 +1293,6 @@ CommandCost CmdCloneVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) } /** - * Generate a list of vehicles inside a depot. - * @param type Type of vehicle - * @param tile The tile the depot is located on - * @param engines Pointer to list to add vehicles to - * @param wagons Pointer to list to add wagons to (can be NULL) - */ -void BuildDepotVehicleList(VehicleType type, TileIndex tile, VehicleList *engines, VehicleList *wagons) -{ - engines->Clear(); - if (wagons != NULL && wagons != engines) wagons->Clear(); - - const Vehicle *v; - FOR_ALL_VEHICLES(v) { - /* General tests for all vehicle types */ - if (v->type != type) continue; - if (v->tile != tile) continue; - - switch (type) { - case VEH_TRAIN: - if (v->u.rail.track != TRACK_BIT_DEPOT) continue; - if (wagons != NULL && IsFreeWagon(v)) { - *wagons->Append() = v; - continue; - } - break; - - default: - if (!v->IsInDepot()) continue; - break; - } - - if (!v->IsPrimaryVehicle()) continue; - - *engines->Append() = v; - } - - /* Ensure the lists are not wasting too much space. If the lists are fresh - * (i.e. built within a command) then this will actually do nothing. */ - engines->Compact(); - if (wagons != NULL && wagons != engines) wagons->Compact(); -} - -/** - * Generate a list of vehicles based on window type. - * @param list Pointer to list to add vehicles to - * @param type Type of vehicle - * @param owner Player to generate list for - * @param index This parameter has different meanings depending on window_type - * <ul> - * <li>VLW_STATION_LIST: index of station to generate a list for</li> - * <li>VLW_SHARED_ORDERS: index of order to generate a list for<li> - * <li>VLW_STANDARD: not used<li> - * <li>VLW_DEPOT_LIST: TileIndex of the depot/hangar to make the list for</li> - * <li>VLW_GROUP_LIST: index of group to generate a list for</li> - * </ul> - * @param window_type The type of window the list is for, using the VLW_ flags in vehicle_gui.h - */ -void GenerateVehicleSortList(VehicleList *list, VehicleType type, PlayerID owner, uint32 index, uint16 window_type) -{ - list->Clear(); - - const Vehicle *v; - - switch (window_type) { - case VLW_STATION_LIST: - FOR_ALL_VEHICLES(v) { - if (v->type == type && v->IsPrimaryVehicle()) { - const Order *order; - - FOR_VEHICLE_ORDERS(v, order) { - if (order->IsType(OT_GOTO_STATION) && order->GetDestination() == index) { - *list->Append() = v; - break; - } - } - } - } - break; - - case VLW_SHARED_ORDERS: - FOR_ALL_VEHICLES(v) { - /* Find a vehicle with the order in question */ - if (v->orders != NULL && v->orders->index == index) { - /* Add all vehicles from this vehicle's shared order list */ - for (v = GetFirstVehicleFromSharedList(v); v != NULL; v = v->next_shared) { - *list->Append() = v; - } - break; - } - } - break; - - case VLW_STANDARD: - FOR_ALL_VEHICLES(v) { - if (v->type == type && v->owner == owner && v->IsPrimaryVehicle()) { - *list->Append() = v; - } - } - break; - - case VLW_DEPOT_LIST: - FOR_ALL_VEHICLES(v) { - if (v->type == type && v->IsPrimaryVehicle()) { - const Order *order; - - FOR_VEHICLE_ORDERS(v, order) { - if (order->IsType(OT_GOTO_DEPOT) && order->GetDestination() == index) { - *list->Append() = v; - break; - } - } - } - } - break; - - case VLW_GROUP_LIST: - FOR_ALL_VEHICLES(v) { - if (v->type == type && v->IsPrimaryVehicle() && - v->owner == owner && v->group_id == index) { - *list->Append() = v; - } - } - break; - - default: NOT_REACHED(); break; - } - - list->Compact(); -} - -/** * Send all vehicles of type to depots * @param type type of vehicle * @param flags the flags used for DoCommand() diff --git a/src/vehicle_func.h b/src/vehicle_func.h index 84870b59d..c232b9d68 100644 --- a/src/vehicle_func.h +++ b/src/vehicle_func.h @@ -68,8 +68,6 @@ void TrainConsistChanged(Vehicle *v); void TrainPowerChanged(Vehicle *v); Money GetTrainRunningCost(const Vehicle *v); -void GenerateVehicleSortList(VehicleList *list, VehicleType type, PlayerID owner, uint32 index, uint16 window_type); -void BuildDepotVehicleList(VehicleType type, TileIndex tile, VehicleList *engine_list, VehicleList *wagon_list); CommandCost SendAllVehiclesToDepot(VehicleType type, uint32 flags, bool service, PlayerID owner, uint16 vlw_flag, uint32 id); void VehicleEnterDepot(Vehicle *v); diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 36ee986e6..ea9f9f735 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -36,6 +36,7 @@ #include "widgets/dropdown_func.h" #include "order_func.h" #include "timetable.h" +#include "vehiclelist.h" #include "table/sprites.h" #include "table/strings.h" diff --git a/src/vehicle_type.h b/src/vehicle_type.h index 5241f96c6..79495cd1c 100644 --- a/src/vehicle_type.h +++ b/src/vehicle_type.h @@ -6,7 +6,6 @@ #define VEHICLE_TYPE_H #include "core/enum_type.hpp" -#include "misc/smallvec.h" typedef uint16 VehicleID; @@ -57,6 +56,4 @@ enum DepotCommand { DEPOT_COMMAND_MASK = 0xF, }; -typedef SmallVector<const Vehicle*, 32> VehicleList; - #endif /* VEHICLE_TYPE_H */ diff --git a/src/vehiclelist.cpp b/src/vehiclelist.cpp new file mode 100644 index 000000000..a76a34538 --- /dev/null +++ b/src/vehiclelist.cpp @@ -0,0 +1,144 @@ +/* $Id$ */ + +/** @file vehicle.cpp Base implementations of all vehicles. */ + +#include "stdafx.h" +#include "openttd.h" +#include "vehicle_type.h" +#include "vehicle_func.h" +#include "vehicle_base.h" +#include "vehicle_gui.h" +#include "core/alloc_func.hpp" +#include "train.h" +#include "vehiclelist.h" + +/** + * Generate a list of vehicles inside a depot. + * @param type Type of vehicle + * @param tile The tile the depot is located on + * @param engines Pointer to list to add vehicles to + * @param wagons Pointer to list to add wagons to (can be NULL) + */ +void BuildDepotVehicleList(VehicleType type, TileIndex tile, VehicleList *engines, VehicleList *wagons) +{ + engines->Clear(); + if (wagons != NULL && wagons != engines) wagons->Clear(); + + const Vehicle *v; + FOR_ALL_VEHICLES(v) { + /* General tests for all vehicle types */ + if (v->type != type) continue; + if (v->tile != tile) continue; + + switch (type) { + case VEH_TRAIN: + if (v->u.rail.track != TRACK_BIT_DEPOT) continue; + if (wagons != NULL && IsFreeWagon(v)) { + *wagons->Append() = v; + continue; + } + break; + + default: + if (!v->IsInDepot()) continue; + break; + } + + if (!v->IsPrimaryVehicle()) continue; + + *engines->Append() = v; + } + + /* Ensure the lists are not wasting too much space. If the lists are fresh + * (i.e. built within a command) then this will actually do nothing. */ + engines->Compact(); + if (wagons != NULL && wagons != engines) wagons->Compact(); +} + +/** + * Generate a list of vehicles based on window type. + * @param list Pointer to list to add vehicles to + * @param type Type of vehicle + * @param owner Player to generate list for + * @param index This parameter has different meanings depending on window_type + * <ul> + * <li>VLW_STATION_LIST: index of station to generate a list for</li> + * <li>VLW_SHARED_ORDERS: index of order to generate a list for<li> + * <li>VLW_STANDARD: not used<li> + * <li>VLW_DEPOT_LIST: TileIndex of the depot/hangar to make the list for</li> + * <li>VLW_GROUP_LIST: index of group to generate a list for</li> + * </ul> + * @param window_type The type of window the list is for, using the VLW_ flags in vehicle_gui.h + */ +void GenerateVehicleSortList(VehicleList *list, VehicleType type, PlayerID owner, uint32 index, uint16 window_type) +{ + list->Clear(); + + const Vehicle *v; + + switch (window_type) { + case VLW_STATION_LIST: + FOR_ALL_VEHICLES(v) { + if (v->type == type && v->IsPrimaryVehicle()) { + const Order *order; + + FOR_VEHICLE_ORDERS(v, order) { + if (order->IsType(OT_GOTO_STATION) && order->GetDestination() == index) { + *list->Append() = v; + break; + } + } + } + } + break; + + case VLW_SHARED_ORDERS: + FOR_ALL_VEHICLES(v) { + /* Find a vehicle with the order in question */ + if (v->orders != NULL && v->orders->index == index) { + /* Add all vehicles from this vehicle's shared order list */ + for (v = GetFirstVehicleFromSharedList(v); v != NULL; v = v->next_shared) { + *list->Append() = v; + } + break; + } + } + break; + + case VLW_STANDARD: + FOR_ALL_VEHICLES(v) { + if (v->type == type && v->owner == owner && v->IsPrimaryVehicle()) { + *list->Append() = v; + } + } + break; + + case VLW_DEPOT_LIST: + FOR_ALL_VEHICLES(v) { + if (v->type == type && v->IsPrimaryVehicle()) { + const Order *order; + + FOR_VEHICLE_ORDERS(v, order) { + if (order->IsType(OT_GOTO_DEPOT) && order->GetDestination() == index) { + *list->Append() = v; + break; + } + } + } + } + break; + + case VLW_GROUP_LIST: + FOR_ALL_VEHICLES(v) { + if (v->type == type && v->IsPrimaryVehicle() && + v->owner == owner && v->group_id == index) { + *list->Append() = v; + } + } + break; + + default: NOT_REACHED(); break; + } + + list->Compact(); +} diff --git a/src/vehiclelist.h b/src/vehiclelist.h new file mode 100644 index 000000000..93a643e5a --- /dev/null +++ b/src/vehiclelist.h @@ -0,0 +1,15 @@ +/* $Id$ */ + +/** @file vehiclelist.h Functions and type for generating vehicle lists. */ + +#ifndef VEHICLELIST_H +#define VEHICLELIST_H + +#include "misc/smallvec.h" + +typedef SmallVector<const Vehicle *, 32> VehicleList; + +void GenerateVehicleSortList(VehicleList *list, VehicleType type, PlayerID owner, uint32 index, uint16 window_type); +void BuildDepotVehicleList(VehicleType type, TileIndex tile, VehicleList *engine_list, VehicleList *wagon_list); + +#endif /* VEHICLELIST_H */ |