From 2032cadc1b7e4871fc8d48636c379ac38f0060ca Mon Sep 17 00:00:00 2001 From: bbassie <17990055+bbassie@users.noreply.github.com> Date: Thu, 6 Aug 2026 21:33:27 +0000 Subject: [PATCH] Fix rocket info silo pruning and unit number keys The prune loop shadowed its own parameter, so `silo_data[unit_number] = nil` wrote into the entry instead of removing it from the table. `unit_number` is optional on LuaEntity but always set for a silo. Note that `--[[ @as ]]` does not narrow for an index expression, only `@cast` does. Co-Authored-By: Claude Opus 5 (1M context) --- exp_scenario/module/gui/rocket_info.lua | 26 +++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/exp_scenario/module/gui/rocket_info.lua b/exp_scenario/module/gui/rocket_info.lua index c377155a..99ac30c2 100644 --- a/exp_scenario/module/gui/rocket_info.lua +++ b/exp_scenario/module/gui/rocket_info.lua @@ -404,9 +404,9 @@ end --- @return ExpGui_RocketInfo.elements.progress_table.row_data[] function Elements.progress_table.calculate_row_data_all(silo_data) local row_data = {} - for unit_number, silo_data in pairs(silo_data) do - if silo_data.entity.valid then - row_data[unit_number] = Elements.progress_table.calculate_row_data(silo_data) + for unit_number, silo in pairs(silo_data) do + if silo.entity.valid then + row_data[unit_number] = Elements.progress_table.calculate_row_data(silo) else -- Prune silos that are no longer valid silo_data[unit_number] = nil @@ -433,7 +433,9 @@ function Elements.progress_table.add_row(progress_table, row_data) progress.style.padding = { 0, 2 } progress.style.font_color = row_data.color - rows[row_data.entity.unit_number] = { x = x, y = y, progress = progress } + local unit_number = row_data.entity.unit_number + --- @cast unit_number uint + rows[unit_number] = { x = x, y = y, progress = progress } end --- Remove a silo row from the progress table @@ -455,7 +457,9 @@ end --- @param row_data ExpGui_RocketInfo.elements.progress_table.row_data function Elements.progress_table.refresh_row(progress_table, row_data) local element_data = Elements.progress_table.data[progress_table] - local row = element_data.rows[row_data.entity.unit_number] + local unit_number = row_data.entity.unit_number + --- @cast unit_number uint + local row = element_data.rows[unit_number] row.x.caption = row_data.x row.y.caption = row_data.y row.progress.caption = row_data.caption @@ -620,7 +624,9 @@ end function Elements.container.add_silo(entity) local force = entity.force --[[ @as LuaForce ]] local silos = Elements.container._get_force_data(force).silos - silos[entity.unit_number] = { + local unit_number = entity.unit_number + --- @cast unit_number uint + silos[unit_number] = { entity = entity, launched = 0, awaiting_reset = false, @@ -632,7 +638,9 @@ end function Elements.container.increment_silo(entity) local force = entity.force --[[ @as LuaForce ]] local silos = Elements.container._get_force_data(force).silos - local silo_data = silos[entity.unit_number] + local unit_number = entity.unit_number + --- @cast unit_number uint + local silo_data = silos[unit_number] if not silo_data then return end silo_data.launched = silo_data.launched + 1 silo_data.awaiting_reset = true @@ -653,7 +661,8 @@ Gui.toolbar.create_button{ --- Record the launch and update the stats when a cargo pod finishes ascending --- @param event EventData.on_cargo_pod_finished_ascending local function on_cargo_pod_finished_ascending(event) - local force = event.cargo_pod.force --[[ @as LuaForce ]] + local force = event.cargo_pod.force + --- @cast force LuaForce local rockets_launched = force.rockets_launched -- Update the launch stats for the force @@ -669,6 +678,7 @@ local function on_cargo_pod_finished_ascending(event) -- Append the launch tick into the times array local times = Elements.container.get_launch_times(force) + --- @cast rockets_launched uint times[rockets_launched] = event.tick -- Discard the launch time that is no longer needed by any rolling average unless it is a milestone