-- Show inventory download progressbar local progress_dialog = {} --- @param player LuaPlayer --- @param progress number --- @param total number function progress_dialog.create(player, progress, total) local frame = player.gui.screen.add { name = "inventory_sync_progress", type = "frame", direction = "vertical", } local titlebar = frame.add { type = "flow", } titlebar.drag_target = frame local title = titlebar.add { type = "label", style = "frame_title", caption = "Inventory sync", } title.drag_target = frame local filler = titlebar.add { type = "empty-widget", style = "draggable_space_header", } filler.style.horizontally_stretchable = true filler.style.right_margin = 4 filler.style.height = 24 filler.drag_target = frame local content = frame.add { name = "inventory_sync_progress_dialog_content", type = "frame", direction = "vertical", style = "inside_shallow_frame_with_padding", } content.style.width = 400 local p1 = content.add { type = "label", caption = "Downloading inventory chunk " .. progress .. " / " .. total, } p1.style.single_line = false p1.style.bottom_margin = 8 local progressbar = content.add { type = "progressbar", value = progress / total, } progressbar.style.width = 376 -- inside_shallow_frame_with_padding has 12px padding on each side frame.force_auto_center() player.opened = frame end --- @param player LuaPlayer function progress_dialog.remove(player) if player.gui.screen.inventory_sync_progress then player.gui.screen.inventory_sync_progress.destroy() end end --- @param player LuaPlayer --- @param progress number --- @param total number function progress_dialog.update(player, progress, total) -- Be defensive here in case an old GUI is present local frame = player.gui.screen.inventory_sync_progress if not frame then return false end local content = frame.inventory_sync_progress_dialog_content if not content then return false end local p1 = content.children[1] if not p1 or p1.type ~= "label" then return false end local progressbar = content.children[2] if not progressbar or progressbar.type ~= "progressbar" then return false end p1.caption = "Downloading inventory chunk " .. progress .. " / " .. total progressbar.value = progress / total return true end --- @param player LuaPlayer --- @param progress number --- @param total number function progress_dialog.display(player, progress, total) if not progress_dialog.update(player, progress, total) then progress_dialog.remove(player) progress_dialog.create(player, progress, total) end end return progress_dialog