Files
factorio-mod-PHI-CL/PHI-CL/control.lua
T
2026-05-09 21:50:41 +09:00

127 lines
4.1 KiB
Lua

local cargo_landing = require('control/cargo-landing')
local combinator = require('control/combinator')
local lab = require('control/lab')
local rail_support = require('control/rail-support')
local trash = require('control/trash')
local function gui_create(player)
if player.gui.relative.phi_cl_inserter_config then
player.gui.relative.phi_cl_inserter_config.destroy()
end
combinator.gui_create(player)
end
local function gui_update(player, entity)
lab.open(player)
combinator.gui_update(player, entity)
end
local function entity_build(event)
cargo_landing.build(event)
lab.build(event)
rail_support.build(event)
trash.build(event)
end
script.on_init(function()
if settings.startup['PHI-MI'].value or (settings.startup['PHI-GM'].value and settings.startup['PHI-GM'].value ~= '') then
for _, player in pairs(game.players) do
gui_create(player)
end
end
combinator.storage_init()
end)
script.on_configuration_changed(function()
if settings.startup['PHI-MI'].value or (settings.startup['PHI-GM'].value and settings.startup['PHI-GM'].value ~= '') then
for _, player in pairs(game.players) do
gui_create(player)
if player.opened and player.opened.valid and player.opened.object_name == 'LuaEntity' then
gui_update(player, player.opened.entity)
end
end
end
combinator.storage_init()
end)
if settings.startup['PHI-MI'].value or (settings.startup['PHI-GM'].value and settings.startup['PHI-GM'].value ~= '') then
script.on_event(defines.events.on_player_created, function(event)
gui_create(game.players[event.player_index])
end)
script.on_event(defines.events.on_gui_opened, function(event)
local player = game.players[event.player_index]
if event.entity and player.opened and player.opened == event.entity then
gui_update(player, event.entity)
end
end)
script.on_event(defines.events.on_gui_selection_state_changed, function(event)
local player = game.players[event.player_index]
if not (player.opened and player.opened.object_name == 'LuaEntity') then
return
end
if not player.opened.valid then
return
end
if player.opened.type == 'constant-combinator' and player.opened.name == 'super-combinator' and player.gui.relative.phi_cl_combinator_config then
local circuit_oc = player.opened.get_or_create_control_behavior()
if circuit_oc and circuit_oc.sections_count and circuit_oc.sections_count == 0 then
circuit_oc.add_section()
end
circuit_oc = circuit_oc.sections[1]
circuit_oc.set_slot(1, {value = {type = 'virtual', name = 'signal-SA', quality = 'normal'}, min = event.element.parent.parent['table_research_queue']['research_queue_dropdown'].selected_index - 1})
end
end)
script.on_event({defines.events.on_player_rotated_entity, defines.events.on_player_flipped_entity}, function(event)
if not event.player_index then
return
end
local player = game.players[event.player_index]
if not event.entity then
return
end
if player.opened ~= event.entity then
return
end
gui_update(player, player.opened)
end)
script.on_event({defines.events.on_built_entity, defines.events.on_robot_built_entity, defines.events.on_space_platform_built_entity, defines.events.script_raised_built, defines.events.script_raised_revive}, function(event)
entity_build(event)
end)
script.on_event(defines.events.on_entity_cloned, function(event)
entity_build({entity=event.destination})
end)
script.on_event({defines.events.on_entity_died, defines.events.on_player_mined_entity, defines.events.on_robot_pre_mined, defines.events.script_raised_destroy}, function(event)
lab.destroy(event)
rail_support.destroy(event)
end)
end
script.on_nth_tick(1800, function(_)
combinator.on_nth_tick_1800()
end)
script.on_nth_tick(10, function(_)
combinator.on_nth_tick_10()
end)