# HG changeset patch # User frosch # Date 1317662456 0 # Node ID 545be3b5f43e1383fa6eff92aaf0c09ccff2ec91 # Parent 98b63013cba33cddde94151eaf2fb63ecc125fae (svn r22977) -Codechange: Rename SetCachedEngineCounts() to GroupStatistics::UpdateAfterLoad(). diff --git a/src/engine.cpp b/src/engine.cpp --- a/src/engine.cpp +++ b/src/engine.cpp @@ -461,45 +461,6 @@ } /** - * Sets cached values in Company::num_vehicles and Group::num_vehicles - */ -void SetCachedEngineCounts() -{ - size_t engines = Engine::GetPoolSize(); - - /* Set up the engine count for all companies */ - Company *c; - FOR_ALL_COMPANIES(c) { - free(c->num_engines); - c->num_engines = CallocT(engines); - } - - /* Recalculate */ - Group *g; - FOR_ALL_GROUPS(g) { - g->statistics.Clear(); - } - - const Vehicle *v; - FOR_ALL_VEHICLES(v) { - if (!v->IsEngineCountable()) continue; - - assert(v->engine_type < engines); - - Company::Get(v->owner)->num_engines[v->engine_type]++; - - if (v->group_id == DEFAULT_GROUP) continue; - - g = Group::Get(v->group_id); - assert(v->type == g->vehicle_type); - assert(v->owner == g->owner); - - g->statistics.num_engines[v->engine_type]++; - if (v->IsPrimaryVehicle()) g->statistics.num_vehicle++; - } -} - -/** * Initialise the engine pool with the data from the original vehicles. */ void SetupEngines() diff --git a/src/engine_func.h b/src/engine_func.h --- a/src/engine_func.h +++ b/src/engine_func.h @@ -25,7 +25,6 @@ bool IsEngineBuildable(EngineID engine, VehicleType type, CompanyID company); bool IsEngineRefittable(EngineID engine); -void SetCachedEngineCounts(); void SetYearEngineAgingStops(); void StartupOneEngine(Engine *e, Date aging_date); diff --git a/src/group.h b/src/group.h --- a/src/group.h +++ b/src/group.h @@ -30,6 +30,8 @@ ~GroupStatistics(); void Clear(); + + static void UpdateAfterLoad(); }; /** Group data. */ diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -54,6 +54,45 @@ this->num_engines = CallocT(Engine::GetPoolSize()); } +/** + * Update all caches after loading a game, changing NewGRF etc.. + */ +/* static */ void GroupStatistics::UpdateAfterLoad() +{ + size_t engines = Engine::GetPoolSize(); + + /* Set up the engine count for all companies */ + Company *c; + FOR_ALL_COMPANIES(c) { + free(c->num_engines); + c->num_engines = CallocT(engines); + } + + /* Recalculate */ + Group *g; + FOR_ALL_GROUPS(g) { + g->statistics.Clear(); + } + + const Vehicle *v; + FOR_ALL_VEHICLES(v) { + if (!v->IsEngineCountable()) continue; + + assert(v->engine_type < engines); + + Company::Get(v->owner)->num_engines[v->engine_type]++; + + if (v->group_id == DEFAULT_GROUP) continue; + + g = Group::Get(v->group_id); + assert(v->type == g->vehicle_type); + assert(v->owner == g->owner); + + g->statistics.num_engines[v->engine_type]++; + if (v->IsPrimaryVehicle()) g->statistics.num_vehicle++; + } +} + /** * Update the num engines of a groupID. Decrease the old one and increase the new one diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -52,6 +52,7 @@ #include "../core/backup_type.hpp" #include "../smallmap_gui.h" #include "../news_func.h" +#include "../group.h" #include "table/strings.h" @@ -252,7 +253,7 @@ RecomputePrices(); - SetCachedEngineCounts(); + GroupStatistics::UpdateAfterLoad(); Station::RecomputeIndustriesNearForAll(); RebuildSubsidisedSourceAndDestinationCache(); @@ -2677,7 +2678,7 @@ ResetVehiclePosHash(); AfterLoadVehicles(false); StartupEngines(); - SetCachedEngineCounts(); + GroupStatistics::UpdateAfterLoad(); /* update station graphics */ AfterLoadStations(); /* Check and update house and town values */