mirror of
https://github.com/Xevion/project-cybersyn.git
synced 2025-12-09 06:08:09 -06:00
1.2.8 (#28)
Version: 1.2.8
Date: 2022-1-5
Features:
- Improved placeholder cybernetic combinator art
- Added a wagon control setting to bar unfiltered slots in adjacent cargo wagons
- Added a setting and keybind for toggling on or off the central planner
Changes:
- Sped up the rate at which copy-paste by blueprint will be noticed
Bugfixes:
- Fixed a bug with combinators sometimes failing to connect with train stops
- Fixed wagon control combinators outputting wagon contents after inserters have already taken out items
- Fixed a rare crash on world migration
Scripting:
- Added missing return values to some interface functions
- Migrated to non-deprecated flib modules
This commit is contained in:
328
.vscode/flib/gui.lua
vendored
Normal file
328
.vscode/flib/gui.lua
vendored
Normal file
@@ -0,0 +1,328 @@
|
||||
--- @diagnostic disable
|
||||
|
||||
local mod_name = script.mod_name
|
||||
local gui_event_defines = {}
|
||||
|
||||
local event_id_to_string_mapping = {}
|
||||
for name, id in pairs(defines.events) do
|
||||
if string.find(name, "^on_gui") then
|
||||
gui_event_defines[name] = id
|
||||
event_id_to_string_mapping[id] = string.gsub(name, "^on_gui", "on")
|
||||
end
|
||||
end
|
||||
|
||||
--- @deprecated use `gui-lite` instead
|
||||
local flib_gui = {}
|
||||
|
||||
--- @deprecated use `gui-lite` instead
|
||||
function flib_gui.hook_events(callback)
|
||||
local on_event = script.on_event
|
||||
for _, id in pairs(gui_event_defines) do
|
||||
on_event(id, callback)
|
||||
end
|
||||
end
|
||||
|
||||
--- @deprecated use `gui-lite` instead
|
||||
function flib_gui.read_action(event_data)
|
||||
local elem = event_data.element
|
||||
if not elem or not elem.valid then
|
||||
return
|
||||
end
|
||||
|
||||
local mod_tags = elem.tags[mod_name]
|
||||
if not mod_tags then
|
||||
return
|
||||
end
|
||||
|
||||
local elem_actions = mod_tags.flib
|
||||
if not elem_actions then
|
||||
return
|
||||
end
|
||||
|
||||
local event_name = event_id_to_string_mapping[event_data.name]
|
||||
local msg = elem_actions[event_name]
|
||||
|
||||
return msg
|
||||
end
|
||||
|
||||
--- @deprecated use `gui-lite` instead
|
||||
local function recursive_build(parent, structure, refs)
|
||||
-- If the structure has no type, just ignore it
|
||||
-- This is to make it possible to pass unit types `{}` to represent "no element" without breaking things
|
||||
if not structure.type then
|
||||
return
|
||||
end
|
||||
|
||||
-- Prepare tags
|
||||
local original_tags = structure.tags
|
||||
local tags = original_tags or {}
|
||||
local actions = structure.actions
|
||||
local tags_flib = tags.flib
|
||||
tags.flib = actions
|
||||
structure.tags = { [mod_name] = tags }
|
||||
|
||||
-- Make the game not convert these into a property tree for no reason
|
||||
structure.actions = nil
|
||||
-- Substructures can be defined in special tables or as the array portion of this structure
|
||||
local substructures
|
||||
local substructures_len = #structure
|
||||
if substructures_len > 0 then
|
||||
if structure.children or structure.tabs then
|
||||
error("Children or tab-and-content pairs must ALL be in the array portion, or a subtable. Not both at once!")
|
||||
end
|
||||
substructures = {}
|
||||
for i = 1, substructures_len do
|
||||
substructures[i] = structure[i]
|
||||
structure[i] = nil
|
||||
end
|
||||
else
|
||||
substructures = structure.children or structure.tabs
|
||||
structure.children = nil
|
||||
structure.tabs = nil
|
||||
end
|
||||
|
||||
-- Create element
|
||||
local elem = parent.add(structure)
|
||||
|
||||
-- Restore structure
|
||||
structure.tags = original_tags
|
||||
structure.actions = actions
|
||||
tags.flib = tags_flib
|
||||
|
||||
local style_mods = structure.style_mods
|
||||
if style_mods then
|
||||
for k, v in pairs(style_mods) do
|
||||
elem.style[k] = v
|
||||
end
|
||||
end
|
||||
|
||||
local elem_mods = structure.elem_mods
|
||||
if elem_mods then
|
||||
for k, v in pairs(elem_mods) do
|
||||
elem[k] = v
|
||||
end
|
||||
end
|
||||
|
||||
local ref = structure.ref
|
||||
if ref then
|
||||
-- Recursively create tables as needed
|
||||
local prev = refs
|
||||
local ref_length = #ref
|
||||
for i = 1, ref_length - 1 do
|
||||
local current_key = ref[i]
|
||||
local current = prev[current_key]
|
||||
if not current then
|
||||
current = {}
|
||||
prev[current_key] = current
|
||||
end
|
||||
prev = current
|
||||
end
|
||||
prev[ref[ref_length]] = elem
|
||||
end
|
||||
|
||||
-- Substructures
|
||||
if substructures then
|
||||
if structure.type == "tabbed-pane" then
|
||||
local add_tab = elem.add_tab
|
||||
for i = 1, #substructures do
|
||||
local tab_and_content = substructures[i]
|
||||
if not (tab_and_content.tab and tab_and_content.content) then
|
||||
error("TabAndContent must have `tab` and `content` fields")
|
||||
end
|
||||
local tab = recursive_build(elem, tab_and_content.tab, refs)
|
||||
local content = recursive_build(elem, tab_and_content.content, refs)
|
||||
add_tab(tab, content)
|
||||
end
|
||||
else
|
||||
for i = 1, #substructures do
|
||||
recursive_build(elem, substructures[i], refs)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return elem
|
||||
end
|
||||
|
||||
--- @deprecated use `gui-lite` instead
|
||||
function flib_gui.build(parent, structures)
|
||||
local refs = {}
|
||||
for i = 1, #structures do
|
||||
recursive_build(parent, structures[i], refs)
|
||||
end
|
||||
return refs
|
||||
end
|
||||
|
||||
--- @deprecated use `gui-lite` instead
|
||||
function flib_gui.add(parent, structure)
|
||||
-- Just in case they had a ref in the structure already, extract it
|
||||
local previous_ref = structure.ref
|
||||
-- Put in a known ref that we can use later
|
||||
structure.ref = { "FLIB_ADD_ROOT" }
|
||||
-- Build the element
|
||||
local refs = {}
|
||||
recursive_build(parent, structure, refs)
|
||||
-- Restore the previous ref
|
||||
structure.ref = previous_ref
|
||||
-- Return the element
|
||||
return refs.FLIB_ADD_ROOT
|
||||
end
|
||||
|
||||
--- @deprecated use `gui-lite` instead
|
||||
local function recursive_update(elem, updates)
|
||||
if updates.cb then
|
||||
updates.cb(elem)
|
||||
end
|
||||
|
||||
if updates.style then
|
||||
elem.style = updates.style
|
||||
end
|
||||
|
||||
if updates.style_mods then
|
||||
for key, value in pairs(updates.style_mods) do
|
||||
elem.style[key] = value
|
||||
end
|
||||
end
|
||||
|
||||
if updates.elem_mods then
|
||||
for key, value in pairs(updates.elem_mods) do
|
||||
elem[key] = value
|
||||
end
|
||||
end
|
||||
|
||||
if updates.tags then
|
||||
flib_gui.update_tags(elem, updates.tags)
|
||||
end
|
||||
|
||||
-- TODO: This could be a lot better
|
||||
if updates.actions then
|
||||
for event_name, payload in pairs(updates.actions) do
|
||||
flib_gui.set_action(elem, event_name, payload)
|
||||
end
|
||||
end
|
||||
|
||||
local substructures
|
||||
local substructures_len = #updates
|
||||
if substructures_len > 0 then
|
||||
if updates.children or updates.tabs then
|
||||
error("Children or tab-and-content pairs must ALL be in the array portion, or a subtable. Not both at once!")
|
||||
end
|
||||
substructures = {}
|
||||
for i = 1, substructures_len do
|
||||
substructures[i] = updates[i]
|
||||
updates[i] = nil
|
||||
end
|
||||
else
|
||||
substructures = updates.children or updates.tabs
|
||||
updates.children = nil
|
||||
updates.tabs = nil
|
||||
end
|
||||
local subelements
|
||||
if elem.type == "tabbed-pane" then
|
||||
subelements = elem.tabs
|
||||
else
|
||||
subelements = elem.children
|
||||
end
|
||||
|
||||
if substructures then
|
||||
for i, substructure in pairs(substructures) do
|
||||
if substructure.tab or substructure.content then
|
||||
local elem_tab_and_content = subelements[i]
|
||||
if elem_tab_and_content then
|
||||
local tab = elem_tab_and_content.tab
|
||||
local tab_updates = substructures.tab
|
||||
if tab and tab_updates then
|
||||
recursive_update(tab, tab_updates)
|
||||
end
|
||||
local content = elem_tab_and_content.content
|
||||
local content_updates = substructures.content
|
||||
if content and content_updates then
|
||||
recursive_update(content, content_updates)
|
||||
end
|
||||
end
|
||||
elseif subelements[i] then
|
||||
recursive_update(subelements[i], substructure)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--- @deprecated use `gui-lite` instead
|
||||
function flib_gui.update(elem, updates)
|
||||
recursive_update(elem, updates)
|
||||
end
|
||||
|
||||
--- @deprecated use `gui-lite` instead
|
||||
function flib_gui.get_tags(elem)
|
||||
return elem.tags[mod_name] or {}
|
||||
end
|
||||
|
||||
--- @deprecated use `gui-lite` instead
|
||||
function flib_gui.set_tags(elem, tags)
|
||||
local elem_tags = elem.tags
|
||||
elem_tags[mod_name] = tags
|
||||
elem.tags = elem_tags
|
||||
end
|
||||
|
||||
--- @deprecated use `gui-lite` instead
|
||||
function flib_gui.delete_tags(elem)
|
||||
local elem_tags = elem.tags
|
||||
elem_tags[mod_name] = nil
|
||||
elem.tags = elem_tags
|
||||
end
|
||||
|
||||
--- @deprecated use `gui-lite` instead
|
||||
function flib_gui.update_tags(elem, updates)
|
||||
local elem_tags = elem.tags
|
||||
local existing = elem_tags[mod_name]
|
||||
|
||||
if not existing then
|
||||
existing = {}
|
||||
elem_tags[mod_name] = existing
|
||||
end
|
||||
|
||||
for k, v in pairs(updates) do
|
||||
existing[k] = v
|
||||
end
|
||||
|
||||
elem.tags = elem_tags
|
||||
end
|
||||
|
||||
--- @deprecated use `gui-lite` instead
|
||||
function flib_gui.set_action(elem, event_name, msg)
|
||||
local elem_tags = elem.tags
|
||||
local existing = elem_tags[mod_name]
|
||||
|
||||
if not existing then
|
||||
existing = {}
|
||||
elem_tags[mod_name] = existing
|
||||
end
|
||||
|
||||
local actions = existing.flib
|
||||
if not actions then
|
||||
actions = {}
|
||||
existing.flib = actions
|
||||
end
|
||||
|
||||
actions[event_name] = msg or nil
|
||||
|
||||
elem.tags = elem_tags
|
||||
end
|
||||
|
||||
--- @deprecated use `gui-lite` instead
|
||||
function flib_gui.get_action(elem, event_name)
|
||||
local elem_tags = elem.tags
|
||||
local existing = elem_tags[mod_name]
|
||||
|
||||
if not existing then
|
||||
return
|
||||
end
|
||||
|
||||
local actions = existing.flib
|
||||
if not actions then
|
||||
return
|
||||
end
|
||||
|
||||
return actions[event_name]
|
||||
end
|
||||
|
||||
return flib_gui
|
||||
Reference in New Issue
Block a user