diff options
| author | Alexander Gavrilov | 2012-04-25 18:28:00 +0400 |
|---|---|---|
| committer | Alexander Gavrilov | 2012-04-25 18:28:00 +0400 |
| commit | 1cd802d426831d1f1939648bf0e8d224a7c4b862 (patch) | |
| tree | f7978411757bbb36b2030829a20954ac7889fb3f /plugins/sort.cpp | |
| parent | 763a301b4f928bf20c78fb67f864e1623409c710 (diff) | |
| download | dfhack-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.cpp | 41 |
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; |
