diff options
author | frosch <frosch@openttd.org> | 2011-10-03 17:20:56 +0000 |
---|---|---|
committer | frosch <frosch@openttd.org> | 2011-10-03 17:20:56 +0000 |
commit | b78a459613320d5c45052ece08de55a574104530 (patch) | |
tree | 2f7f748ab13f9368ae53d735f5129ea110c407d5 /src/group_cmd.cpp | |
parent | b6766c2ed5fa7e3cb703e1dcfdeacb26cde7d07e (diff) | |
download | openttd-b78a459613320d5c45052ece08de55a574104530.tar.xz |
(svn r22977) -Codechange: Rename SetCachedEngineCounts() to GroupStatistics::UpdateAfterLoad().
Diffstat (limited to 'src/group_cmd.cpp')
-rw-r--r-- | src/group_cmd.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp index 1dfa8e258..d4148474f 100644 --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -54,6 +54,45 @@ void GroupStatistics::Clear() this->num_engines = CallocT<uint16>(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<EngineID>(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 |