dfhack/plugins/tweak/tweaks/kitchen-prefs-all.h

70 lines
2.4 KiB
C++

#include "modules/Kitchen.h"
#include "df/interface_key.h"
#include "df/layer_object_listst.h"
#include "df/viewscreen_kitchenprefst.h"
using namespace DFHack;
struct kitchen_prefs_all_hook : df::viewscreen_kitchenprefst {
typedef df::viewscreen_kitchenprefst interpose_base;
DEFINE_VMETHOD_INTERPOSE(void, feed, (std::set<df::interface_key> *input))
{
df::kitchen_pref_flag flag;
df::kitchen_exc_type exc_type;
if (input->count(interface_key::CUSTOM_SHIFT_C))
{
flag.bits.Cook = true;
exc_type = df::kitchen_exc_type::Cook;
}
else if (input->count(interface_key::CUSTOM_SHIFT_B))
{
flag.bits.Brew = true;
exc_type = df::kitchen_exc_type::Brew;
}
if (flag.whole && size_t(cursor) < forbidden[page].size())
{
bool was_forbidden = forbidden[page][cursor].whole & flag.whole;
for (size_t i = 0; i < forbidden[page].size(); i++)
{
if (possible[page][i].whole & flag.whole)
{
if (was_forbidden)
{
// unset flag
forbidden[page][i].whole &= ~flag.whole;
Kitchen::removeExclusion(exc_type,
item_type[page][i], item_subtype[page][i],
mat_type[page][i], mat_index[page][i]);
}
else
{
// set flag
forbidden[page][i].whole |= flag.whole;
Kitchen::addExclusion(exc_type,
item_type[page][i], item_subtype[page][i],
mat_type[page][i], mat_index[page][i]);
}
}
}
}
INTERPOSE_NEXT(feed)(input);
}
DEFINE_VMETHOD_INTERPOSE(void, render, ())
{
INTERPOSE_NEXT(render)();
int x = 2, y = gps->dimy - 2;
OutputHotkeyString(x, y, "Cook all", interface_key::CUSTOM_SHIFT_C,
false, 0, COLOR_WHITE, COLOR_LIGHTRED);
x = 20;
OutputHotkeyString(x, y, "Brew all", interface_key::CUSTOM_SHIFT_B,
false, 0, COLOR_WHITE, COLOR_LIGHTRED);
}
};
IMPLEMENT_VMETHOD_INTERPOSE(kitchen_prefs_all_hook, render);
IMPLEMENT_VMETHOD_INTERPOSE(kitchen_prefs_all_hook, feed);