Add console command to dump vehicle stats
This commit is contained in:
@@ -1968,6 +1968,20 @@ DEF_CONSOLE_CMD(ConDumpCpdpStats)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEF_CONSOLE_CMD(ConVehicleStats)
|
||||||
|
{
|
||||||
|
if (argc == 0) {
|
||||||
|
IConsoleHelp("Dump vehicle stats.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern void DumpVehicleStats(char *buffer, const char *last);
|
||||||
|
char buffer[32768];
|
||||||
|
DumpVehicleStats(buffer, lastof(buffer));
|
||||||
|
PrintLineByLine(buffer);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
DEF_CONSOLE_CMD(ConCheckCaches)
|
DEF_CONSOLE_CMD(ConCheckCaches)
|
||||||
{
|
{
|
||||||
if (argc == 0) {
|
if (argc == 0) {
|
||||||
@@ -2238,6 +2252,7 @@ void IConsoleStdLibRegister()
|
|||||||
IConsoleCmdRegister("dump_command_log", ConDumpCommandLog, nullptr, true);
|
IConsoleCmdRegister("dump_command_log", ConDumpCommandLog, nullptr, true);
|
||||||
IConsoleCmdRegister("dump_inflation", ConDumpInflation, nullptr, true);
|
IConsoleCmdRegister("dump_inflation", ConDumpInflation, nullptr, true);
|
||||||
IConsoleCmdRegister("dump_cpdp_stats", ConDumpCpdpStats, nullptr, true);
|
IConsoleCmdRegister("dump_cpdp_stats", ConDumpCpdpStats, nullptr, true);
|
||||||
|
IConsoleCmdRegister("dump_veh_stats", ConVehicleStats, nullptr, true);
|
||||||
IConsoleCmdRegister("check_caches", ConCheckCaches, nullptr, true);
|
IConsoleCmdRegister("check_caches", ConCheckCaches, nullptr, true);
|
||||||
|
|
||||||
/* NewGRF development stuff */
|
/* NewGRF development stuff */
|
||||||
|
@@ -3969,3 +3969,52 @@ void GetVehicleSet(VehicleSet &set, Vehicle *v, uint8 num_vehicles)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DumpVehicleStats(char *buffer, const char *last)
|
||||||
|
{
|
||||||
|
struct vtypestats {
|
||||||
|
uint count[2] = { 0, 0 };
|
||||||
|
|
||||||
|
bool IsEmpty() const { return (count[0] | count[1]) == 0; }
|
||||||
|
};
|
||||||
|
struct cstats {
|
||||||
|
vtypestats vstats[VEH_END];
|
||||||
|
vtypestats virt_train;
|
||||||
|
vtypestats template_train;
|
||||||
|
};
|
||||||
|
std::map<OwnerByte, cstats> cstatmap;
|
||||||
|
|
||||||
|
Vehicle *v;
|
||||||
|
FOR_ALL_VEHICLES(v) {
|
||||||
|
cstats &cs = cstatmap[v->owner];
|
||||||
|
vtypestats &vs = ((v->type == VEH_TRAIN) && Train::From(v)->IsVirtual()) ? cs.virt_train : cs.vstats[v->type];
|
||||||
|
vs.count[v->Previous() != nullptr ? 1 : 0]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TemplateVehicle *tv;
|
||||||
|
FOR_ALL_TEMPLATES(tv) {
|
||||||
|
cstats &cs = cstatmap[tv->owner];
|
||||||
|
cs.template_train.count[tv->Prev() != nullptr ? 1 : 0]++;
|
||||||
|
}
|
||||||
|
for (auto &it : cstatmap) {
|
||||||
|
buffer += seprintf(buffer, last, "%u: ", (uint) it.first);
|
||||||
|
SetDParam(0, it.first);
|
||||||
|
buffer = GetString(buffer, STR_COMPANY_NAME, last);
|
||||||
|
buffer += seprintf(buffer, last, "\n");
|
||||||
|
|
||||||
|
auto line = [&](vtypestats &vs, const char *type) {
|
||||||
|
if (vs.count[0] || vs.count[1]) {
|
||||||
|
buffer += seprintf(buffer, last, " %10s: primary: %5u, secondary: %5u\n", type, vs.count[0], vs.count[1]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
line(it.second.vstats[VEH_TRAIN], "train");
|
||||||
|
line(it.second.vstats[VEH_ROAD], "road");
|
||||||
|
line(it.second.vstats[VEH_SHIP], "ship");
|
||||||
|
line(it.second.vstats[VEH_AIRCRAFT], "aircraft");
|
||||||
|
line(it.second.vstats[VEH_EFFECT], "effect");
|
||||||
|
line(it.second.vstats[VEH_DISASTER], "disaster");
|
||||||
|
line(it.second.virt_train, "virt train");
|
||||||
|
line(it.second.template_train, "tmpl train");
|
||||||
|
buffer += seprintf(buffer, last, "\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user