fixed massive number of things

This commit is contained in:
mamoniot
2023-03-21 11:02:50 -04:00
parent 999f4cf828
commit d6e994baaf
14 changed files with 218 additions and 205 deletions

View File

@@ -13,12 +13,9 @@
"~/.steam/steam/steamapps/common/Factorio/data/core/lualib",
"./.vscode/factorio",
"./.vscode/flib",
"/home/mami/.config/Code/User/workspaceStorage/fdae937c5189f993d370b36f3104188f/justarandomgeek.factoriomod-debug/sumneko-3rd/factorio/library",
"/home/mami/.config/Code/User/workspaceStorage/95c2a8450056100ba3db30ac2a468857/justarandomgeek.factoriomod-debug/sumneko-3rd/factorio/library"
"/home/mami/.config/Code/User/workspaceStorage/4e7db8f77e7d31cf7af01a542e707dfb/justarandomgeek.factoriomod-debug/sumneko-3rd"
],
"Lua.workspace.userThirdParty": [
"/home/mami/.config/Code/User/workspaceStorage/fdae937c5189f993d370b36f3104188f/justarandomgeek.factoriomod-debug/sumneko-3rd",
"/home/mami/.config/Code/User/workspaceStorage/95c2a8450056100ba3db30ac2a468857/justarandomgeek.factoriomod-debug/sumneko-3rd",
"/home/mami/.config/Code/User/workspaceStorage/4e7db8f77e7d31cf7af01a542e707dfb/justarandomgeek.factoriomod-debug/sumneko-3rd"
],
"Lua.diagnostics.globals": [
@@ -36,7 +33,7 @@
"Lua.runtime.special": {
"__object_name": "type"
},
"Lua.runtime.plugin": "/home/mami/.config/Code/User/workspaceStorage/95c2a8450056100ba3db30ac2a468857/justarandomgeek.factoriomod-debug/sumneko-3rd/factorio/plugin.lua",
"Lua.runtime.plugin": "/home/mami/.config/Code/User/workspaceStorage/4e7db8f77e7d31cf7af01a542e707dfb/justarandomgeek.factoriomod-debug/sumneko-3rd/factorio/plugin.lua",
"Lua.diagnostics.disable": [
"lowercase-global"
],

View File

@@ -93,17 +93,17 @@ function create_delivery(map_data, r_station_id, p_station_id, train_id, manifes
if item_i > 1 or r_is_each or p_is_each then
local f, a
if r_is_each then
f, a = pairs(r_station.network_flag--[[@as {[string]: int}]])
f, a = pairs(r_station.network_mask--[[@as {[string]: int}]])
if p_is_each then
for network_name, _ in f, a do
local item_network_name = network_name..":"..item.name
economy.all_r_stations[item_network_name] = nil
economy.all_p_stations[item_network_name] = nil
end
f, a = pairs(p_station.network_flag--[[@as {[string]: int}]])
f, a = pairs(p_station.network_mask--[[@as {[string]: int}]])
end
elseif p_is_each then
f, a = pairs(p_station.network_flag--[[@as {[string]: int}]])
f, a = pairs(p_station.network_mask--[[@as {[string]: int}]])
else
f, a = once, r_station.network_name
end
@@ -350,8 +350,8 @@ local function tick_dispatch(map_data, mod_settings)
goto p_continue
end
p_flag = get_network_flag(p_station, network_name)
r_flag = get_network_flag(r_station, network_name)
p_flag = get_network_mask(p_station, network_name)
r_flag = get_network_mask(r_station, network_name)
netand = band(p_flag, r_flag)
if netand == 0 then
goto p_continue
@@ -413,7 +413,7 @@ local function tick_dispatch(map_data, mod_settings)
if trains then
for train_id, _ in pairs(trains) do
local train = map_data.trains[train_id]
local train_flag = get_network_flag(train, network_name)
local train_flag = get_network_mask(train, network_name)
if not btest(netand, train_flag) or train.se_is_being_teleported then
goto train_continue
end
@@ -551,9 +551,9 @@ local function tick_poll_station(map_data, mod_settings)
station.locked_slots = mod_settings.locked_slots
local is_each = station.network_name == NETWORK_EACH
if is_each then
station.network_flag = {}
station.network_mask = {}
else
station.network_flag = mod_settings.network_flag
station.network_mask = mod_settings.network_mask
end
local comb1_signals, comb2_signals = get_signals(station)
station.tick_signals = comb1_signals
@@ -594,12 +594,12 @@ local function tick_poll_station(map_data, mod_settings)
elseif item_name == LOCKED_SLOTS then
station.locked_slots = max(item_count, 0)
elseif is_each then
station.network_flag[item_name] = item_count
station.network_mask[item_name] = item_count
end
comb1_signals[k] = nil
end
if item_name == station.network_name then
station.network_flag = item_count
station.network_mask = item_count
comb1_signals[k] = nil
end
else
@@ -624,7 +624,7 @@ local function tick_poll_station(map_data, mod_settings)
is_requesting_nothing = false
local f, a
if station.network_name == NETWORK_EACH then
f, a = pairs(station.network_flag--[[@as {[string]: int}]])
f, a = pairs(station.network_mask--[[@as {[string]: int}]])
else
f, a = once, station.network_name
end
@@ -645,7 +645,7 @@ local function tick_poll_station(map_data, mod_settings)
if station.is_p and effective_item_count > 0 and item_count > 0 then
local f, a
if station.network_name == NETWORK_EACH then
f, a = pairs(station.network_flag--[[@as {[string]: int}]])
f, a = pairs(station.network_mask--[[@as {[string]: int}]])
else
f, a = once, station.network_name
end

View File

@@ -57,8 +57,8 @@ end
---@param e Station|Refueler|Train
---@param network_name string
---@return int
function get_network_flag(e, network_name)
return e.network_name == NETWORK_EACH and (e.network_flag[network_name] or 0) or e.network_flag--[[@as int]]
function get_network_mask(e, network_name)
return e.network_name == NETWORK_EACH and (e.network_mask[network_name] or 0) or e.network_mask--[[@as int]]
end
@@ -400,9 +400,9 @@ function set_station_from_comb(station)
if station.network_name ~= new_name then
station.network_name = new_name
if station.network_name == NETWORK_EACH then
station.network_flag = {}
station.network_mask = {}
else
station.network_flag = 0
station.network_mask = 0
end
end
end
@@ -426,9 +426,9 @@ function set_train_from_comb(mod_settings, train, comb)
local is_each = train.network_name == NETWORK_EACH
if is_each then
train.network_flag = {}
train.network_mask = {}
else
train.network_flag = mod_settings.network_flag
train.network_mask = mod_settings.network_mask
end
train.priority = mod_settings.priority
local signals = comb.get_merged_signals(defines.circuit_connector_id.combinator_input)
@@ -443,12 +443,12 @@ function set_train_from_comb(mod_settings, train, comb)
train.priority = item_count
elseif is_each then
if item_name ~= REQUEST_THRESHOLD and item_name ~= LOCKED_SLOTS then
train.network_flag[item_name] = item_count
train.network_mask[item_name] = item_count
end
end
end
if item_name == network_name then
train.network_flag = item_count
train.network_mask = item_count
end
end
end
@@ -464,7 +464,7 @@ function set_refueler_from_comb(map_data, mod_settings, id, refueler)
local bits = params.second_constant or 0
local signal = params.first_signal
local old_network = refueler.network_name
local old_network_flag = refueler.network_flag
local old_network_mask = refueler.network_mask
refueler.network_name = signal and signal.name or nil
refueler.allows_all_trains = bit_extract(bits, SETTING_DISABLE_ALLOW_LIST) > 0
@@ -473,10 +473,10 @@ function set_refueler_from_comb(map_data, mod_settings, id, refueler)
local is_each = refueler.network_name == NETWORK_EACH
if is_each then
map_data.each_refuelers[id] = true
refueler.network_flag = {}
refueler.network_mask = {}
else
map_data.each_refuelers[id] = nil
refueler.network_flag = mod_settings.network_flag
refueler.network_mask = mod_settings.network_mask
end
local signals = refueler.entity_comb.get_merged_signals(DEFINES_COMBINATOR_INPUT)
@@ -491,12 +491,12 @@ function set_refueler_from_comb(map_data, mod_settings, id, refueler)
refueler.priority = item_count
elseif is_each then
if item_name ~= REQUEST_THRESHOLD and item_name ~= LOCKED_SLOTS then
refueler.network_flag[item_name] = item_count
refueler.network_mask[item_name] = item_count
end
end
end
if item_name == refueler.network_name then
refueler.network_flag = item_count
refueler.network_mask = item_count
end
end
end
@@ -504,7 +504,7 @@ function set_refueler_from_comb(map_data, mod_settings, id, refueler)
local f, a
if old_network == NETWORK_EACH then
f, a = pairs(old_network_flag--[[@as {[string]: int}]])
f, a = pairs(old_network_mask--[[@as {[string]: int}]])
elseif old_network ~= refueler.network_name then
f, a = once, old_network
else
@@ -521,7 +521,7 @@ function set_refueler_from_comb(map_data, mod_settings, id, refueler)
end
if refueler.network_name == NETWORK_EACH then
f, a = pairs(refueler.network_flag--[[@as {[string]: int}]])
f, a = pairs(refueler.network_mask--[[@as {[string]: int}]])
elseif old_network ~= refueler.network_name then
f, a = once, refueler.network_name
else

View File

@@ -42,7 +42,7 @@
---@field public r_threshold int >= 0 --transient
---@field public locked_slots int >= 0 --transient
---@field public network_name string?
---@field public network_flag int|{[string]: int} --transient
---@field public network_mask int|{[string]: int} --transient
---@field public wagon_combs {[int]: LuaEntity}?--NOTE: allowed to be invalid entities or combinators with the wrong operation, these must be checked and lazy deleted when found
---@field public deliveries {[string]: int}
---@field public accepted_layouts {[uint]: true?}
@@ -68,7 +68,7 @@
---@field public allows_all_trains true?
---@field public priority int
---@field public network_name string?
---@field public network_flag int|{[string]: int}
---@field public network_mask int|{[string]: int}
---@class Train
---@field public entity LuaTrain --should only be invalid if se_is_being_teleported is true
@@ -86,7 +86,7 @@
---@field public use_any_depot true?
---@field public disable_bypass true?
---@field public network_name string? --can only be nil when the train is parked at a depot
---@field public network_flag int|{[string]: int} --transient
---@field public network_mask int|{[string]: int} --transient
---@field public priority int
---@field public refueler_id uint?
---@field public se_is_being_teleported true? --se only
@@ -114,7 +114,7 @@
---@field public r_threshold int
---@field public priority int
---@field public locked_slots int
---@field public network_flag int
---@field public network_mask int
---@field public warmup_time double
---@field public stuck_train_time double
---@field public fuel_threshold double
@@ -125,7 +125,7 @@
---@field public react_to_train_at_incorrect_station boolean --interface setting
---@field public react_to_train_early_to_depot boolean --interface setting
---@field public enable_manager boolean
---@field public manager_update_rate int
---@field public manager_ups double
--if this is uncommented it means there are migrations to write

View File

@@ -61,12 +61,9 @@ function inventory_tab.build(map_data, player_data)
end
-- move surface comparison up higher in query to short circuit query earlier if surface doesn't match
if search_surface_idx then
if search_surface_idx == -1 then
goto has_match
elseif entity.surface.index ~= search_surface_idx then
if entity.surface.index ~= search_surface_idx then
goto continue
end
::has_match::
end
if search_network_name then
if search_network_name == (NETWORK_EACH or NETWORK_ANYTHING) then
@@ -76,21 +73,21 @@ function inventory_tab.build(map_data, player_data)
goto continue
end
::has_match::
local train_flag = get_network_flag(station, station.network_name)
local train_flag = get_network_mask(station, station.network_name)
if not bit32.btest(search_network_mask, train_flag) then
goto continue
end
elseif search_network_mask ~= -1 then
if station.network_name == NETWORK_EACH then
local masks = station.network_flag--[[@as {}]]
for _, network_flag in pairs(masks) do
if bit32.btest(search_network_mask, network_flag) then
local masks = station.network_mask--[[@as {}]]
for _, network_mask in pairs(masks) do
if bit32.btest(search_network_mask, network_mask) then
goto has_match
end
end
goto continue
::has_match::
elseif not bit32.btest(search_network_mask, station.network_flag) then
elseif not bit32.btest(search_network_mask, station.network_mask) then
goto continue
end
end

View File

@@ -9,7 +9,7 @@ local manager = require("scripts.gui.manager")
--- @class PlayerData
--- @field is_manager_open boolean
--- @field refs {[string]: LuaGuiElement}?
--- @field refs {[string]: LuaGuiElement}
--- @field search_query string?
--- @field search_network_name string?
--- @field search_network_mask int
@@ -63,6 +63,7 @@ function manager_gui.on_player_created(e)
trains_orderings_invert = {},
pinning = false,
refs = manager.create(player),
selected_tab = "stations_tab",
}
global.manager.players[e.player_index] = player_data

View File

@@ -67,7 +67,7 @@ function manager.create(player)
name = "manager_text_search_field",
type = "textfield",
clear_and_focus_on_right_click = true,
handler = manager.handle.manager_update_text_search, --on_gui_text_changed
handler = { [defines.events.on_gui_text_changed] = manager.handle.manager_update_text_search },
},
{ type = "label", style = "subheader_caption_label", caption = { "cybersyn-gui.search-item-label" } },
{ type= "choose-elem-button", name="manager_item_filter", style="slot_button_in_shallow_frame", elem_type="signal", handler=manager.handle.manager_update_item_search, },
@@ -83,13 +83,13 @@ function manager.create(player)
allow_negative = true,
clear_and_focus_on_right_click = true,
text = "-1",
handler = manager.handle.manager_update_network_mask, --on_gui_text_changed
handler = { [defines.events.on_gui_text_changed] = manager.handle.manager_update_network_mask },
},
{ type = "label", style = "caption_label", caption = { "cybersyn-gui.surface-label" } },
{
name = "manager_surface_dropdown",
type = "drop-down",
handler = manager.handle.manager_update_surface, --on_gui_selection_state_changed
handler = { [defines.events.on_gui_selection_state_changed] = manager.handle.manager_update_surface },
},
},
},
@@ -116,13 +116,13 @@ function manager.create(player)
return refs
end
--- @param player_data PlayerData
function manager.build(player_data)
local refs = player_data.refs
-- Surface dropdown
--- @type LuaGuiElement
local surface_dropdown = refs.manager_surface_dropdown
local surfaces = game.surfaces
local selected_surface_id = player_data.search_surface_idx
local currently_selected_index = surface_dropdown.selected_index
local currently_selected_surface = nil
if currently_selected_index ~= (nil or 0) then
@@ -130,26 +130,23 @@ function manager.build(player_data)
end
surface_dropdown.clear_items()
surface_dropdown.add_item("all", 1)
i = 1
local i = 1
for name, _ in pairs(surfaces) do
i = i + 1
surface_dropdown.add_item(name, i)
--reselect same surface
if name == currently_selected_surface then
refs.manager_surface_dropdown.selected_index = i
refs.manager_surface_dropdown.selected_index = i--[[@as uint]]
end
end
-- Validate that the selected index still exist
if selected_surface_id then
local selected_surface = game.get_surface(selected_surface_id)
if player_data.search_surface_idx then
local selected_surface = game.get_surface(player_data.search_surface_idx)
-- If the surface was invalidated since last update, reset to all
if not selected_surface then
player_data.search_surface_idx = -1
player_data.search_surface_idx = nil
end
else
player_data.search_surface_idx = -1
end
end
--- @param map_data MapData
@@ -271,7 +268,8 @@ end
--- @param e GuiEventData
function manager.handle.manager_update_item_search(player, player_data, refs, e)
local element = e.element
local signal = element.elem_value
if not element then return end
local signal = e.element.elem_value
if signal then
player_data.search_item = signal.name
else
@@ -283,8 +281,10 @@ end
--- @param player LuaPlayer
--- @param player_data PlayerData
--- @param refs table<string, LuaGuiElement>
--- @param e GuiEventData
function manager.handle.manager_update_network_name(player, player_data, refs, e)
local element = e.element
if not element then return end
local signal = element.elem_value
if signal then
player_data.search_network_name = signal.name
@@ -295,24 +295,29 @@ end
--- @param player LuaPlayer
--- @param player_data PlayerData
--- @param refs table<string, LuaGuiElement>
--- @param e GuiEventData
function manager.handle.manager_update_network_mask(player, player_data, refs, e)
player_data.search_network_mask = tonumber(e.text) or -1
e.text = tostring(player_data.search_network_mask)
end
--- @param player LuaPlayer
--- @param player_data PlayerData
--- @param refs table<string, LuaGuiElement>
--- @param e GuiEventData
function manager.handle.manager_update_surface(player, player_data, refs, e)
--- @type LuaGuiElement
local element = e.element
if not element then return end
local i = element.selected_index
local refs = player_data.refs
local surface_id = -1
---@type uint?
local surface_id = nil
--all surfaces should always be the first entry with an index of 1
if i > 1 then
local surface_name = refs.manager_surface_dropdown.get_item(i)
local surface = game.get_surface(surface_name)
if surface then
surface_id = surface.index
end
end
player_data.search_surface_idx = surface_id
end

View File

@@ -56,7 +56,6 @@ end
--- @param map_data MapData
--- @param player_data PlayerData
--- @return GuiElemDef
function stations_tab.build(map_data, player_data, query_limit)
local widths = constants.gui["en"]
@@ -102,21 +101,21 @@ function stations_tab.build(map_data, player_data, query_limit)
if search_network_name ~= station.network_name then
goto continue
end
local train_flag = get_network_flag(station, station.network_name)
local train_flag = get_network_mask(station, station.network_name)
if not bit32.btest(search_network_mask, train_flag) then
goto continue
end
elseif search_network_mask ~= -1 then
if station.network_name == NETWORK_EACH then
local masks = station.network_flag--[[@as {}]]
for _, network_flag in pairs(masks) do
if bit32.btest(search_network_mask, network_flag) then
local masks = station.network_mask--[[@as {}]]
for _, network_mask in pairs(masks) do
if bit32.btest(search_network_mask, network_mask) then
goto has_match
end
end
goto continue
::has_match::
elseif not bit32.btest(search_network_mask, station.network_flag) then
elseif not bit32.btest(search_network_mask, station.network_mask) then
goto continue
end
end
@@ -224,8 +223,9 @@ function stations_tab.build(map_data, player_data, query_limit)
local station = stations[station_id]
local network_sprite = "utility/close_black"
local network_name = station.network_name
local network_flag = get_network_flag(station, network_name)
if network_name ~= nil then
local network_mask = -1;
if network_name then
network_mask = get_network_mask(station, network_name)
network_sprite, _, _ = util.generate_item_references(network_name)
end
local color = i % 2 == 0 and "dark" or "light"
@@ -242,7 +242,7 @@ function stations_tab.build(map_data, player_data, query_limit)
},
--templates.status_indicator(widths.stations.status, true), --repurposing status column for network name
{ type = "sprite-button", style = "ltnm_small_slot_button_default", enabled = false, sprite = network_sprite, },
{ type = "label", style_mods = { width = widths.stations.network_id, horizontal_align = "center" }, caption = network_flag },
{ type = "label", style_mods = { width = widths.stations.network_id, horizontal_align = "center" }, caption = network_mask },
templates.small_slot_table(widths.stations, color, "provided_requested"),
templates.small_slot_table(widths.stations, color, "shipments"),
templates.small_slot_table(widths.stations, color, "control_signals"),

View File

@@ -47,7 +47,6 @@ end
--- @param map_data MapData
--- @param player_data PlayerData
--- @return GuiElemDef
function trains_tab.build(map_data, player_data, query_limit)
local widths = constants.gui["en"]
local refs = player_data.refs
@@ -73,29 +72,26 @@ function trains_tab.build(map_data, player_data, query_limit)
if search_network_name ~= train.network_name then
goto continue
end
local train_flag = get_network_flag(train, search_network_name)
local train_flag = get_network_mask(train, search_network_name)
if not bit32.btest(search_network_mask, train_flag) then
goto continue
end
elseif search_network_mask ~= -1 then
if train.network_name == NETWORK_EACH then
local masks = train.network_flag--[[@as {}]]
for _, network_flag in pairs(masks) do
if bit32.btest(search_network_mask, network_flag) then
local masks = train.network_mask--[[@as {}]]
for _, network_mask in pairs(masks) do
if bit32.btest(search_network_mask, network_mask) then
goto has_match
end
end
goto continue
::has_match::
elseif not bit32.btest(search_network_mask, train.network_flag) then
elseif not bit32.btest(search_network_mask, train.network_mask) then
goto continue
end
end
if search_surface_idx then
if search_surface_idx == -1 then
goto has_match
end
local entity = get_any_train_entity(train.entity)
if not entity then
goto continue
@@ -103,7 +99,6 @@ function trains_tab.build(map_data, player_data, query_limit)
if entity.surface.index ~= search_surface_idx then
goto continue
end
::has_match::
end
if search_item then
@@ -203,14 +198,17 @@ function trains_tab.build(map_data, player_data, query_limit)
else
locomotive = train_entity.locomotives["back_movers"][1]
end
local manifest = {}
if train.manifest ~= nil then
manifest = train.manifest
end
local manifest = train.manifest
local network_sprite = "utility/close_black"
local network_name = train.network_name
local network_id = train.network_flag
---@type int?
local network_id = nil
if network_name then
if network_name == NETWORK_EACH then
network_id = train.network_mask[search_network_name]--[[@as int?]]
else
network_id = train.network_mask--[[@as int]]
end
network_sprite, _, _ = util.generate_item_references(network_name)
end
local color = idx % 2 == 0 and "dark" or "light"
@@ -290,7 +288,7 @@ function trains_tab.handle.open_train_gui(player, player_data, refs, e)
local train_entity = train.entity
if not train_entity or not train_entity.valid then
util.error_flying_text(gui.player, { "message.ltnm-error-train-is-invalid" })
util.error_flying_text(player, { "message.ltnm-error-train-is-invalid" })
return
end
train_util.open_gui(player.index, train_entity)

View File

@@ -58,7 +58,7 @@ end
--- Updates a slot table based on the passed criteria.
--- @param manifest Manifest
--- @param manifest Manifest?
--- @param color string
--- @return GuiElemDef[]
function util.slot_table_build_from_manifest(manifest, color)

View File

@@ -65,7 +65,7 @@ local function on_refueler_built(map_data, stop, comb)
--allows_all_trains = set_refueler_from_comb,
--priority = set_refueler_from_comb,
--network_name = set_refueler_from_comb,
--network_flag = set_refueler_from_comb,
--network_mask = set_refueler_from_comb,
}
local id = stop.unit_number--[[@as uint]]
map_data.refuelers[id] = refueler
@@ -94,7 +94,7 @@ function on_refueler_broken(map_data, refueler_id, refueler)
end
local f, a
if refueler.network_name == NETWORK_EACH then
f, a = pairs(refueler.network_flag--[[@as {[string]: int}]])
f, a = pairs(refueler.network_mask--[[@as {[string]: int}]])
else
f, a = once, refueler.network_name
end
@@ -133,7 +133,7 @@ local function on_station_built(map_data, stop, comb1, comb2)
r_threshold = 0,
locked_slots = 0,
--network_name = set_station_from_comb,
network_flag = 0,
network_mask = 0,
wagon_combs = nil,
deliveries = {},
accepted_layouts = {},
@@ -752,7 +752,7 @@ local function setup_se_compat()
if train.is_available then
local f, a
if train.network_name == NETWORK_EACH then
f, a = next, train.network_flag
f, a = next, train.network_mask
else
f, a = once, train.network_name
end
@@ -836,26 +836,34 @@ local function grab_all_settings()
mod_settings.r_threshold = settings.global["cybersyn-request-threshold"].value--[[@as int]]
mod_settings.priority = settings.global["cybersyn-priority"].value--[[@as int]]
mod_settings.locked_slots = settings.global["cybersyn-locked-slots"].value--[[@as int]]
mod_settings.network_flag = settings.global["cybersyn-network-flag"].value--[[@as int]]
mod_settings.network_mask = settings.global["cybersyn-network-flag"].value--[[@as int]]
mod_settings.fuel_threshold = settings.global["cybersyn-fuel-threshold"].value--[[@as double]]
mod_settings.warmup_time = settings.global["cybersyn-warmup-time"].value--[[@as double]]
mod_settings.stuck_train_time = settings.global["cybersyn-stuck-train-time"].value--[[@as double]]
mod_settings.allow_cargo_in_depot = settings.global["cybersyn-allow-cargo-in-depot"].value--[[@as boolean]]
mod_settings.invert_sign = settings.global["cybersyn-invert-sign"].value--[[@as boolean]]
mod_settings.manager_ups = settings.global["cybersyn-manager-updates-per-second"].value--[[@as int]]
mod_settings.manager_enabled = settings.startup["cybersyn-manager-enabled"].value--[[@as boolean]]
mod_settings.manager_update_rate = settings.startup["cybersyn-manager-update-rate"].value--[[@as int]]
end
local function register_tick()
script.on_nth_tick(nil)
if mod_settings.tps > DELTA then
local nth_tick_main = ceil(60/mod_settings.tps)--[[@as uint]]
script.on_nth_tick(nth_tick_main, function()
tick(global, mod_settings)
end)
end
if mod_settings.manager_enabled and mod_settings.manager_ups > DELTA then
local nth_tick_manager = ceil(60/mod_settings.manager_ups)--[[@as uint]]
script.on_nth_tick(nth_tick_manager, function()
manager.tick(global)
end)
end
end
local function on_settings_changed(event)
grab_all_settings()
if event.setting == "cybersyn-ticks-per-second" then
if mod_settings.tps > DELTA then
local nth_tick = ceil(60/mod_settings.tps)--[[@as uint]];
script.on_nth_tick(nth_tick, function()
tick(global, mod_settings)
end)
else
script.on_nth_tick(nil)
end
if event.setting == "cybersyn-ticks-per-second" or event.setting == "cybersyn-manager-updates-per-second" then
register_tick()
end
manager.on_runtime_mod_setting_changed(event)
interface_raise_on_mod_settings_changed(event)
@@ -912,15 +920,6 @@ local function main()
register_gui_actions()
if mod_settings.tps > DELTA then
local nth_tick = ceil(60/mod_settings.tps)--[[@as uint]];
script.on_nth_tick(nth_tick, function()
tick(global, mod_settings)
end)
else
script.on_nth_tick(nil)
end
local MANAGER_ENABLED = mod_settings.manager_enabled
@@ -955,12 +954,9 @@ local function main()
script.on_event(defines.events.on_player_created, manager.on_player_created)
script.on_event(defines.events.on_lua_shortcut, manager.on_lua_shortcut)
script.on_event("cybersyn-toggle-gui", manager.on_lua_shortcut)
-- TODO: rework this to work as a per-player runtime setting
script.on_nth_tick(mod_settings.manager_update_rate, function()
manager.tick(global)
end)
end
register_tick()
end

View File

@@ -295,16 +295,35 @@ local migrations_table = {
end
end,
["1.2.14"] = function()
---@type MapData
local map_data = global
manager_gui.on_init()
for i, v in pairs(game.players) do
manager_gui.on_player_created({player_index = i})
end
for _, e in pairs(map_data.refuelers) do
e.network_mask = e.network_flag
e.network_flag = nil
end
for _, e in pairs(map_data.stations) do
e.network_mask = e.network_flag
e.network_flag = nil
end
for _, e in pairs(map_data.trains) do
e.network_mask = e.network_flag
e.network_flag = nil
end
end,
}
--STATUS_R_TO_D = 5
---@param data ConfigurationChangedData
function on_config_changed(data)
for i, v in pairs(game.players) do
manager_gui.reset_player(i, v)
end
global.tick_state = STATE_INIT
global.tick_data = {}
flib_migration.on_config_changed(data, migrations_table)

View File

@@ -80,7 +80,7 @@ function add_available_train(map_data, train_id, train)
if train.network_name then
local f, a
if train.network_name == NETWORK_EACH then
f, a = next, train.network_flag
f, a = next, train.network_mask
else
f, a = once, train.network_name
end
@@ -121,7 +121,7 @@ function remove_available_train(map_data, train_id, train)
train.is_available = nil
local f, a
if train.network_name == NETWORK_EACH then
f, a = next, train.network_flag
f, a = next, train.network_mask
else
f, a = once, train.network_name
end
@@ -195,7 +195,7 @@ local function on_train_arrives_depot(map_data, depot_id, depot, train_entity)
--use_any_depot = add_available_train_to_depot,
--disable_bypass = add_available_train_to_depot,
--network_name = add_available_train_to_depot,
--network_flag = add_available_train_to_depot,
--network_mask = add_available_train_to_depot,
--priority = add_available_train_to_depot,
}--[[@as Train]]
set_train_layout(map_data, train)
@@ -311,7 +311,7 @@ local function on_train_leaves_stop(map_data, mod_settings, train_id, train)
else
local f, a
if train.network_name == NETWORK_EACH then
f, a = next, train.network_flag
f, a = next, train.network_mask
else
f, a = once, train.network_name
end
@@ -328,9 +328,9 @@ local function on_train_leaves_stop(map_data, mod_settings, train_id, train)
else
set_refueler_from_comb(map_data, mod_settings, id, refueler)
local refueler_network_flag = get_network_flag(refueler, network_name)
local train_network_flag = get_network_flag(train, network_name)
if btest(train_network_flag, refueler_network_flag) and (refueler.allows_all_trains or refueler.accepted_layouts[train.layout_id]) and refueler.trains_total < refueler.entity_stop.trains_limit then
local refueler_network_mask = get_network_mask(refueler, network_name)
local train_network_mask = get_network_mask(train, network_name)
if btest(train_network_mask, refueler_network_mask) and (refueler.allows_all_trains or refueler.accepted_layouts[train.layout_id]) and refueler.trains_total < refueler.entity_stop.trains_limit then
if refueler.priority >= best_prior then
local t = get_any_train_entity(train.entity)
local dist = t and get_dist(t, refueler.entity_stop) or INF

View File

@@ -104,12 +104,12 @@ data:extend({
},
{
type = "int-setting",
name = "cybersyn-manager-update-rate",
name = "cybersyn-manager-updates-per-second",
order = "ad",
setting_type = "startup",
default_value = 60,
minimum_value = 1,
maximum_value = 2147483647,
setting_type = "runtime-global",
default_value = 30,
minimum_value = 0,
maximum_value = 60,
},
{
type = "bool-setting",