vehiclelist.cpp

Go to the documentation of this file.
00001 /* $Id: vehiclelist.cpp 15299 2009-01-31 20:16:06Z smatz $ */
00002 
00005 #include "stdafx.h"
00006 #include "vehicle_gui.h"
00007 #include "train.h"
00008 #include "vehiclelist.h"
00009 
00018 void BuildDepotVehicleList(VehicleType type, TileIndex tile, VehicleList *engines, VehicleList *wagons, bool individual_wagons)
00019 {
00020   engines->Clear();
00021   if (wagons != NULL && wagons != engines) wagons->Clear();
00022 
00023   const Vehicle *v;
00024   FOR_ALL_VEHICLES(v) {
00025     /* General tests for all vehicle types */
00026     if (v->type != type) continue;
00027     if (v->tile != tile) continue;
00028 
00029     switch (type) {
00030       case VEH_TRAIN:
00031         if (IsArticulatedPart(v) || IsRearDualheaded(v)) continue;
00032         if (v->u.rail.track != TRACK_BIT_DEPOT) continue;
00033         if (wagons != NULL && IsFreeWagon(v->First())) {
00034           if (individual_wagons || IsFreeWagon(v)) *wagons->Append() = v;
00035           continue;
00036         }
00037         break;
00038 
00039       default:
00040         if (!v->IsInDepot()) continue;
00041         break;
00042     }
00043 
00044     if (!v->IsPrimaryVehicle()) continue;
00045 
00046     *engines->Append() = v;
00047   }
00048 
00049   /* Ensure the lists are not wasting too much space. If the lists are fresh
00050    * (i.e. built within a command) then this will actually do nothing. */
00051   engines->Compact();
00052   if (wagons != NULL && wagons != engines) wagons->Compact();
00053 }
00054 
00071 void GenerateVehicleSortList(VehicleList *list, VehicleType type, Owner owner, uint32 index, uint16 window_type)
00072 {
00073   list->Clear();
00074 
00075   const Vehicle *v;
00076 
00077   switch (window_type) {
00078     case VLW_STATION_LIST:
00079       FOR_ALL_VEHICLES(v) {
00080         if (v->type == type && v->IsPrimaryVehicle()) {
00081           const Order *order;
00082 
00083           FOR_VEHICLE_ORDERS(v, order) {
00084             if (order->IsType(OT_GOTO_STATION) && order->GetDestination() == index) {
00085               *list->Append() = v;
00086               break;
00087             }
00088           }
00089         }
00090       }
00091       break;
00092 
00093     case VLW_SHARED_ORDERS:
00094       /* Add all vehicles from this vehicle's shared order list */
00095       for (v = GetVehicle(index); v != NULL; v = v->NextShared()) {
00096         *list->Append() = v;
00097       }
00098       break;
00099 
00100     case VLW_STANDARD:
00101       FOR_ALL_VEHICLES(v) {
00102         if (v->type == type && v->owner == owner && v->IsPrimaryVehicle()) {
00103           *list->Append() = v;
00104         }
00105       }
00106       break;
00107 
00108     case VLW_DEPOT_LIST:
00109       FOR_ALL_VEHICLES(v) {
00110         if (v->type == type && v->IsPrimaryVehicle()) {
00111           const Order *order;
00112 
00113           FOR_VEHICLE_ORDERS(v, order) {
00114             if (order->IsType(OT_GOTO_DEPOT) && !(order->GetDepotActionType() & ODATFB_NEAREST_DEPOT) && order->GetDestination() == index) {
00115               *list->Append() = v;
00116               break;
00117             }
00118           }
00119         }
00120       }
00121       break;
00122 
00123     case VLW_WAYPOINT_LIST:
00124       FOR_ALL_VEHICLES(v) {
00125         if (v->type == type && v->IsPrimaryVehicle()) {
00126           const Order *order;
00127 
00128           FOR_VEHICLE_ORDERS(v, order) {
00129             if (order->IsType(OT_GOTO_WAYPOINT) && order->GetDestination() == index) {
00130               *list->Append() = v;
00131               break;
00132             }
00133           }
00134         }
00135       }
00136       break;
00137 
00138     case VLW_GROUP_LIST:
00139       FOR_ALL_VEHICLES(v) {
00140         if (v->type == type && v->IsPrimaryVehicle() &&
00141             v->owner == owner && v->group_id == index) {
00142           *list->Append() = v;
00143         }
00144       }
00145       break;
00146 
00147     default: NOT_REACHED(); break;
00148   }
00149 
00150   list->Compact();
00151 }

Generated on Wed Dec 23 20:12:53 2009 for OpenTTD by  doxygen 1.5.6