Use front/vehicle type filtered iteration in ScriptVehicleList

pull/661/head
Jonathan G Rennison 7 months ago
parent ac683bc278
commit bd04aff725

@ -19,6 +19,36 @@
#include "../../safeguards.h" #include "../../safeguards.h"
struct FrontVehicleOnlyFillListHelper {
using IterType = Vehicle;
auto Iterate()
{
return Vehicle::IterateFrontOnly();
}
int OpcodeCharge(int item_count)
{
return item_count / 2;
}
};
struct VehicleTypeFrontVehicleOnlyFillListHelper {
using IterType = Vehicle;
::VehicleType vt;
auto Iterate()
{
return Vehicle::IterateTypeFrontOnly(this->vt);
}
int OpcodeCharge(int item_count)
{
return item_count / 2;
}
};
ScriptVehicleList::ScriptVehicleList(HSQUIRRELVM vm) ScriptVehicleList::ScriptVehicleList(HSQUIRRELVM vm)
{ {
EnforceDeityOrCompanyModeValid_Void(); EnforceDeityOrCompanyModeValid_Void();
@ -26,7 +56,7 @@ ScriptVehicleList::ScriptVehicleList(HSQUIRRELVM vm)
bool is_deity = ScriptCompanyMode::IsDeity(); bool is_deity = ScriptCompanyMode::IsDeity();
CompanyID owner = ScriptObject::GetCompany(); CompanyID owner = ScriptObject::GetCompany();
ScriptList::FillList<Vehicle>(vm, this, ScriptList::FillListT<FrontVehicleOnlyFillListHelper>({}, vm, this,
[is_deity, owner](const Vehicle *v) { [is_deity, owner](const Vehicle *v) {
return (is_deity || v->owner == owner) && (v->IsPrimaryVehicle() || (v->type == VEH_TRAIN && ::Train::From(v)->IsFreeWagon())); return (is_deity || v->owner == owner) && (v->IsPrimaryVehicle() || (v->type == VEH_TRAIN && ::Train::From(v)->IsFreeWagon()));
} }
@ -111,7 +141,7 @@ ScriptVehicleList_Group::ScriptVehicleList_Group(GroupID group_id)
CompanyID owner = ScriptObject::GetCompany(); CompanyID owner = ScriptObject::GetCompany();
ScriptList::FillList<Vehicle>(this, ScriptList::FillListT<FrontVehicleOnlyFillListHelper>({}, this,
[owner](const Vehicle *v) { return v->owner == owner && v->IsPrimaryVehicle(); }, [owner](const Vehicle *v) { return v->owner == owner && v->IsPrimaryVehicle(); },
[group_id](const Vehicle *v) { return v->group_id == group_id; } [group_id](const Vehicle *v) { return v->group_id == group_id; }
); );
@ -124,8 +154,8 @@ ScriptVehicleList_DefaultGroup::ScriptVehicleList_DefaultGroup(ScriptVehicle::Ve
CompanyID owner = ScriptObject::GetCompany(); CompanyID owner = ScriptObject::GetCompany();
ScriptList::FillList<Vehicle>(this, ScriptList::FillListT<VehicleTypeFrontVehicleOnlyFillListHelper>({ (::VehicleType)vehicle_type }, this,
[owner](const Vehicle *v) { return v->owner == owner && v->IsPrimaryVehicle(); }, [owner](const Vehicle *v) { return v->owner == owner && v->IsPrimaryVehicle(); },
[vehicle_type](const Vehicle *v) { return v->type == (::VehicleType)vehicle_type && v->group_id == ScriptGroup::GROUP_DEFAULT; } [](const Vehicle *v) { return v->group_id == ScriptGroup::GROUP_DEFAULT; }
); );
} }

Loading…
Cancel
Save