New tweak: kitchen-prefs-color
Disabled in default dfhack.init to avoid confusiondevelop
parent
8d21dd0a23
commit
4246dbd02a
@ -0,0 +1,70 @@
|
||||
using namespace DFHack;
|
||||
using df::global::gps;
|
||||
|
||||
struct kitchen_prefs_color_hook : df::viewscreen_kitchenprefst {
|
||||
typedef df::viewscreen_kitchenprefst interpose_base;
|
||||
|
||||
static std::string read_string(unsigned x, unsigned y, size_t length)
|
||||
{
|
||||
std::string s;
|
||||
for ( ; length; x++, length--)
|
||||
{
|
||||
auto tile = Screen::readTile(x, y);
|
||||
if (!tile.valid())
|
||||
break;
|
||||
s += tile.ch;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
static void recolor(unsigned x, unsigned y, std::string str, UIColor color)
|
||||
{
|
||||
static Screen::Pen tile;
|
||||
for (unsigned i = 0; i < str.size(); i++)
|
||||
{
|
||||
tile = Screen::readTile(x + i, y);
|
||||
if (!tile.valid() || tile.ch != str[i])
|
||||
return;
|
||||
}
|
||||
for (unsigned i = 0; i < str.size(); i++)
|
||||
{
|
||||
tile = Screen::readTile(x + i, y);
|
||||
tile.fg = color;
|
||||
Screen::paintTile(tile, x + i, y);
|
||||
}
|
||||
}
|
||||
|
||||
DEFINE_VMETHOD_INTERPOSE(void, render, ())
|
||||
{
|
||||
INTERPOSE_NEXT(render)();
|
||||
/* DF uses a slightly complicated algorithm to position the Number and
|
||||
Permissions columns (i.e. not a constant distance from either margin).
|
||||
Detecting light blue "Cook" and "Brew" strings should be sufficient,
|
||||
but reverse-engineering the algorithm could be slightly faster. */
|
||||
|
||||
if (!item_type[page].size())
|
||||
return;
|
||||
|
||||
int start_x = 0,
|
||||
start_y = 6;
|
||||
for (int x = 0; x < gps->dimx; x++)
|
||||
{
|
||||
std::string word = read_string(x, start_y, 4);
|
||||
if (word == "Cook" || word == "----")
|
||||
{
|
||||
start_x = x;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!start_x)
|
||||
return;
|
||||
|
||||
for (int y = start_y; y < gps->dimy; y++)
|
||||
{
|
||||
recolor(start_x, y, "Cook", COLOR_GREEN);
|
||||
recolor(start_x + 5, y, "Brew", COLOR_GREEN);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
IMPLEMENT_VMETHOD_INTERPOSE(kitchen_prefs_color_hook, render);
|
Loading…
Reference in New Issue