63 lines
2.3 KiB
Lua
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
|