63 lines
2.3 KiB
Lua

local table = require("__flib__.table")
function initialize_force_if_needed(force)
if global.forces[force.name] == nil and next(force.players) ~= nil then -- Don't bother with forces without players
log("Initializing global for force " .. force.name)
global_force = {
complete_milestones = {},
incomplete_milestones = {},
milestones_by_group = {},
item_stats = force.item_production_statistics,
fluid_stats = force.fluid_production_statistics,
kill_stats = force.kill_count_statistics,
}
global.forces[force.name] = global_force
local current_group = "Other"
for i, loaded_milestone in pairs(global.loaded_milestones) do
if loaded_milestone.type == "group" then
current_group = loaded_milestone.name
elseif loaded_milestone.type ~= "alias" then
local inserted_milestone = table.deep_copy(loaded_milestone)
inserted_milestone.sort_index = i
inserted_milestone.group = current_group
global_force.milestones_by_group[current_group] = global_force.milestones_by_group[current_group] or {}
-- Intentionally insert the same reference in both tables
table.insert(global_force.incomplete_milestones, inserted_milestone)
table.insert(global_force.milestones_by_group[current_group], inserted_milestone)
end
end
remove_invalid_milestones_for_force(global_force)
return backfill_completion_times(force)
end
return false
end
function reinitialize_player(player_index)
local outer_frame = global.players[player_index].outer_frame
if outer_frame.valid then
outer_frame.destroy()
end
local player = game.get_player(player_index)
initialize_player(player)
end
function initialize_player(player)
local outer_frame, main_frame, inner_frame = build_gui_frames(player)
global.players[player.index] = {
outer_frame = outer_frame,
main_frame = main_frame,
inner_frame = inner_frame,
opened_once_before = false,
pinned = false
}
end
function clear_force(force_name)
global.forces[force_name] = nil
end
function clear_player(player_index)
global.players[player_index] = nil
end