generalize burrow code to other unit assignment screens
parent
09e3ed427a
commit
e41017a26b
@ -1,70 +0,0 @@
|
|||||||
local _ENV = mkmodule('plugins.sort.burrows')
|
|
||||||
|
|
||||||
local sortoverlay = require('plugins.sort.sortoverlay')
|
|
||||||
local widgets = require('gui.widgets')
|
|
||||||
|
|
||||||
local unit_selector = df.global.game.main_interface.unit_selector
|
|
||||||
|
|
||||||
-- ----------------------
|
|
||||||
-- BurrowOverlay
|
|
||||||
--
|
|
||||||
|
|
||||||
BurrowOverlay = defclass(BurrowOverlay, sortoverlay.SortOverlay)
|
|
||||||
BurrowOverlay.ATTRS{
|
|
||||||
default_pos={x=62, y=6},
|
|
||||||
viewscreens='dwarfmode/UnitSelector/BURROW_ASSIGNMENT',
|
|
||||||
frame={w=26, h=1},
|
|
||||||
}
|
|
||||||
|
|
||||||
local function get_unit_id_search_key(unit_id)
|
|
||||||
local unit = df.unit.find(unit_id)
|
|
||||||
if not unit then return end
|
|
||||||
return ('%s %s %s'):format(
|
|
||||||
dfhack.units.getReadableName(unit), -- last name is in english
|
|
||||||
dfhack.units.getProfessionName(unit),
|
|
||||||
dfhack.TranslateName(unit.name, false, true)) -- get untranslated last name
|
|
||||||
end
|
|
||||||
|
|
||||||
function BurrowOverlay:init()
|
|
||||||
self:addviews{
|
|
||||||
widgets.BannerPanel{
|
|
||||||
frame={l=0, t=0, r=0, h=1},
|
|
||||||
subviews={
|
|
||||||
widgets.EditField{
|
|
||||||
view_id='search',
|
|
||||||
frame={l=1, t=0, r=1},
|
|
||||||
label_text="Search: ",
|
|
||||||
key='CUSTOM_ALT_S',
|
|
||||||
on_change=function(text) self:do_search(text) end,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
self:register_handler('BURROW', unit_selector.unid,
|
|
||||||
curry(sortoverlay.flags_vector_search, {get_search_key_fn=get_unit_id_search_key},
|
|
||||||
unit_selector.selected))
|
|
||||||
end
|
|
||||||
|
|
||||||
function BurrowOverlay:get_key()
|
|
||||||
if unit_selector.context == df.unit_selector_context_type.BURROW_ASSIGNMENT then
|
|
||||||
return 'BURROW'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function BurrowOverlay:onRenderBody(dc)
|
|
||||||
BurrowOverlay.super.onRenderBody(self, dc)
|
|
||||||
if self.refresh_search then
|
|
||||||
self.refresh_search = nil
|
|
||||||
self:do_search(self.subviews.search.text)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function BurrowOverlay:onInput(keys)
|
|
||||||
if keys._MOUSE_L then
|
|
||||||
self.refresh_search = true
|
|
||||||
end
|
|
||||||
return BurrowOverlay.super.onInput(self, keys)
|
|
||||||
end
|
|
||||||
|
|
||||||
return _ENV
|
|
@ -0,0 +1,91 @@
|
|||||||
|
local _ENV = mkmodule('plugins.sort.unitselector')
|
||||||
|
|
||||||
|
local sortoverlay = require('plugins.sort.sortoverlay')
|
||||||
|
local widgets = require('gui.widgets')
|
||||||
|
|
||||||
|
local unit_selector = df.global.game.main_interface.unit_selector
|
||||||
|
|
||||||
|
-- pen, pit, chain, and cage assignment are handled by dedicated screens
|
||||||
|
-- squad fill position screen has a specialized overlay
|
||||||
|
-- we *could* add search functionality to vanilla screens for pit and cage,
|
||||||
|
-- but then we'd have to handle the itemid vector
|
||||||
|
local HANDLED_SCREENS = {
|
||||||
|
ZONE_BEDROOM_ASSIGNMENT='already',
|
||||||
|
ZONE_OFFICE_ASSIGNMENT='already',
|
||||||
|
ZONE_DINING_HALL_ASSIGNMENT='already',
|
||||||
|
ZONE_TOMB_ASSIGNMENT='already',
|
||||||
|
-- this one should technically appear further to the left, but when the screen
|
||||||
|
-- gets small enough that that matters, the vanilla widgets are unreadable
|
||||||
|
WORKER_ASSIGNMENT='selected',
|
||||||
|
OCCUPATION_ASSIGNMENT='selected',
|
||||||
|
BURROW_ASSIGNMENT='selected',
|
||||||
|
SQUAD_KILL_ORDER='selected',
|
||||||
|
}
|
||||||
|
|
||||||
|
-- ----------------------
|
||||||
|
-- UnitSelectorOverlay
|
||||||
|
--
|
||||||
|
|
||||||
|
UnitSelectorOverlay = defclass(UnitSelectorOverlay, sortoverlay.SortOverlay)
|
||||||
|
UnitSelectorOverlay.ATTRS{
|
||||||
|
default_pos={x=62, y=6},
|
||||||
|
viewscreens='dwarfmode/UnitSelector',
|
||||||
|
frame={w=26, h=1},
|
||||||
|
}
|
||||||
|
|
||||||
|
local function get_unit_id_search_key(unit_id)
|
||||||
|
local unit = df.unit.find(unit_id)
|
||||||
|
if not unit then return end
|
||||||
|
return ('%s %s %s'):format(
|
||||||
|
dfhack.units.getReadableName(unit), -- last name is in english
|
||||||
|
dfhack.units.getProfessionName(unit),
|
||||||
|
dfhack.TranslateName(unit.name, false, true)) -- get untranslated last name
|
||||||
|
end
|
||||||
|
|
||||||
|
function UnitSelectorOverlay:init()
|
||||||
|
self:addviews{
|
||||||
|
widgets.BannerPanel{
|
||||||
|
frame={l=0, t=0, r=0, h=1},
|
||||||
|
visible=self:callback('get_key'),
|
||||||
|
subviews={
|
||||||
|
widgets.EditField{
|
||||||
|
view_id='search',
|
||||||
|
frame={l=1, t=0, r=1},
|
||||||
|
label_text="Search: ",
|
||||||
|
key='CUSTOM_ALT_S',
|
||||||
|
on_change=function(text) self:do_search(text) end,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for name,flags_vec in pairs(HANDLED_SCREENS) do
|
||||||
|
self:register_handler(name, unit_selector.unid,
|
||||||
|
curry(sortoverlay.flags_vector_search, {get_search_key_fn=get_unit_id_search_key},
|
||||||
|
unit_selector[flags_vec]))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function UnitSelectorOverlay:get_key()
|
||||||
|
local key = df.unit_selector_context_type[unit_selector.context]
|
||||||
|
if HANDLED_SCREENS[key] then
|
||||||
|
return key
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function UnitSelectorOverlay:onRenderBody(dc)
|
||||||
|
UnitSelectorOverlay.super.onRenderBody(self, dc)
|
||||||
|
if self.refresh_search then
|
||||||
|
self.refresh_search = nil
|
||||||
|
self:do_search(self.subviews.search.text)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function UnitSelectorOverlay:onInput(keys)
|
||||||
|
if keys._MOUSE_L then
|
||||||
|
self.refresh_search = true
|
||||||
|
end
|
||||||
|
return UnitSelectorOverlay.super.onInput(self, keys)
|
||||||
|
end
|
||||||
|
|
||||||
|
return _ENV
|
Loading…
Reference in New Issue