Merge pull request #7 from mamoniot/experimental

version 1.0.9
This commit is contained in:
Monica Moniot
2022-12-03 21:46:57 -05:00
committed by GitHub
5 changed files with 132 additions and 116 deletions

View File

@@ -106,3 +106,8 @@ Date: 2022-12-2
- Fixed a bug with combinator displays not updating correctly
- Improved combinator display performance
- Added a modding interface
---------------------------------------------------------------------------------------------------
Version: 1.0.9
Date: 2022-12-3
Features:
- Fixed a bug with SE compat preventing players from joining multiplayer games

View File

@@ -1,6 +1,6 @@
{
"name": "cybersyn",
"version": "1.0.8",
"version": "1.0.9",
"title": "Project Cybersyn",
"author": "Mami",
"factorio_version": "1.1",

View File

@@ -98,8 +98,8 @@
---@alias cybersyn.global MapData
---@type CybersynModSettings
mod_settings = {}
IS_SE_PRESENT = remote.interfaces["space-exploration"] ~= nil
---@type boolean
IS_SE_PRESENT = nil
function init_global()
global.total_ticks = 0
@@ -124,6 +124,7 @@ function init_global()
global.layout_train_count = {}
global.layout_top_id = 1
IS_SE_PRESENT = remote.interfaces["space-exploration"] ~= nil
if IS_SE_PRESENT then
global.se_tele_old_id = {}
end

View File

@@ -1,5 +1,4 @@
--By Mami
local flib_event = require("__flib__.event")
local floor = math.floor
local ceil = math.ceil
local table_insert = table.insert
@@ -938,93 +937,26 @@ local function on_settings_changed(event)
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]]
if event.setting == "cybersyn-ticks-per-second" then
flib_event.on_nth_tick(nil)
if mod_settings.tps > DELTA then
local nth_tick = ceil(60/mod_settings.tps);
flib_event.on_nth_tick(nth_tick, function()
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
end
end
local function setup_se_compat()
IS_SE_PRESENT = remote.interfaces["space-exploration"] ~= nil
if not IS_SE_PRESENT then return end
local filter_built = {
{filter = "name", name = "train-stop"},
{filter = "name", name = COMBINATOR_NAME},
{filter = "type", type = "inserter"},
{filter = "type", type = "pump"},
{filter = "type", type = "straight-rail"},
}
local filter_broken = {
{filter = "name", name = "train-stop"},
{filter = "name", name = COMBINATOR_NAME},
{filter = "type", type = "inserter"},
{filter = "type", type = "pump"},
{filter = "type", type = "straight-rail"},
{filter = "rolling-stock"},
}
local function main()
mod_settings.tps = settings.global["cybersyn-ticks-per-second"].value --[[@as double]]
mod_settings.update_rate = settings.global["cybersyn-update-rate"].value --[[@as int]]
mod_settings.r_threshold = settings.global["cybersyn-request-threshold"].value--[[@as int]]
mod_settings.network_flag = settings.global["cybersyn-network-flag"].value--[[@as int]]
mod_settings.depot_bypass_threshold = settings.global["cybersyn-depot-bypass-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.missing_train_alert_enabled = true
mod_settings.stuck_train_alert_enabled = true
mod_settings.react_to_nonempty_train_in_depot = true
mod_settings.react_to_train_at_incorrect_station = true
mod_settings.react_to_train_early_to_depot = true
--NOTE: There is a concern that it is possible to build or destroy important entities without one of these events being triggered, in which case the mod will have undefined behavior
flib_event.register(defines.events.on_built_entity, on_built, filter_built)
flib_event.register(defines.events.on_robot_built_entity, on_built, filter_built)
flib_event.register({defines.events.script_raised_built, defines.events.script_raised_revive, defines.events.on_entity_cloned}, on_built)
flib_event.register(defines.events.on_player_rotated_entity, on_rotate)
flib_event.register(defines.events.on_pre_player_mined_item, on_broken, filter_broken)
flib_event.register(defines.events.on_robot_pre_mined, on_broken, filter_broken)
flib_event.register(defines.events.on_entity_died, on_broken, filter_broken)
flib_event.register(defines.events.script_raised_destroy, on_broken)
flib_event.register({defines.events.on_pre_surface_deleted, defines.events.on_pre_surface_cleared}, on_surface_removed)
flib_event.register(defines.events.on_entity_settings_pasted, on_paste)
if mod_settings.tps > DELTA then
local nth_tick = ceil(60/mod_settings.tps);
flib_event.on_nth_tick(nth_tick, function()
tick(global, mod_settings)
end)
else
flib_event.on_nth_tick(nil)
end
flib_event.register(defines.events.on_train_created, on_train_built)
flib_event.register(defines.events.on_train_changed_state, on_train_changed)
flib_event.register(defines.events.on_entity_renamed, on_rename)
flib_event.register(defines.events.on_runtime_mod_setting_changed, on_settings_changed)
register_gui_actions()
flib_event.on_init(init_global)
flib_event.on_configuration_changed(on_config_changed)
if IS_SE_PRESENT then
flib_event.on_load(function()
local se_on_train_teleport_finished_event = remote.call("space-exploration", "get_on_train_teleport_finished_event")
local se_on_train_teleport_started_event = remote.call("space-exploration", "get_on_train_teleport_started_event")
flib_event.register(se_on_train_teleport_started_event, function(event)
---@param event {}
script.on_event(se_on_train_teleport_started_event, function(event)
---@type MapData
local map_data = global
local old_id = event.old_train_id_1
@@ -1039,7 +971,8 @@ local function main()
map_data.se_tele_old_id[train_unique_identifier] = old_id
interface_raise_train_teleport_started(old_id)
end)
flib_event.register(se_on_train_teleport_finished_event, function(event)
---@param event {}
script.on_event(se_on_train_teleport_finished_event, function(event)
---@type MapData
local map_data = global
---@type LuaTrain
@@ -1105,8 +1038,83 @@ local function main()
end
interface_raise_train_teleported(new_id, old_id)
end)
end
local filter_built = {
{filter = "name", name = "train-stop"},
{filter = "name", name = COMBINATOR_NAME},
{filter = "type", type = "inserter"},
{filter = "type", type = "pump"},
{filter = "type", type = "straight-rail"},
}
local filter_broken = {
{filter = "name", name = "train-stop"},
{filter = "name", name = COMBINATOR_NAME},
{filter = "type", type = "inserter"},
{filter = "type", type = "pump"},
{filter = "type", type = "straight-rail"},
{filter = "rolling-stock"},
}
local function main()
mod_settings.tps = settings.global["cybersyn-ticks-per-second"].value --[[@as double]]
mod_settings.update_rate = settings.global["cybersyn-update-rate"].value --[[@as int]]
mod_settings.r_threshold = settings.global["cybersyn-request-threshold"].value--[[@as int]]
mod_settings.network_flag = settings.global["cybersyn-network-flag"].value--[[@as int]]
mod_settings.depot_bypass_threshold = settings.global["cybersyn-depot-bypass-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.missing_train_alert_enabled = true
mod_settings.stuck_train_alert_enabled = true
mod_settings.react_to_nonempty_train_in_depot = true
mod_settings.react_to_train_at_incorrect_station = true
mod_settings.react_to_train_early_to_depot = true
--NOTE: There is a concern that it is possible to build or destroy important entities without one of these events being triggered, in which case the mod will have undefined behavior
script.on_event(defines.events.on_built_entity, on_built, filter_built)
script.on_event(defines.events.on_robot_built_entity, on_built, filter_built)
script.on_event({defines.events.script_raised_built, defines.events.script_raised_revive, defines.events.on_entity_cloned}, on_built)
script.on_event(defines.events.on_player_rotated_entity, on_rotate)
script.on_event(defines.events.on_pre_player_mined_item, on_broken, filter_broken)
script.on_event(defines.events.on_robot_pre_mined, on_broken, filter_broken)
script.on_event(defines.events.on_entity_died, on_broken, filter_broken)
script.on_event(defines.events.script_raised_destroy, on_broken)
script.on_event({defines.events.on_pre_surface_deleted, defines.events.on_pre_surface_cleared}, on_surface_removed)
script.on_event(defines.events.on_entity_settings_pasted, on_paste)
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
script.on_event(defines.events.on_train_created, on_train_built)
script.on_event(defines.events.on_train_changed_state, on_train_changed)
script.on_event(defines.events.on_entity_renamed, on_rename)
script.on_event(defines.events.on_runtime_mod_setting_changed, on_settings_changed)
register_gui_actions()
script.on_init(function()
init_global()
setup_se_compat()
end)
script.on_configuration_changed(on_config_changed)
script.on_load(function()
setup_se_compat()
end)
end

View File

@@ -189,6 +189,8 @@ local migrations_table = {
---@param data ConfigurationChangedData
function on_config_changed(data)
flib_migration.on_config_changed(data, migrations_table)
IS_SE_PRESENT = remote.interfaces["space-exploration"] ~= nil
if IS_SE_PRESENT and not global.se_tele_old_id then
global.se_tele_old_id = {}
end