summaryrefslogtreecommitdiff
path: root/plugins/sort.cpp
diff options
context:
space:
mode:
authorAlexander Gavrilov2012-04-25 18:28:00 +0400
committerAlexander Gavrilov2012-04-25 18:28:00 +0400
commit1cd802d426831d1f1939648bf0e8d224a7c4b862 (patch)
treef7978411757bbb36b2030829a20954ac7889fb3f /plugins/sort.cpp
parent763a301b4f928bf20c78fb67f864e1623409c710 (diff)
downloaddfhack-1cd802d426831d1f1939648bf0e8d224a7c4b862.tar.gz
dfhack-1cd802d426831d1f1939648bf0e8d224a7c4b862.tar.bz2
dfhack-1cd802d426831d1f1939648bf0e8d224a7c4b862.tar.xz
Implement unit sorting for the pen zone assignment interface.
Diffstat (limited to 'plugins/sort.cpp')
-rw-r--r--plugins/sort.cpp41
1 files changed, 33 insertions, 8 deletions
diff --git a/plugins/sort.cpp b/plugins/sort.cpp
index 965702b5..9d63b2c6 100644
--- a/plugins/sort.cpp
+++ b/plugins/sort.cpp
@@ -34,9 +34,12 @@ using namespace df::enums;
using df::global::ui;
using df::global::world;
-using df::global::ui_building_in_owner;
+using df::global::ui_building_in_assign;
using df::global::ui_building_item_cursor;
-using df::global::ui_owner_candidates;
+using df::global::ui_building_assign_type;
+using df::global::ui_building_assign_is_marked;
+using df::global::ui_building_assign_units;
+using df::global::ui_building_assign_items;
static bool unit_list_hotkey(df::viewscreen *top);
@@ -452,22 +455,44 @@ static bool maybe_sort_units(color_ostream *pout, lua_State *L,
return true;
case ui_sidebar_mode::QueryBuilding:
- if (ui_building_in_owner && *ui_building_in_owner &&
- ui_owner_candidates && ui_building_item_cursor)
+ if (!ui_building_in_assign || !*ui_building_in_assign)
+ return false;
+ // fall through for building owner / chain assign animal
+
+ case ui_sidebar_mode::ZonesPenInfo:
+ if (ui_building_item_cursor &&
+ ui_building_assign_type &&
+ ui_building_assign_is_marked &&
+ ui_building_assign_units &&
+ ui_building_assign_items &&
+ ui_building_assign_type->size() == ui_building_assign_units->size() &&
+ !ui_building_assign_type->empty())
{
if (!L) return true;
/*
- * Sort building owner candidate units in the 'q' sidebar mode.
+ * Sort building owner candidate units in the 'q' sidebar mode,
+ * or pen assignment candidate units in 'z'->'N', or cage assignment.
*/
- sort_null_first(parameters);
+ // TODO: better way
+ bool is_assign_owner = ((*ui_building_assign_type)[0] == -1);
+
+ if (is_assign_owner)
+ sort_null_first(parameters);
+
PARSE_SPEC("units", parameters);
- if (compute_order(*pout, L, top, &order, *ui_owner_candidates))
+ if (compute_order(*pout, L, top, &order, *ui_building_assign_units))
{
reorder_cursor(ui_building_item_cursor, order);
- reorder_vector(ui_owner_candidates, order);
+ reorder_vector(ui_building_assign_type, order);
+ reorder_vector(ui_building_assign_units, order);
+
+ if (ui_building_assign_units->size() == ui_building_assign_items->size())
+ reorder_vector(ui_building_assign_items, order);
+ if (ui_building_assign_units->size() == ui_building_assign_is_marked->size())
+ reorder_vector(ui_building_assign_is_marked, order);
}
return true;