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) <noreply@anthropic.com>
This commit is contained in:
bbassie
2026-08-07 15:31:18 +00:00
co-authored by Claude Opus 5
parent ecf236d831
commit 2032cadc1b
+18 -8
View File
@@ -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