seperate item counts and their details
This commit is contained in:
parent
a75607f890
commit
3fe0246d57
@ -12,11 +12,11 @@ local function rect(x, y, w, h)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function list_items(inventories)
|
local function list_items(inventories)
|
||||||
local items = {}
|
local item_registry = {}
|
||||||
for _, name in ipairs(inventories) do
|
for _, name in ipairs(inventories) do
|
||||||
for slot, item in pairs(peripheral.call(name, "list")) do
|
for slot, item in pairs(peripheral.call(name, "list")) do
|
||||||
items[item.name] = items[item.name] or {}
|
item_registry[item.name] = item_registry[item.name] or {}
|
||||||
table.insert(items[item.name], {
|
table.insert(item_registry[item.name], {
|
||||||
count = item.count,
|
count = item.count,
|
||||||
slot = slot,
|
slot = slot,
|
||||||
peripheral = name
|
peripheral = name
|
||||||
@ -24,19 +24,27 @@ local function list_items(inventories)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
for name, item_collection in pairs(items) do
|
for _, items in pairs(item_registry) do
|
||||||
local item = item_collection[1]
|
items.count = 0
|
||||||
local detail = peripheral.call(item.peripheral, "getItemDetail", item.slot)
|
for _, slot in ipairs(items) do
|
||||||
items[name].displayName = detail.displayName
|
items.count = items.count + slot.count
|
||||||
items[name].stack_size = detail.maxCount
|
|
||||||
|
|
||||||
item_collection.count = 0
|
|
||||||
for _, slot in ipairs(item_collection) do
|
|
||||||
item_collection.count = item_collection.count + slot.count
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return items
|
return item_registry
|
||||||
|
end
|
||||||
|
|
||||||
|
local function populate_item_details(item_details, item_registry)
|
||||||
|
for name, items in pairs(item_registry) do
|
||||||
|
local item = items[1]
|
||||||
|
if item and not item_details[name] then
|
||||||
|
local detail = peripheral.call(item.peripheral, "getItemDetail", item.slot)
|
||||||
|
item_details[name] = {
|
||||||
|
display_name = detail.displayName,
|
||||||
|
stack_size = detail.maxCount
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function remove_value(array, value)
|
local function remove_value(array, value)
|
||||||
@ -81,9 +89,12 @@ function main_view:prepare(inventories, result_inventory)
|
|||||||
self.result_inventory = result_inventory
|
self.result_inventory = result_inventory
|
||||||
self.inventories = inventories
|
self.inventories = inventories
|
||||||
remove_value(self.inventories, result_inventory)
|
remove_value(self.inventories, result_inventory)
|
||||||
self.items = list_items(self.inventories)
|
|
||||||
|
|
||||||
local all_item_counts = get_item_counts(self.items)
|
self.item_registry = list_items(self.inventories)
|
||||||
|
self.item_details = {}
|
||||||
|
populate_item_details(self.item_details, self.item_registry)
|
||||||
|
|
||||||
|
local all_item_counts = get_item_counts(self.item_registry)
|
||||||
self.left_store = {
|
self.left_store = {
|
||||||
all_items = all_item_counts,
|
all_items = all_item_counts,
|
||||||
filtered_names = self:list_filtered_names(all_item_counts, ""),
|
filtered_names = self:list_filtered_names(all_item_counts, ""),
|
||||||
@ -105,13 +116,19 @@ function main_view:list_filtered_names(all_items, name_filter)
|
|||||||
|
|
||||||
local names = {}
|
local names = {}
|
||||||
for name, count in pairs(all_items) do
|
for name, count in pairs(all_items) do
|
||||||
local displayName = self.items[name].displayName:lower()
|
local display_name = self.item_details[name].display_name:lower()
|
||||||
if displayName:find(name_filter) and count > 0 then
|
if display_name:find(name_filter) and count > 0 then
|
||||||
table.insert(names, name)
|
table.insert(names, name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
table.sort(names, function(a, b) return all_items[a] > all_items[b] end)
|
table.sort(names, function(a, b)
|
||||||
|
if all_items[a] == all_items[b] then
|
||||||
|
return a < b
|
||||||
|
else
|
||||||
|
return all_items[a] > all_items[b]
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
return names
|
return names
|
||||||
end
|
end
|
||||||
@ -134,7 +151,7 @@ function main_view:display_item_list(store, area, active)
|
|||||||
local i = row + store.scroll
|
local i = row + store.scroll
|
||||||
local name = filtered_names[i]
|
local name = filtered_names[i]
|
||||||
local count = store.all_items[name]
|
local count = store.all_items[name]
|
||||||
local item_info = self.items[name]
|
local item_info = self.item_details[name]
|
||||||
local count_width = math.floor(math.log(count, 10) + 1)
|
local count_width = math.floor(math.log(count, 10) + 1)
|
||||||
if i == store.selected_idx and active then
|
if i == store.selected_idx and active then
|
||||||
term.setTextColor(colors.yellow)
|
term.setTextColor(colors.yellow)
|
||||||
@ -144,7 +161,7 @@ function main_view:display_item_list(store, area, active)
|
|||||||
term.setCursorPos((max_count_width+1 - count_width), row)
|
term.setCursorPos((max_count_width+1 - count_width), row)
|
||||||
term.write(count)
|
term.write(count)
|
||||||
term.setCursorPos(max_count_width+2, row)
|
term.setCursorPos(max_count_width+2, row)
|
||||||
term.write(ensure_width(item_info.displayName, area.w-max_count_width-1))
|
term.write(ensure_width(item_info.display_name, area.w-max_count_width-1))
|
||||||
end
|
end
|
||||||
|
|
||||||
if shown_count > area.h then
|
if shown_count > area.h then
|
||||||
@ -157,7 +174,7 @@ function main_view:display_item_list(store, area, active)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function main_view:move_item(item_name, amount, destination)
|
function main_view:move_item(item_name, amount, destination)
|
||||||
local item_collection = self.items[item_name]
|
local item_collection = self.item_registry[item_name]
|
||||||
|
|
||||||
local moved_amount = 0
|
local moved_amount = 0
|
||||||
while moved_amount < amount and item_collection.count > 0 do
|
while moved_amount < amount and item_collection.count > 0 do
|
||||||
@ -287,8 +304,10 @@ function main_view:on_key(key)
|
|||||||
elseif key == keys.tab then
|
elseif key == keys.tab then
|
||||||
self.is_left_active = not self.is_left_active
|
self.is_left_active = not self.is_left_active
|
||||||
elseif key == keys.f5 then
|
elseif key == keys.f5 then
|
||||||
self.items = list_items(self.inventories)
|
self.item_registry = list_items(self.inventories)
|
||||||
self.left_store.all_items = get_item_counts(self.items)
|
populate_item_details(self.item_details, self.item_registry)
|
||||||
|
|
||||||
|
self.left_store.all_items = get_item_counts(self.item_registry)
|
||||||
self.right_store.all_items = {}
|
self.right_store.all_items = {}
|
||||||
self:refresh_filtered_names(self.left_store, self.left_area)
|
self:refresh_filtered_names(self.left_store, self.left_area)
|
||||||
self:refresh_filtered_names(self.right_store, self.right_area)
|
self:refresh_filtered_names(self.right_store, self.right_area)
|
||||||
@ -308,19 +327,20 @@ function main_view:on_key(key)
|
|||||||
else
|
else
|
||||||
if left_selected then
|
if left_selected then
|
||||||
local item = left_selected
|
local item = left_selected
|
||||||
local stack_size = self.items[item].stack_size
|
local stack_size = self.item_details[item].stack_size
|
||||||
local transferred_count = self:move_item(item, stack_size, self.result_inventory)
|
local transferred_count = self:move_item(item, stack_size, self.result_inventory)
|
||||||
self.left_store.all_items[item] = self.left_store.all_items[item] - transferred_count
|
self.left_store.all_items[item] = self.left_store.all_items[item] - transferred_count
|
||||||
self:refresh_filtered_names(self.left_store, self.left_area)
|
self:refresh_filtered_names(self.left_store, self.left_area)
|
||||||
self:select_item(self.left_store, self.left_area, item)
|
self:select_item(self.left_store, self.left_area, item)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
elseif key == keys.d then
|
||||||
end
|
end
|
||||||
|
|
||||||
if self.is_left_active then
|
if self.is_left_active then
|
||||||
if key == keys.l and left_selected then
|
if key == keys.l and left_selected then
|
||||||
local item = left_selected
|
local item = left_selected
|
||||||
local stack_size = self.items[item].stack_size
|
local stack_size = self.item_details[item].stack_size
|
||||||
local transferred = math.min(self.left_store.all_items[item], stack_size)
|
local transferred = math.min(self.left_store.all_items[item], stack_size)
|
||||||
self.left_store.all_items[item] = self.left_store.all_items[item] - transferred
|
self.left_store.all_items[item] = self.left_store.all_items[item] - transferred
|
||||||
self.right_store.all_items[item] = (self.right_store.all_items[item] or 0) + transferred
|
self.right_store.all_items[item] = (self.right_store.all_items[item] or 0) + transferred
|
||||||
@ -331,7 +351,7 @@ function main_view:on_key(key)
|
|||||||
else
|
else
|
||||||
if key == keys.h and right_selected then
|
if key == keys.h and right_selected then
|
||||||
local item = right_selected
|
local item = right_selected
|
||||||
local stack_size = self.items[item].stack_size
|
local stack_size = self.item_details[item].stack_size
|
||||||
local transferred = math.min(self.right_store.all_items[item], stack_size)
|
local transferred = math.min(self.right_store.all_items[item], stack_size)
|
||||||
self.left_store.all_items[item] = self.left_store.all_items[item] + transferred
|
self.left_store.all_items[item] = self.left_store.all_items[item] + transferred
|
||||||
self.right_store.all_items[item] = self.right_store.all_items[item] - transferred
|
self.right_store.all_items[item] = self.right_store.all_items[item] - transferred
|
||||||
|
Loading…
Reference in New Issue
Block a user