From 3e54a136fdfcbd0de650db001b71054796f1a3f1 Mon Sep 17 00:00:00 2001 From: Phillip Spiess Date: Sun, 20 May 2018 20:50:42 -0700 Subject: [PATCH] Use two keys for min/max --- plugins/buildingplan-lib.cpp | 29 ++++++++++++++++++++++------- plugins/buildingplan-lib.h | 6 +++--- plugins/buildingplan.cpp | 17 ++++++++++++----- 3 files changed, 37 insertions(+), 15 deletions(-) diff --git a/plugins/buildingplan-lib.cpp b/plugins/buildingplan-lib.cpp index 2c2a2fb07..0d63a98e4 100644 --- a/plugins/buildingplan-lib.cpp +++ b/plugins/buildingplan-lib.cpp @@ -654,20 +654,35 @@ PlannedBuilding *Planner::getSelectedPlannedBuilding() return nullptr; } -void Planner::cycleMinQuality(df::building_type type) +void Planner::adjustMinQuality(df::building_type type, int amount) { - cycleItemQuality(&getDefaultItemFilterForType(type)->min_quality); + auto min_quality = &getDefaultItemFilterForType(type)->min_quality; + *min_quality = static_cast(*min_quality + amount); + + boundsCheckItemQuality(min_quality); + auto max_quality = &getDefaultItemFilterForType(type)->max_quality; + if (*min_quality > *max_quality) + (*max_quality) = *min_quality; + } -void Planner::cycleMaxQuality(df::building_type type) +void Planner::adjustMaxQuality(df::building_type type, int amount) { - cycleItemQuality(&getDefaultItemFilterForType(type)->max_quality); -} + auto max_quality = &getDefaultItemFilterForType(type)->max_quality; + *max_quality = static_cast(*max_quality + amount); + boundsCheckItemQuality(max_quality); + auto min_quality = &getDefaultItemFilterForType(type)->min_quality; + if (*max_quality < *min_quality) + (*min_quality) = *max_quality; +} -void Planner::cycleItemQuality(item_quality::item_quality *quality) { - *quality = static_cast(*quality + 1); +void Planner::boundsCheckItemQuality(item_quality::item_quality *quality) +{ + *quality = static_cast(*quality); if (*quality > item_quality::Artifact) + (*quality) = item_quality::Artifact; + if (*quality < item_quality::Ordinary) (*quality) = item_quality::Ordinary; } diff --git a/plugins/buildingplan-lib.h b/plugins/buildingplan-lib.h index 8ace8029b..0d66e3248 100644 --- a/plugins/buildingplan-lib.h +++ b/plugins/buildingplan-lib.h @@ -417,8 +417,8 @@ public: ItemFilter *getDefaultItemFilterForType(df::building_type type) { return &default_item_filters[type]; } - void cycleMinQuality(df::building_type type); - void cycleMaxQuality(df::building_type type); + void adjustMinQuality(df::building_type type, int amount); + void adjustMaxQuality(df::building_type type, int amount); void enableQuickfortMode() { @@ -445,7 +445,7 @@ private: std::vector planned_buildings; - void cycleItemQuality(item_quality::item_quality *quality); + void boundsCheckItemQuality(item_quality::item_quality *quality); void gather_available_items() { diff --git a/plugins/buildingplan.cpp b/plugins/buildingplan.cpp index e0aa3affd..df809e5ff 100644 --- a/plugins/buildingplan.cpp +++ b/plugins/buildingplan.cpp @@ -112,7 +112,6 @@ struct buildingplan_hook : public df::viewscreen_dwarfmodest } else if (input->count(interface_key::CUSTOM_P) || input->count(interface_key::CUSTOM_F) || - input->count(interface_key::CUSTOM_Q) || input->count(interface_key::CUSTOM_D) || input->count(interface_key::CUSTOM_N)) { @@ -163,11 +162,19 @@ struct buildingplan_hook : public df::viewscreen_dwarfmodest } else if (input->count(interface_key::CUSTOM_SHIFT_Q)) { - planner.cycleMinQuality(type); + planner.adjustMinQuality(type, 1); } else if (input->count(interface_key::CUSTOM_SHIFT_W)) { - planner.cycleMaxQuality(type); + planner.adjustMaxQuality(type, 1); + } + else if (input->count(interface_key::CUSTOM_Q)) + { + planner.adjustMinQuality(type, -1); + } + else if (input->count(interface_key::CUSTOM_W)) + { + planner.adjustMaxQuality(type, -1); } else if (input->count(interface_key::CUSTOM_SHIFT_D)) { @@ -275,10 +282,10 @@ struct buildingplan_hook : public df::viewscreen_dwarfmodest auto filter = planner.getDefaultItemFilterForType(type); - OutputHotkeyString(x, y, "Min Quality: ", "Q"); + OutputHotkeyString(x, y, "Min Quality: ", "qQ"); OutputString(COLOR_BROWN, x, y, filter->getMinQuality(), true, left_margin); - OutputHotkeyString(x, y, "Max Quality: ", "W"); + OutputHotkeyString(x, y, "Max Quality: ", "wW"); OutputString(COLOR_BROWN, x, y, filter->getMaxQuality(), true, left_margin); OutputToggleString(x, y, "Decorated Only: ", "D", filter->decorated_only, true, left_margin);