Files
project-cybersyn/cybersyn/scripts/gui/main.lua
2023-01-10 09:46:10 -05:00

94 lines
2.3 KiB
Lua

local gui = require("__flib__.gui-lite")
local mod_gui = require("__core__.lualib.mod-gui")
local manager = require("scripts.gui.manager")
--- @class PlayerData
--- @field refs {[string]: LuaGuiElement}?
--- @field search_query string?
--- @field search_network_name string?
--- @field search_network_mask int
--- @field search_surface_idx uint?
--- @field search_item string?
--- @field trains_orderings uint[]
--- @field trains_orderings_invert boolean[]
--- @field pinning boolean
local function top_left_button_update(player, player_data)
local button_flow = mod_gui.get_button_flow(player)
local button = button_flow["top_left_button"]
if player_data.disable_top_left_button then
if button then
button.destroy()
end
elseif not button then
gui.add(button_flow, {
type = "sprite-button",
name = "top_left_button",
style = "mis_mod_gui_button_green",
sprite = "mis_configure_white",
tooltip = { "", "\n", { "mis-config-gui.configure-tooltip" } },
handler = manager.handle.toggle,
})
end
end
local manager_gui = {}
function manager_gui.on_lua_shortcut(e)
if e.prototype_name == "ltnm-toggle-gui" then
manager.wrapper(e, manager.handle.toggle)
end
end
function manager_gui.on_player_created(e)
local player = game.get_player(e.player_index)
if not player then return end
local player_data = {
search_network_mask = -1,
trains_orderings = {},
trains_orderings_invert = {},
pinning = false,
refs = manager.create(player),
}
global.manager_data.players[e.player_index] = player_data
manager.update(global, player, player_data)
top_left_button_update(player, player_data)
end
function manager_gui.on_player_removed(e)
global.manager_data.players[e.player_index] = nil
end
--script.on_event(defines.events.on_player_joined_game, function(e)
--end)
--script.on_event(defines.events.on_player_left_game, function(e)
--end)
function manager_gui.on_runtime_mod_setting_changed(e)
if e.setting == "cybersyn-disable-top-left-button" then
if not e.player_index then return end
local player = game.get_player(e.player_index)
if not player then return end
local player_data = global.manager_data.players[e.player_index]
player_data.disable_top_left_button = player.mod_settings["cybersyn-disable-top-left-button"].value
top_left_button_update(player, player_data)
end
end
--gui.handle_events()
return manager_gui