Enable all plan modes when entering quickfort mode

develop
Anuradha Dissanayake 2013-02-09 16:49:36 +13:00
parent 2f4979d3fa
commit a5c21745eb
1 changed files with 47 additions and 8 deletions

@ -180,6 +180,12 @@ static void for_each_(vector<T> &v, Fn func)
for_each(v.begin(), v.end(), func);
}
template <class T, class V, typename Fn>
static void for_each_(map<T, V> &v, Fn func)
{
for_each(v.begin(), v.end(), func);
}
template <class T, class V, typename Fn>
static void transform_(vector<T> &src, vector<V> &dst, Fn func)
{
@ -1069,10 +1075,12 @@ private:
};
static map<df::building_type, bool> planmode_enabled, saved_planmodes;
class Planner
{
public:
bool quickfort_mode, in_dummmy_screen;
bool in_dummmy_screen;
Planner() : quickfort_mode(false), in_dummmy_screen(false)
{
@ -1138,6 +1146,11 @@ public:
default_item_filters[btype] = ItemFilter();
available_item_vectors[itype] = vector<df::item *>();
is_relevant_item_type[itype] = true;
if (planmode_enabled.find(btype) == planmode_enabled.end())
{
planmode_enabled[btype] = false;
}
}
}
}
@ -1236,12 +1249,32 @@ public:
(*quality) = item_quality::Ordinary;
}
void enableQuickfortMode()
{
saved_planmodes = planmode_enabled;
for_each_(planmode_enabled,
[] (pair<const df::building_type, bool>& pair) { pair.second = true; } );
quickfort_mode = true;
}
void disableQuickfortMode()
{
planmode_enabled = saved_planmodes;
quickfort_mode = false;
}
bool inQuickFortMode()
{
return quickfort_mode;
}
private:
map<df::building_type, df::item_type> item_for_building_type;
map<df::building_type, ItemFilter> default_item_filters;
map<df::item_type, vector<df::item *>> available_item_vectors;
map<df::item_type, bool> is_relevant_item_type; //Needed for fast check when looping over all items
bool quickfort_mode;
vector<PlannedBuilding> planned_buildings;
@ -1297,12 +1330,11 @@ private:
static Planner planner;
static map<df::building_type, bool> planmode_enabled;
static bool is_planmode_enabled(df::building_type type)
{
if (planmode_enabled.find(type) == planmode_enabled.end())
{
planmode_enabled[type] = false;
return false;
}
return planmode_enabled[type];
@ -1368,7 +1400,7 @@ struct buildingplan_hook : public df::viewscreen_dwarfmodest
if (is_planmode_enabled(type))
{
if (planner.quickfort_mode && planner.in_dummmy_screen)
if (planner.inQuickFortMode() && planner.in_dummmy_screen)
{
if (input->count(interface_key::SELECT) || input->count(interface_key::SEC_SELECT)
|| input->count(interface_key::LEAVESCREEN))
@ -1386,7 +1418,7 @@ struct buildingplan_hook : public df::viewscreen_dwarfmodest
{
send_key(interface_key::CURSOR_DOWN_Z);
send_key(interface_key::CURSOR_UP_Z);
if (planner.quickfort_mode)
if (planner.inQuickFortMode())
{
planner.in_dummmy_screen = true;
}
@ -1396,7 +1428,14 @@ struct buildingplan_hook : public df::viewscreen_dwarfmodest
}
else if (input->count(interface_key::CUSTOM_F))
{
planner.quickfort_mode = !planner.quickfort_mode;
if (!planner.inQuickFortMode())
{
planner.enableQuickfortMode();
}
else
{
planner.disableQuickfortMode();
}
}
else if (input->count(interface_key::CUSTOM_M))
{
@ -1469,7 +1508,7 @@ struct buildingplan_hook : public df::viewscreen_dwarfmodest
auto type = ui_build_selector->building_type;
if (plannable)
{
if (planner.quickfort_mode && planner.in_dummmy_screen)
if (planner.inQuickFortMode() && planner.in_dummmy_screen)
{
Screen::Pen pen(' ',COLOR_BLACK);
int y = dims.y1 + 1;
@ -1488,7 +1527,7 @@ struct buildingplan_hook : public df::viewscreen_dwarfmodest
if (is_planmode_enabled(type))
{
OutputToggleString(x, y, "Quickfort Mode", "f", planner.quickfort_mode, true, left_margin);
OutputToggleString(x, y, "Quickfort Mode", "f", planner.inQuickFortMode(), true, left_margin);
auto filter = planner.getDefaultItemFilterForType(type);