1
0
Fork 0

Codechange: Iterate group vehicle lists for GenerateVehicleSortList

pull/10548/head
SamuXarick 2023-03-07 22:46:17 +00:00
parent 021817aa61
commit b9627b36b9
1 changed files with 33 additions and 19 deletions

View File

@ -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;
}