Aleksei-bird 7c9c708c92 Первый фикс
Пачки некоторых позиций увеличены
2024-03-01 20:54:33 +03:00

235 lines
8.7 KiB
Lua

--[[
--]]
-- TODO: make TAB key select next input (doesn't work, if intermediate GUIElements are not visible)
-- TODO: high provide threshold does not get applied (if user chooses a request threshold manually via output)
global = global or {}
global.default_visibility = global.default_visibility or {}
global.ltn_version_notice = global.ltn_version_notice or false
MOD_NAME = "LTN_Combinator"
MOD_STRING = "LTN Combinator"
MOD_TOKEN = "LTNC"
MOD_VERSION = "0.5.0"
LTN_MOD_NAME = "LogisticTrainNetwork"
LTN_MOD_VERSION = "1.12.0"
print, dlog = require "scripts.logger"()
local config = require "config"
local events = require "scripts.ltnc-events"
local ltnc = require "scripts.ltnc"
ltnc.gui = require "scripts.ltnc-gui"
local network_config = require "scripts.ltnc-networkconfig"
ltnc.event_map(events)
ltnc.gui.event_map(events)
network_config.event_map(events)
--[[ ----------------------------------------------------------------------------------
MOD HELPER
--]]
local function mod_ltn_check()
if not game then return end
-- check ltn availability
local ltn_version = game.active_mods[LTN_MOD_NAME]
if not ltn_version or ltn_version == "" then
print("LogisticTrainNetwork is required to use LTN Combinator.")
global.vanilla_gui = true
return false
end
-- check ltn version
ltn_version = string.format("%02d.%02d.%02d", string.match(ltn_version, "(%d+).(%d+).(%d+)"))
if LTN_MOD_VERSION < ltn_version then
-- check if user wants to suppress custom gui
if settings.global["suppress-custom-gui"].value == true then
global.vanilla_gui = true
return false
else
global.vanilla_gui = false
end
if global.ltn_version_notice == true then return end
global.ltn_version_notice = true
print("LogisticTrainNetwork has been updated. If you experience any conflicts disable LTN Combinator in \"Mod Settings\" and sit tight while waiting for an update.")
else
global.ltn_version_notice = false
end
global.vanilla_gui = false
return true
end
-- register remote interfaces
remote.add_interface("ltn-combinator", {
-- Usage: result = remote.call("ltn-combinator", "open_ltn_combinator", player_index (integer), entity (LuaEntity), register (boolean))
-- player_index: (required)
-- entity: any entity that is in the same green-circuit-network as the wanted ltn-combinator (required)
-- register: registers the opened window in game.player[i].opened (optional, default true)
-- returns a boolean, whether a combinator was opened
open_ltn_combinator = ltnc.open_combinator,
-- Usage: result = remote.call("ltn-combinator", "close_ltn_combinator", player_index (integer))
-- player_index: (required)
--
-- Calling this interface is only required if a ltn-combinator was previously opened with register = false.
-- Use this method to keep your own window open.
close_ltn_combinator = ltnc.close_combinator
})
-- debugging tool for remote call testing
local function ltnc_remote_open(event)
local entity = nil
if game.players[event.player_index] then
entity = game.players[event.player_index].selected
end
if entity == nil or entity.valid ~= true then return end
remote.call("ltn-combinator", "open_ltn_combinator", event.player_index, entity, true)
end
local function ltnc_remote_close(event)
remote.call("ltn-combinator", "close_ltn_combinator", event.player_index)
end
local function ltnc_remote_clear(event)
game.players[event.player_index].gui.center.clear()
global.gui[event.player_index].main_frame.destroy()
global.gui[event.player_index] = nil
end
local function ltnc_open_network(event)
network_config.open(event)
end
commands.add_command("ltncopen", "Use /ltncopen while hovering an entity to open a near ltn combinator", ltnc_remote_open)
commands.add_command("ltncclose", "Use /ltncclose to close the opened ltn combinator", ltnc_remote_close)
commands.add_command("ltncconfig", "Use /ltncconfig to setup network icons", ltnc_open_network)
--commands.add_command("ltncclear", "Use /ltncclear to refresh uis", ltnc_remote_clear)
--[[ ----------------------------------------------------------------------------------
MOD INITIALIZATION
--]]
local function mod_init()
mod_ltn_check()
ltnc.mod_init()
network_config.mod_init()
end
local function mod_configuration_changed(data)
-- check for ltn version
mod_ltn_check()
-- check if LTN Combinator was updated
if data and data.mod_changes[MOD_NAME] then
-- version number not needed yet
-- data.mod_changes[MOD_NAME].old_version
-- data.mod_changes[MOD_NAME].new_version
ltnc.mod_configuration_changed()
end
end
local function mod_player_joined(event)
if global.messages ~= nil then
-- print messages
for i=1, #global.messages do
game.print(global.messages[i])
end
end
ltnc.on_player_joined(event)
end
-- update settings called every time and on mod_runtime_setting_changed()
local function update_settings()
-- default visibility of ltn entries
global.default_visibility["ltn-network-id"] = settings.global["show-ltn-network-id"].value
global.default_visibility["ltn-requester-threshold"] = settings.global["provide-type"].value == "only-item-count" or settings.global["provide-type"].value == "both-item-stack"
global.default_visibility["ltn-requester-stack-threshold"] = settings.global["provide-type"].value == "only-stack-count" or settings.global["provide-type"].value == "both-item-stack"
global.default_visibility["ltn-requester-priority"] = settings.global["show-ltn-priorities"].value
global.default_visibility["ltn-provider-threshold"] = settings.global["provide-type"].value == "only-item-count" or settings.global["provide-type"].value == "both-item-stack"
global.default_visibility["ltn-provider-stack-threshold"] = settings.global["provide-type"].value == "only-stack-count" or settings.global["provide-type"].value == "both-item-stack"
global.default_visibility["ltn-provider-priority"] = settings.global["show-ltn-priorities"].value
global.default_visibility["ltn-min-train-length"] = settings.global["show-ltn-train-length"].value
global.default_visibility["ltn-max-train-length"] = settings.global["show-ltn-train-length"].value
global.default_visibility["ltn-max-trains"] = settings.global["show-ltn-max-trains"].value
global.default_visibility["ltn-locked-slots"] = settings.global["show-ltn-locked-slots"].value
global.default_visibility["ltn-disable-warnings"] = settings.global["show-ltn-disable-warnings"].value
global.high_provide_threshold = settings.global["high-provide-threshold"].value
-- check for version mismatch
global.suppress_custom_gui = settings.global["suppress-custom-gui"].value
mod_ltn_check()
-- dirty fix, prevent gui from jumping around
local entry_count = -1
for k, v in pairs(global.default_visibility) do
if v == true then
entry_count = entry_count + 1
end
end
if settings.global["provide-type"].value == "both-item-stack" then
entry_count = entry_count - 1
end
if settings.global["show-ltn-priorities"].value == true then
entry_count = entry_count - 1
end
if settings.global["show-ltn-locked-slots"].value == true and settings.global["show-ltn-disable-warnings"].value == true then
entry_count = entry_count - 1
end
global.default_entry_count = entry_count
-- end: dirty fix
-- grab default threshold from ltn settings
if settings.global["ltn-dispatcher-requester-threshold"] then
local threshold = settings.global["ltn-dispatcher-requester-threshold"].value
config.ltn_signals["ltn-requester-threshold"].default = threshold
end
if settings.global["ltn-dispatcher-provider-threshold"] then
local threshold = settings.global["ltn-dispatcher-provider-threshold"].value
config.ltn_signals["ltn-provider-threshold"].default = threshold
end
if settings.global["ltn-stop-default-network"] then
local default_networkid = settings.global["ltn-stop-default-network"].value
config.ltn_signals["ltn-network-id"].default = default_networkid
end
-- populate changes (not needed anymore)
--ltnc.mod_settings_changed()
end
-- always run
do
update_settings()
end
--[[ ----------------------------------------------------------------------------------
HOOK EVENTS
--]]
script.on_init(mod_init)
script.on_configuration_changed(mod_configuration_changed)
script.on_event({defines.events.on_runtime_mod_setting_changed}, update_settings)
script.on_event({defines.events.on_player_created}, mod_player_joined)
--[[
THIS IS THE END
--]] ----------------------------------------------------------------------------------