TBTR: Show empty and full train weights in GUI, and weight ratios if enabled

This commit is contained in:
Jonathan G Rennison
2020-08-28 18:37:50 +01:00
parent e2de103d82
commit beaeda2990
10 changed files with 117 additions and 20 deletions

View File

@@ -3800,6 +3800,9 @@ bool AfterLoadGame()
AfterLoadTraceRestrict();
AfterLoadTemplateVehiclesUpdateImage();
if (SlXvIsFeaturePresent(XSLFI_TEMPLATE_REPLACEMENT, 1, 5)) {
AfterLoadTemplateVehiclesUpdateProperties();
}
InvalidateVehicleTickCaches();
ClearVehicleTickCaches();
@@ -3892,4 +3895,5 @@ void ReloadNewGRFData()
MarkWholeScreenDirty();
CheckTrainsLengths();
AfterLoadTemplateVehiclesUpdateImage();
AfterLoadTemplateVehiclesUpdateProperties();
}

View File

@@ -91,7 +91,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
{ XSLFI_REVERSE_AT_WAYPOINT, XSCF_NULL, 1, 1, "reverse_at_waypoint", nullptr, nullptr, nullptr },
{ XSLFI_VEH_LIFETIME_PROFIT, XSCF_NULL, 1, 1, "veh_lifetime_profit", nullptr, nullptr, nullptr },
{ XSLFI_LINKGRAPH_DAY_SCALE, XSCF_NULL, 1, 1, "linkgraph_day_scale", nullptr, nullptr, nullptr },
{ XSLFI_TEMPLATE_REPLACEMENT, XSCF_NULL, 5, 5, "template_replacement", nullptr, nullptr, "TRPL,TMPL" },
{ XSLFI_TEMPLATE_REPLACEMENT, XSCF_NULL, 6, 6, "template_replacement", nullptr, nullptr, "TRPL,TMPL" },
{ XSLFI_MORE_RAIL_TYPES, XSCF_NULL, 0, 1, "more_rail_types", nullptr, nullptr, nullptr },
{ XSLFI_CARGO_TYPE_ORDERS, XSCF_NULL, 3, 3, "cargo_type_orders", nullptr, nullptr, "ORDX,VEOX" },
{ XSLFI_EXTENDED_GAMELOG, XSCF_NULL, 1, 1, "extended_gamelog", nullptr, nullptr, nullptr },

View File

@@ -51,6 +51,7 @@ Engine *GetTempDataEngine(EngineID index);
void CopyTempEngineData();
void AfterLoadTemplateVehiclesUpdateImage();
void AfterLoadTemplateVehiclesUpdateProperties();
extern int32 _saved_scrollpos_x;
extern int32 _saved_scrollpos_y;

View File

@@ -37,7 +37,8 @@ const SaveLoad* GTD() {
SLE_VAR(TemplateVehicle, max_speed, SLE_UINT16),
SLE_VAR(TemplateVehicle, power, SLE_UINT32),
SLE_VAR(TemplateVehicle, weight, SLE_UINT32),
SLE_VAR(TemplateVehicle, empty_weight, SLE_UINT32),
SLE_CONDVAR_X(TemplateVehicle, full_weight, SLE_UINT32, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 6)),
SLE_VAR(TemplateVehicle, max_te, SLE_UINT32),
SLE_CONDNULL_X(1, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 0, 3)),
@@ -144,6 +145,36 @@ void AfterLoadTemplateVehiclesUpdateImage()
RestoreRandomSeeds(saved_seeds);
}
void AfterLoadTemplateVehiclesUpdateProperties()
{
SavedRandomSeeds saved_seeds;
SaveRandomSeeds(&saved_seeds);
for (TemplateVehicle *tv : TemplateVehicle::Iterate()) {
if (tv->Prev() == nullptr) {
Backup<CompanyID> cur_company(_current_company, tv->owner, FILE_LINE);
StringID err;
Train* t = VirtualTrainFromTemplateVehicle(tv, err);
if (t != nullptr) {
uint32 full_cargo_weight = 0;
for (Train *u = t; u != nullptr; u = u->Next()) {
full_cargo_weight += u->GetCargoWeight(u->cargo_cap);
}
const GroundVehicleCache *gcache = t->GetGroundVehicleCache();
tv->max_speed = t->GetDisplayMaxSpeed();
tv->power = gcache->cached_power;
tv->empty_weight = gcache->cached_weight;
tv->full_weight = gcache->cached_weight + full_cargo_weight;
tv->max_te = gcache->cached_max_te;
delete t;
}
cur_company.Restore();
}
}
RestoreRandomSeeds(saved_seeds);
}
extern const ChunkHandler _template_vehicle_chunk_handlers[] = {
{'TMPL', Save_TMPLS, Load_TMPLS, Ptrs_TMPLS, nullptr, CH_ARRAY | CH_LAST},
};