Debug: Show all sprite groups for vehicles in debug window
This commit is contained in:
@@ -1622,7 +1622,9 @@ void AnalyseEngineCallbacks()
|
|||||||
void DumpVehicleSpriteGroup(const Vehicle *v, DumpSpriteGroupPrinter print)
|
void DumpVehicleSpriteGroup(const Vehicle *v, DumpSpriteGroupPrinter print)
|
||||||
{
|
{
|
||||||
char buffer[512];
|
char buffer[512];
|
||||||
|
const Engine *e = Engine::Get(v->engine_type);
|
||||||
const SpriteGroup *root_spritegroup = nullptr;
|
const SpriteGroup *root_spritegroup = nullptr;
|
||||||
|
|
||||||
if (v->IsGroundVehicle()) {
|
if (v->IsGroundVehicle()) {
|
||||||
root_spritegroup = GetWagonOverrideSpriteSet(v->engine_type, v->cargo_type, v->GetGroundVehicleCache()->first_engine);
|
root_spritegroup = GetWagonOverrideSpriteSet(v->engine_type, v->cargo_type, v->GetGroundVehicleCache()->first_engine);
|
||||||
if (root_spritegroup != nullptr) {
|
if (root_spritegroup != nullptr) {
|
||||||
@@ -1632,7 +1634,6 @@ void DumpVehicleSpriteGroup(const Vehicle *v, DumpSpriteGroupPrinter print)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (root_spritegroup == nullptr) {
|
if (root_spritegroup == nullptr) {
|
||||||
const Engine *e = Engine::Get(v->engine_type);
|
|
||||||
CargoID cargo = v->cargo_type;
|
CargoID cargo = v->cargo_type;
|
||||||
assert(cargo < lengthof(e->grf_prop.spritegroup));
|
assert(cargo < lengthof(e->grf_prop.spritegroup));
|
||||||
if (e->grf_prop.spritegroup[cargo] != nullptr) {
|
if (e->grf_prop.spritegroup[cargo] != nullptr) {
|
||||||
@@ -1644,5 +1645,33 @@ void DumpVehicleSpriteGroup(const Vehicle *v, DumpSpriteGroupPrinter print)
|
|||||||
}
|
}
|
||||||
print(nullptr, DSGPO_PRINT, 0, buffer);
|
print(nullptr, DSGPO_PRINT, 0, buffer);
|
||||||
}
|
}
|
||||||
DumpSpriteGroup(root_spritegroup, std::move(print));
|
|
||||||
|
SpriteGroupDumper dumper(print);
|
||||||
|
dumper.DumpSpriteGroup(root_spritegroup, 0, 0);
|
||||||
|
|
||||||
|
for (uint i = 0; i < NUM_CARGO + 2; i++) {
|
||||||
|
if (e->grf_prop.spritegroup[i] != root_spritegroup && e->grf_prop.spritegroup[i] != nullptr) {
|
||||||
|
print(nullptr, DSGPO_PRINT, 0, "");
|
||||||
|
switch (i) {
|
||||||
|
case CT_DEFAULT:
|
||||||
|
seprintf(buffer, lastof(buffer), "OTHER SPRITE GROUP: CT_DEFAULT");
|
||||||
|
break;
|
||||||
|
case CT_PURCHASE:
|
||||||
|
seprintf(buffer, lastof(buffer), "OTHER SPRITE GROUP: CT_PURCHASE");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
seprintf(buffer, lastof(buffer), "OTHER SPRITE GROUP: Cargo: %u", i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
print(nullptr, DSGPO_PRINT, 0, buffer);
|
||||||
|
dumper.DumpSpriteGroup(e->grf_prop.spritegroup[i], 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (const WagonOverride &wo : e->overrides) {
|
||||||
|
if (wo.group != root_spritegroup && wo.group != nullptr) {
|
||||||
|
print(nullptr, DSGPO_PRINT, 0, "");
|
||||||
|
print(nullptr, DSGPO_PRINT, 0, "OTHER SPRITE GROUP: Wagon override");
|
||||||
|
dumper.DumpSpriteGroup(wo.group, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -609,24 +609,6 @@ const DrawTileSprites *TileLayoutSpriteGroup::ProcessRegisters(uint8 *stage) con
|
|||||||
return &result;
|
return &result;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct SpriteGroupDumper {
|
|
||||||
private:
|
|
||||||
char buffer[1024];
|
|
||||||
DumpSpriteGroupPrinter print_fn;
|
|
||||||
|
|
||||||
const SpriteGroup *top_default_group = nullptr;
|
|
||||||
btree::btree_set<const DeterministicSpriteGroup *> seen_dsgs;
|
|
||||||
|
|
||||||
enum SpriteGroupDumperFlags {
|
|
||||||
SGDF_DEFAULT = 1 << 0,
|
|
||||||
};
|
|
||||||
|
|
||||||
public:
|
|
||||||
SpriteGroupDumper(DumpSpriteGroupPrinter print) : print_fn(print) {}
|
|
||||||
|
|
||||||
void DumpSpriteGroup(const SpriteGroup *sg, int padding, uint flags);
|
|
||||||
};
|
|
||||||
|
|
||||||
static const char *_dsg_op_names[] {
|
static const char *_dsg_op_names[] {
|
||||||
"ADD",
|
"ADD",
|
||||||
"SUB",
|
"SUB",
|
||||||
|
@@ -587,6 +587,24 @@ enum DumpSpriteGroupPrintOp {
|
|||||||
|
|
||||||
using DumpSpriteGroupPrinter = std::function<void(const SpriteGroup *, DumpSpriteGroupPrintOp, uint32, const char *)>;
|
using DumpSpriteGroupPrinter = std::function<void(const SpriteGroup *, DumpSpriteGroupPrintOp, uint32, const char *)>;
|
||||||
|
|
||||||
|
struct SpriteGroupDumper {
|
||||||
|
private:
|
||||||
|
char buffer[1024];
|
||||||
|
DumpSpriteGroupPrinter print_fn;
|
||||||
|
|
||||||
|
const SpriteGroup *top_default_group = nullptr;
|
||||||
|
btree::btree_set<const DeterministicSpriteGroup *> seen_dsgs;
|
||||||
|
|
||||||
|
enum SpriteGroupDumperFlags {
|
||||||
|
SGDF_DEFAULT = 1 << 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
public:
|
||||||
|
SpriteGroupDumper(DumpSpriteGroupPrinter print) : print_fn(print) {}
|
||||||
|
|
||||||
|
void DumpSpriteGroup(const SpriteGroup *sg, int padding, uint flags);
|
||||||
|
};
|
||||||
|
|
||||||
void DumpSpriteGroup(const SpriteGroup *sg, DumpSpriteGroupPrinter print);
|
void DumpSpriteGroup(const SpriteGroup *sg, DumpSpriteGroupPrinter print);
|
||||||
uint32 EvaluateDeterministicSpriteGroupAdjust(DeterministicSpriteGroupSize size, const DeterministicSpriteGroupAdjust &adjust, ScopeResolver *scope, uint32 last_value, uint32 value);
|
uint32 EvaluateDeterministicSpriteGroupAdjust(DeterministicSpriteGroupSize size, const DeterministicSpriteGroupAdjust &adjust, ScopeResolver *scope, uint32 last_value, uint32 value);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user