|
|
|
@ -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
|
|
|
|
|