|
|
|
@ -161,9 +161,35 @@ InfoOverlay = defclass(InfoOverlay, sortoverlay.SortOverlay)
|
|
|
|
|
InfoOverlay.ATTRS{
|
|
|
|
|
default_pos={x=64, y=8},
|
|
|
|
|
viewscreens='dwarfmode/Info',
|
|
|
|
|
frame={w=40, h=5},
|
|
|
|
|
frame={w=40, h=6},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
local function get_squad_options()
|
|
|
|
|
local options = {{label='Any', value='all', pen=COLOR_GREEN}}
|
|
|
|
|
local fort = df.historical_entity.find(df.global.plotinfo.group_id)
|
|
|
|
|
if not fort then return options end
|
|
|
|
|
for _, squad_id in ipairs(fort.squads) do
|
|
|
|
|
table.insert(options, {
|
|
|
|
|
label=dfhack.military.getSquadName(squad_id),
|
|
|
|
|
value=squad_id,
|
|
|
|
|
pen=COLOR_YELLOW,
|
|
|
|
|
})
|
|
|
|
|
end
|
|
|
|
|
return options
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function get_burrow_options()
|
|
|
|
|
local options = {{label='Any', value='all', pen=COLOR_GREEN}}
|
|
|
|
|
for _, burrow in ipairs(df.global.plotinfo.burrows.list) do
|
|
|
|
|
table.insert(options, {
|
|
|
|
|
label=#burrow.name > 0 and burrow.name or ('Burrow %d'):format(burrow.id + 1),
|
|
|
|
|
value=burrow.id,
|
|
|
|
|
pen=COLOR_YELLOW,
|
|
|
|
|
})
|
|
|
|
|
end
|
|
|
|
|
return options
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function InfoOverlay:init()
|
|
|
|
|
self:addviews{
|
|
|
|
|
widgets.BannerPanel{
|
|
|
|
@ -181,7 +207,7 @@ function InfoOverlay:init()
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
widgets.BannerPanel{
|
|
|
|
|
view_id='filter_panel',
|
|
|
|
|
view_id='subset_panel',
|
|
|
|
|
frame={l=0, t=1, r=0, h=1},
|
|
|
|
|
visible=function() return self:get_key() == 'PET_WA' end,
|
|
|
|
|
subviews={
|
|
|
|
@ -194,7 +220,55 @@ function InfoOverlay:init()
|
|
|
|
|
{label='All', value='all', pen=COLOR_GREEN},
|
|
|
|
|
{label='Military', value='military', pen=COLOR_YELLOW},
|
|
|
|
|
{label='Civilians', value='civilian', pen=COLOR_CYAN},
|
|
|
|
|
{label='Burrowed', value='burrow', pen=COLOR_MAGENTA},
|
|
|
|
|
},
|
|
|
|
|
on_change=function(value)
|
|
|
|
|
local squad = self.subviews.squad
|
|
|
|
|
local burrow = self.subviews.burrow
|
|
|
|
|
squad.visible = false
|
|
|
|
|
burrow.visible = false
|
|
|
|
|
if value == 'military' then
|
|
|
|
|
squad.options = get_squad_options()
|
|
|
|
|
squad:setOption('all')
|
|
|
|
|
squad.visible = true
|
|
|
|
|
elseif value == 'burrow' then
|
|
|
|
|
burrow.options = get_burrow_options()
|
|
|
|
|
burrow:setOption('all')
|
|
|
|
|
burrow.visible = true
|
|
|
|
|
end
|
|
|
|
|
self:do_search(self.subviews.search.text, true)
|
|
|
|
|
end,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
widgets.BannerPanel{
|
|
|
|
|
view_id='subfilter_panel',
|
|
|
|
|
frame={l=0, t=2, r=0, h=1},
|
|
|
|
|
visible=function()
|
|
|
|
|
local subset = self.subviews.subset:getOptionValue()
|
|
|
|
|
return self:get_key() == 'PET_WA' and (subset == 'military' or subset == 'burrow')
|
|
|
|
|
end,
|
|
|
|
|
subviews={
|
|
|
|
|
widgets.CycleHotkeyLabel{
|
|
|
|
|
view_id='squad',
|
|
|
|
|
frame={l=1, t=0},
|
|
|
|
|
key='CUSTOM_SHIFT_S',
|
|
|
|
|
label='Squad:',
|
|
|
|
|
options={
|
|
|
|
|
{label='Any', value='all', pen=COLOR_GREEN},
|
|
|
|
|
},
|
|
|
|
|
visible=false,
|
|
|
|
|
on_change=function() self:do_search(self.subviews.search.text, true) end,
|
|
|
|
|
},
|
|
|
|
|
widgets.CycleHotkeyLabel{
|
|
|
|
|
view_id='burrow',
|
|
|
|
|
frame={l=1, t=0},
|
|
|
|
|
key='CUSTOM_SHIFT_B',
|
|
|
|
|
label='Burrow:',
|
|
|
|
|
options={
|
|
|
|
|
{label='Any', value='all', pen=COLOR_GREEN},
|
|
|
|
|
},
|
|
|
|
|
visible=false,
|
|
|
|
|
on_change=function() self:do_search(self.subviews.search.text, true) end,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
@ -296,8 +370,10 @@ function InfoOverlay:updateFrames()
|
|
|
|
|
local frame = self.subviews.panel.frame
|
|
|
|
|
if frame.l == l and frame.t == t then return ret end
|
|
|
|
|
frame.l, frame.t = l, t
|
|
|
|
|
local frame2 = self.subviews.filter_panel.frame
|
|
|
|
|
local frame2 = self.subviews.subset_panel.frame
|
|
|
|
|
frame2.l, frame2.t = l, t + 1
|
|
|
|
|
local frame3 = self.subviews.subfilter_panel.frame
|
|
|
|
|
frame3.l, frame3.t = l, t + 2
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
@ -323,10 +399,20 @@ function InfoOverlay:matches_filters(unit)
|
|
|
|
|
local subset = self.subviews.subset:getOptionValue()
|
|
|
|
|
if subset == 'all' then
|
|
|
|
|
return true
|
|
|
|
|
elseif unit.military.squad_id == -1 then
|
|
|
|
|
return subset == 'civilian'
|
|
|
|
|
elseif subset == 'civilian' then
|
|
|
|
|
return unit.military.squad_id == -1
|
|
|
|
|
elseif subset == 'military' then
|
|
|
|
|
local squad_id = unit.military.squad_id
|
|
|
|
|
if squad_id == -1 then return false end
|
|
|
|
|
local target_id = self.subviews.squad:getOptionValue()
|
|
|
|
|
if target_id == 'all' then return true end
|
|
|
|
|
return target_id == squad_id
|
|
|
|
|
elseif subset == 'burrow' then
|
|
|
|
|
local target_id = self.subviews.burrow:getOptionValue()
|
|
|
|
|
if target_id == 'all' then return true end
|
|
|
|
|
return utils.binsearch(unit.burrows, target_id)
|
|
|
|
|
end
|
|
|
|
|
return subset == 'military'
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- ----------------------
|
|
|
|
|