#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 *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);