Everything but configurable mod settings should be good to go, potential release candidate.

This commit is contained in:
Will Berry
2023-03-07 16:38:08 -05:00
parent d5fb6417fa
commit 4927539d75
7 changed files with 106 additions and 20 deletions
+2 -1
View File
@@ -1,5 +1,5 @@
[mod-name] [mod-name]
cybersyn=Cybersyn GUI cybersyn=Project Cybersyn
[controls] [controls]
cybersyn-toggle-gui=Toggle Cybersyn Manager cybersyn-toggle-gui=Toggle Cybersyn Manager
@@ -36,6 +36,7 @@ inventory=Inventory
keep-open=Keep open keep-open=Keep open
loading-at=Loading at loading-at=Loading at
name=Name name=Name
network-name-label=Network:
network-id-label=Network ID: network-id-label=Network ID:
network-id=Network ID network-id=Network ID
no-alerts=[img=warning-white] No alerts no-alerts=[img=warning-white] No alerts
+2
View File
@@ -30,6 +30,8 @@ SETTING_DISABLE_DEPOT_BYPASS = 6
SETTING_ENABLE_SLOT_BARRING = 7 SETTING_ENABLE_SLOT_BARRING = 7
NETWORK_SIGNAL_DEFAULT = {name="signal-A", type="virtual"} NETWORK_SIGNAL_DEFAULT = {name="signal-A", type="virtual"}
NETWORK_SIGNAL_GUI_DEFAULT = {name="signal-each", type="virtual"}
NETWORK_ANYTHING = "signal-anything"
NETWORK_EACH = "signal-each" NETWORK_EACH = "signal-each"
INACTIVITY_TIME = 100 INACTIVITY_TIME = 100
LOCK_TRAIN_TIME = 60*60*60*24*7 LOCK_TRAIN_TIME = 60*60*60*24*7
+2
View File
@@ -124,6 +124,8 @@
---@field public stuck_train_alert_enabled boolean --interface setting ---@field public stuck_train_alert_enabled boolean --interface setting
---@field public react_to_train_at_incorrect_station boolean --interface setting ---@field public react_to_train_at_incorrect_station boolean --interface setting
---@field public react_to_train_early_to_depot boolean --interface setting ---@field public react_to_train_early_to_depot boolean --interface setting
---@field public enable_manager boolean
---@field public manager_tps double --manager tick rate
--if this is uncommented it means there are migrations to write --if this is uncommented it means there are migrations to write
+19 -6
View File
@@ -36,6 +36,7 @@ function inventory_tab.build(map_data, player_data)
local refs = player_data.refs local refs = player_data.refs
local search_query = player_data.search_query
local search_item = player_data.search_item local search_item = player_data.search_item
local search_network_name = player_data.search_network_name local search_network_name = player_data.search_network_name
local search_network_mask = player_data.search_network_mask local search_network_mask = player_data.search_network_mask
@@ -55,10 +56,28 @@ function inventory_tab.build(map_data, player_data)
goto continue goto continue
end end
if search_query then
if not string.match(entity.backer_name, search_query) then
goto continue
end
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
goto continue
end
::has_match::
end
if search_network_name then if search_network_name then
if search_network_name == (NETWORK_EACH or NETWORK_ANYTHING) then
goto has_match
end
if search_network_name ~= station.network_name then if search_network_name ~= station.network_name then
goto continue goto continue
end end
::has_match::
local train_flag = get_network_flag(station, search_network_name) local train_flag = get_network_flag(station, search_network_name)
if not bit32.btest(search_network_mask, train_flag) then if not bit32.btest(search_network_mask, train_flag) then
goto continue goto continue
@@ -78,12 +97,6 @@ function inventory_tab.build(map_data, player_data)
end end
end end
if search_surface_idx then
if entity.surface.index ~= search_surface_idx then
goto continue
end
end
if search_item then if search_item then
if not station.deliveries then if not station.deliveries then
goto continue goto continue
+56 -7
View File
@@ -69,6 +69,8 @@ function manager.create(player)
handler = manager.handle.manager_update_text_search, --on_gui_text_changed handler = manager.handle.manager_update_text_search, --on_gui_text_changed
}, },
{ type = "empty-widget", style = "flib_horizontal_pusher" }, { type = "empty-widget", style = "flib_horizontal_pusher" },
{ type = "label", style = "caption_label", caption = { "cybersyn-gui.network-name-label" } },
{ type= "choose-elem-button", name="network", style="slot_button_in_shallow_frame", elem_type="signal", tooltip={"cybersyn-gui.network-tooltip"}, signal=NETWORK_SIGNAL_GUI_DEFAULT, handler=manager.handle.manager_update_network_name, },
{ type = "label", style = "caption_label", caption = { "cybersyn-gui.network-id-label" } }, { type = "label", style = "caption_label", caption = { "cybersyn-gui.network-id-label" } },
{ {
name = "manager_network_mask_field", name = "manager_network_mask_field",
@@ -110,9 +112,45 @@ function manager.create(player)
return refs return refs
end end
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
currently_selected_surface = surface_dropdown.get_item(currently_selected_index)
end
surface_dropdown.clear_items()
i = 0
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
end
end
-- Validate that the selected index still exist
if selected_surface_id then
local selected_surface = game.get_surface(selected_surface_id)
-- If the surface was invalidated since last update, reset to all
if not selected_surface then
player_data.search_surface_idx = -1
end
else
player_data.search_surface_idx = -1
end
end
--- @param map_data MapData --- @param map_data MapData
--- @param player_data PlayerData --- @param player_data PlayerData
function manager.update(map_data, player_data) function manager.update(map_data, player_data)
manager.build(player_data)
stations_tab.build(map_data, player_data) stations_tab.build(map_data, player_data)
inventory_tab.build(map_data, player_data) inventory_tab.build(map_data, player_data)
end end
@@ -235,8 +273,9 @@ end
--- @param player LuaPlayer --- @param player LuaPlayer
--- @param player_data PlayerData --- @param player_data PlayerData
--- @param refs table<string, LuaGuiElement> --- @param refs table<string, LuaGuiElement>
function manager.handle.manager_update_network_name(player, player_data, refs) function manager.handle.manager_update_network_name(player, player_data, refs, e)
local signal = refs.manager_network_name.elem_value local element = e.element
local signal = element.elem_value
if signal then if signal then
player_data.search_network_name = signal.name player_data.search_network_name = signal.name
else else
@@ -246,15 +285,25 @@ end
--- @param player LuaPlayer --- @param player LuaPlayer
--- @param player_data PlayerData --- @param player_data PlayerData
--- @param refs table<string, LuaGuiElement> --- @param refs table<string, LuaGuiElement>
function manager.handle.manager_update_network_mask(player, player_data, refs) function manager.handle.manager_update_network_mask(player, player_data, refs, e)
player_data.search_network_mask = tonumber(refs.manager_network_mask_field.text) or -1 player_data.search_network_mask = tonumber(e.text) or -1
end end
--- @param player LuaPlayer --- @param player LuaPlayer
--- @param player_data PlayerData --- @param player_data PlayerData
--- @param refs table<string, LuaGuiElement> --- @param refs table<string, LuaGuiElement>
function manager.handle.manager_update_surface(player, player_data, refs) function manager.handle.manager_update_surface(player, player_data, refs, e)
local i = refs.manager_surface_dropdown.selected_index --- @type LuaGuiElement
player_data.search_surface_idx = i--TODO: fix this local element = e.element
local i = element.selected_index
local refs = player_data.refs
local surface_id = -1
if i > 0 then
local surface_name = refs.manager_surface_dropdown.get_item(i)
local surface = game.get_surface(surface_name)
surface_id = surface.index
end
player_data.search_surface_idx = surface_id
end end
+24 -5
View File
@@ -64,6 +64,7 @@ function stations_tab.build(map_data, player_data)
local widths = constants.gui["en"] local widths = constants.gui["en"]
local refs = player_data.refs local refs = player_data.refs
local search_query = player_data.search_query
local search_item = player_data.search_item local search_item = player_data.search_item
local search_network_name = player_data.search_network_name local search_network_name = player_data.search_network_name
local search_network_mask = player_data.search_network_mask local search_network_mask = player_data.search_network_mask
@@ -78,10 +79,33 @@ function stations_tab.build(map_data, player_data)
goto continue goto continue
end end
if search_query then
if not string.match(entity.backer_name, search_query) then
goto continue
end
end
-- move surface comparison up higher in query to short circuit query earlier if surface doesn't match; this can exclude hundreds of stations instantly in SE
if search_surface_idx then
if search_surface_idx == -1 then
goto has_match
elseif entity.surface.index ~= search_surface_idx then
goto continue
end
::has_match::
end
if search_network_name then if search_network_name then
--setting default for GUI to NETWORK_EACH, which will match all
if search_network_name == (NETWORK_EACH or NETWORK_ANYTHING) then
goto has_match
end
if search_network_name ~= station.network_name then if search_network_name ~= station.network_name then
goto continue goto continue
end end
::has_match::
local train_flag = get_network_flag(station, search_network_name) local train_flag = get_network_flag(station, search_network_name)
if not bit32.btest(search_network_mask, train_flag) then if not bit32.btest(search_network_mask, train_flag) then
goto continue goto continue
@@ -101,11 +125,6 @@ function stations_tab.build(map_data, player_data)
end end
end end
if search_surface_idx then
if entity.surface.index ~= search_surface_idx then
goto continue
end
end
if search_item then if search_item then
if not station.deliveries then if not station.deliveries then
+1 -1
View File
@@ -933,7 +933,7 @@ local function main()
script.on_event(defines.events.on_player_removed, manager.on_player_removed) script.on_event(defines.events.on_player_removed, manager.on_player_removed)
script.on_event(defines.events.on_player_created, manager.on_player_created) 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(defines.events.on_lua_shortcut, manager.on_lua_shortcut)
script.on_nth_tick(600, function() --TODO: tick value needs to be converted to mod setting script.on_nth_tick(60, function() --TODO: tick value needs to be converted to mod setting
manager.tick(global) manager.tick(global)
end) end)
end end