mirror of https://github.com/OpenTTD/OpenTTD
Codechange: Iterate group vehicle lists for GenerateVehicleSortList
parent
021817aa61
commit
b9627b36b9
|
@ -116,8 +116,11 @@ bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &vli
|
|||
|
||||
switch (vli.type) {
|
||||
case VL_STATION_LIST:
|
||||
for (const Vehicle *v : Vehicle::Iterate()) {
|
||||
if (v->type == vli.vtype && v->IsPrimaryVehicle()) {
|
||||
for (const Company *c : Company::Iterate()) {
|
||||
/* Only iterate over all companies in the case of neutral Oil Rig stations */
|
||||
if (vli.company != c->index && vli.company != OWNER_NONE) continue;
|
||||
const VehicleList &vehicle_list = c->group_all[vli.vtype].vehicle_list;
|
||||
for (const Vehicle *v : vehicle_list) {
|
||||
for (const Order *order : v->Orders()) {
|
||||
if ((order->IsType(OT_GOTO_STATION) || order->IsType(OT_GOTO_WAYPOINT) || order->IsType(OT_IMPLICIT))
|
||||
&& order->GetDestination() == vli.index) {
|
||||
|
@ -141,28 +144,39 @@ bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &vli
|
|||
}
|
||||
|
||||
case VL_GROUP_LIST:
|
||||
if (vli.index != ALL_GROUP) {
|
||||
for (const Vehicle *v : Vehicle::Iterate()) {
|
||||
if (v->type == vli.vtype && v->IsPrimaryVehicle() &&
|
||||
v->owner == vli.company && GroupIsInGroup(v->group_id, vli.index)) {
|
||||
if (vli.index == DEFAULT_GROUP) {
|
||||
const VehicleList &vehicle_list = Company::Get(vli.company)->group_default[vli.vtype].vehicle_list;
|
||||
for (const Vehicle *v : vehicle_list) {
|
||||
list->push_back(v);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (vli.index != ALL_GROUP) {
|
||||
for (const Group *g : Group::Iterate()) {
|
||||
if (g->owner != vli.company || g->vehicle_type != vli.vtype) continue;
|
||||
if (GroupIsInGroup(g->index, vli.index)) {
|
||||
const VehicleList &vehicle_list = g->statistics.vehicle_list;
|
||||
for (const Vehicle *v : vehicle_list) {
|
||||
list->push_back(v);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
FALLTHROUGH;
|
||||
|
||||
case VL_STANDARD:
|
||||
for (const Vehicle *v : Vehicle::Iterate()) {
|
||||
if (v->type == vli.vtype && v->owner == vli.company && v->IsPrimaryVehicle()) {
|
||||
case VL_STANDARD: {
|
||||
const VehicleList &vehicle_list = Company::Get(vli.company)->group_all[vli.vtype].vehicle_list;
|
||||
for (const Vehicle *v : vehicle_list) {
|
||||
list->push_back(v);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case VL_DEPOT_LIST:
|
||||
for (const Vehicle *v : Vehicle::Iterate()) {
|
||||
if (v->type == vli.vtype && v->IsPrimaryVehicle()) {
|
||||
case VL_DEPOT_LIST: {
|
||||
const VehicleList &vehicle_list = Company::Get(vli.company)->group_all[vli.vtype].vehicle_list;
|
||||
for (const Vehicle *v : vehicle_list) {
|
||||
for (const Order *order : v->Orders()) {
|
||||
if (order->IsType(OT_GOTO_DEPOT) && !(order->GetDepotActionType() & ODATFB_NEAREST_DEPOT) && order->GetDestination() == vli.index) {
|
||||
list->push_back(v);
|
||||
|
@ -170,8 +184,8 @@ bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &vli
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default: return false;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue