From b9627b36b9c500aff88929a746eace72a9460e72 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Tue, 7 Mar 2023 22:46:17 +0000 Subject: [PATCH] Codechange: Iterate group vehicle lists for GenerateVehicleSortList --- src/vehiclelist.cpp | 52 ++++++++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/src/vehiclelist.cpp b/src/vehiclelist.cpp index b7cbbb22b9..02da999760 100644 --- a/src/vehiclelist.cpp +++ b/src/vehiclelist.cpp @@ -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,37 +144,48 @@ bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &vli } case VL_GROUP_LIST: + 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 Vehicle *v : Vehicle::Iterate()) { - if (v->type == vli.vtype && v->IsPrimaryVehicle() && - v->owner == vli.company && GroupIsInGroup(v->group_id, vli.index)) { - list->push_back(v); + 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()) { - list->push_back(v); - } + 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()) { - 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); - break; - } + 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); + break; } } } break; + } default: return false; }