Make tweak stable-cursor interact with the build menu properly.

develop
Alexander Gavrilov 2012-11-22 20:08:47 +04:00
parent e7905a5cff
commit 2a0d048040
2 changed files with 20 additions and 3 deletions

@ -11,6 +11,7 @@ DFHack future
- added a small stand-alone utility for applying and removing binary patches. - added a small stand-alone utility for applying and removing binary patches.
- removebadthoughts: add --dry-run option - removebadthoughts: add --dry-run option
- superdwarf: work in adventure mode too - superdwarf: work in adventure mode too
- tweak stable-cursor: carries cursor location from/to Build menu.
New tweaks: New tweaks:
- tweak military-training: speed up melee squad training up to 10x (normally 3-5x). - tweak military-training: speed up melee squad training up to 10x (normally 3-5x).
New scripts: New scripts:

@ -212,15 +212,31 @@ struct stable_cursor_hook : df::viewscreen_dwarfmodest
{ {
typedef df::viewscreen_dwarfmodest interpose_base; typedef df::viewscreen_dwarfmodest interpose_base;
bool check_default()
{
switch (ui->main.mode) {
case ui_sidebar_mode::Default:
return true;
case ui_sidebar_mode::Build:
return ui_build_selector &&
(ui_build_selector->building_type < 0 ||
ui_build_selector->stage < 1);
default:
return false;
}
}
DEFINE_VMETHOD_INTERPOSE(void, feed, (set<df::interface_key> *input)) DEFINE_VMETHOD_INTERPOSE(void, feed, (set<df::interface_key> *input))
{ {
bool was_default = (ui->main.mode == df::ui_sidebar_mode::Default); bool was_default = check_default();
df::coord view = Gui::getViewportPos(); df::coord view = Gui::getViewportPos();
df::coord cursor = Gui::getCursorPos(); df::coord cursor = Gui::getCursorPos();
INTERPOSE_NEXT(feed)(input); INTERPOSE_NEXT(feed)(input);
bool is_default = (ui->main.mode == df::ui_sidebar_mode::Default); bool is_default = check_default();
df::coord cur_cursor = Gui::getCursorPos(); df::coord cur_cursor = Gui::getCursorPos();
if (is_default && !was_default) if (is_default && !was_default)
@ -241,7 +257,7 @@ struct stable_cursor_hook : df::viewscreen_dwarfmodest
tmp.insert(interface_key::CURSOR_UP_Z); tmp.insert(interface_key::CURSOR_UP_Z);
INTERPOSE_NEXT(feed)(&tmp); INTERPOSE_NEXT(feed)(&tmp);
} }
else if (cur_cursor.isValid()) else if (!is_default && cur_cursor.isValid())
{ {
last_cursor = df::coord(); last_cursor = df::coord();
} }