Files
openttd/src/newgrf_dump.h
2024-05-30 19:05:32 +01:00

60 lines
2.0 KiB
C++

/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file newgrf_dump.h Functions/types related to NewGRF sprite group dumping. */
#ifndef NEWGRF_DUMP_H
#define NEWGRF_DUMP_H
#include "3rdparty/robin_hood/robin_hood.h"
#include <functional>
enum DumpSpriteGroupPrintOp {
DSGPO_PRINT,
DSGPO_START,
DSGPO_END,
DSGPO_NFO_LINE,
};
using DumpSpriteGroupPrinter = std::function<void(const struct SpriteGroup *, DumpSpriteGroupPrintOp, uint32_t, const char *)>;
struct SpriteGroupDumper {
bool use_shadows = false;
bool more_details = false;
private:
char buffer[1024];
DumpSpriteGroupPrinter print_fn;
const SpriteGroup *top_default_group = nullptr;
const SpriteGroup *top_graphics_group = nullptr;
robin_hood::unordered_flat_set<const struct DeterministicSpriteGroup *> seen_dsgs;
enum SpriteGroupDumperFlags {
SGDF_DEFAULT = 1 << 0,
SGDF_RANGE = 1 << 1,
};
char *DumpSpriteGroupAdjust(char *p, const char *last, const struct DeterministicSpriteGroupAdjust &adjust, const char *padding, uint32_t &highlight_tag, uint &conditional_indent);
void DumpSpriteGroup(const struct SpriteGroup *sg, const char *prefix, uint flags);
public:
SpriteGroupDumper(DumpSpriteGroupPrinter print) : print_fn(print) {}
void DumpSpriteGroup(const SpriteGroup *sg, uint flags)
{
this->DumpSpriteGroup(sg, "", flags);
}
void Print(const char *msg)
{
this->print_fn(nullptr, DSGPO_PRINT, 0, msg);
}
};
#endif /* NEWGRF_DEBUG_H */