Skip to content

Commit

Permalink
Merge pull request #4019 from ToxicBananaParty/placesort
Browse files Browse the repository at this point in the history
Add search to remaining Places pages
  • Loading branch information
myk002 authored Nov 14, 2023
2 parents e27b912 + 877edb9 commit f081bda
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 7 deletions.
1 change: 1 addition & 0 deletions docs/changelog.txt
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ Template for new versions:
- `buildingplan`: display how many items are available on the planner panel
- `buildingplan`: make it easier to build single-tile staircases of any shape (up, down, or up/down)
- `sort`: allow searching by profession on the squad assignment page
- `sort`: add search for places screens
- `sort`: add search for work animal assignment screen; allow filtering by miltary/squad/civilian/burrow
- `sort`: on the squad assignment screen, make effectiveness and potential ratings use the same scale so effectiveness is always less than or equal to potential for a given unit. this way you can also tell when units are approaching their maximum potential
- `sort`: new overlay on the animal assignment screen that shows how many work animals each visible unit already has assigned to them
Expand Down
41 changes: 34 additions & 7 deletions plugins/lua/sort/places.lua
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,36 @@ local function get_location_search_key(zone)
return table.concat(result, ' ')
end

local function get_stockpile_search_key(stockpile)
if #stockpile.name ~= 0 then return stockpile.name
else return ('Stockpile #%s'):format(stockpile.stockpile_number) end
end

local function get_workshop_search_key(workshop)
local result = {}
for _, unit_id in ipairs(workshop.profile.permitted_workers) do
local unit = df.unit.find(unit_id)
if unit then table.insert(result, sortoverlay.get_unit_search_key(unit)) end
end

table.insert(result, workshop.name)
table.insert(result, df.workshop_type.attrs[workshop.type].name or '')
table.insert(result, df.workshop_type[workshop.type])

return table.concat(result, ' ')
end

local function get_farmplot_search_key(farmplot)
local result = {}

if #farmplot.name ~= 0 then table.insert(result, farmplot.name) else table.insert(result, 'Farm Plot') end

local plant = df.plant_raw.find(farmplot.plant_id[farmplot.last_season])
if plant then table.insert(result, plant.name_plural) end

return table.concat(result, ' ')
end

-- ----------------------
-- PlacesOverlay
--
Expand Down Expand Up @@ -142,17 +172,14 @@ function PlacesOverlay:init()

self:register_handler('ZONES', buildings.list[df.buildings_mode_type.ZONES], curry(sortoverlay.single_vector_search, {get_search_key_fn=get_zone_search_key}))
self:register_handler('LOCATIONS', buildings.list[df.buildings_mode_type.LOCATIONS], curry(sortoverlay.single_vector_search, {get_search_key_fn=get_location_search_key}))
self:register_handler('STOCKPILES', buildings.list[df.buildings_mode_type.STOCKPILES], curry(sortoverlay.single_vector_search, {get_search_key_fn=get_stockpile_search_key}))
self:register_handler('WORKSHOPS', buildings.list[df.buildings_mode_type.WORKSHOPS], curry(sortoverlay.single_vector_search, {get_search_key_fn=get_workshop_search_key}))
self:register_handler('FARMPLOTS', buildings.list[df.buildings_mode_type.FARMPLOTS], curry(sortoverlay.single_vector_search, {get_search_key_fn=get_farmplot_search_key}))
end

function PlacesOverlay:get_key()
if info.current_mode == df.info_interface_mode_type.BUILDINGS then
-- TODO: Replace nested if with 'return df.buildings_mode_type[buildings.mode]' once other handlers are written
-- Not there right now so it doesn't render a search bar on unsupported Places subpages
if buildings.mode == df.buildings_mode_type.ZONES then
return 'ZONES'
elseif buildings.mode == df.buildings_mode_type.LOCATIONS then
return 'LOCATIONS'
end
return df.buildings_mode_type[buildings.mode]
end
end

Expand Down

0 comments on commit f081bda

Please sign in to comment.