70 lines
2.4 KiB
C++
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 && 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);
|