120 lines
3.1 KiB
Lua
120 lines
3.1 KiB
Lua
---------------------
|
|
---- control.lua ----
|
|
---------------------
|
|
|
|
local PUMPS = {}
|
|
|
|
-- Init handlers
|
|
function PUMPS.on_init()
|
|
|
|
-- Set on_first_tick() trigger state
|
|
global.first_tick_trigger = true
|
|
|
|
-- Init before tick
|
|
|
|
-- Init on first tick
|
|
script.on_event(defines.events.on_tick, OSM.PUMPS.init.on_first_tick)
|
|
end
|
|
|
|
-- Init on first tick
|
|
function PUMPS.on_first_tick()
|
|
if global.first_tick_trigger then
|
|
|
|
OSM.PUMPS.init.regenerate_pumps()
|
|
global.first_tick_trigger = nil
|
|
|
|
else -- Unregister on_first_tick() trigger
|
|
script.on_event(defines.events.on_tick, nil)
|
|
end
|
|
end
|
|
|
|
-- Init on load
|
|
function PUMPS.on_load()
|
|
if global.first_tick_trigger then
|
|
script.on_event(defines.events.on_tick, OSM.PUMPS.init.on_first_tick)
|
|
else
|
|
script.on_event(defines.events.on_tick, nil)
|
|
end
|
|
end
|
|
|
|
function PUMPS.regenerate_pumps()
|
|
log("----------------------------------------------------------------------")
|
|
log("--- Regenerating offshore and ground pumps...")
|
|
log("----------------------------------------------------------------------")
|
|
|
|
local pump_count = 0
|
|
local collision_count = 0
|
|
|
|
for _, surface in pairs (game.surfaces) do
|
|
|
|
-- Destroy bugged pumps
|
|
for _, bugged_pump in pairs (OSM.PUMPS.bugged_pumps) do
|
|
for _, bug_pump in pairs(surface.find_entities_filtered{name=bugged_pump}) do
|
|
bug_pump.destroy()
|
|
end
|
|
end
|
|
|
|
-- Regenerate pumps
|
|
for _, powered_pump in pairs (OSM.PUMPS.powered_pumps) do
|
|
for _, pump in pairs(surface.find_entities_filtered{name=powered_pump.name}) do
|
|
|
|
local name = pump.name
|
|
local position = pump.position
|
|
local direction = pump.direction
|
|
local force = pump.force
|
|
|
|
pump.destroy()
|
|
|
|
surface.create_entity
|
|
{
|
|
name = OSM.PUMPS.collision_layer,
|
|
position = position,
|
|
direction = direction,
|
|
force = "neutral",
|
|
fast_replace = true,
|
|
spill = false,
|
|
raise_built = false,
|
|
create_build_effect_smoke = false
|
|
}
|
|
|
|
surface.create_entity
|
|
{
|
|
name = name,
|
|
position = position,
|
|
direction = direction,
|
|
force = force,
|
|
fast_replace = true,
|
|
spill = false,
|
|
raise_built = true,
|
|
create_build_effect_smoke = false
|
|
}
|
|
|
|
pump_count=pump_count+1
|
|
end
|
|
end
|
|
|
|
-- Remove collision layer if pump is not there (redundant safety check)
|
|
local powered_pumps = {}
|
|
|
|
-- Get pump position
|
|
for _, powered_pump in pairs (OSM.PUMPS.powered_pumps) do
|
|
for _, pump in pairs(surface.find_entities_filtered{name=powered_pump.name}) do
|
|
local i = string.gsub(tostring(pump.position.x)..tostring(pump.position.y), "%.", "-")
|
|
powered_pumps[i] = pump.position
|
|
end
|
|
end
|
|
|
|
-- Compare collision layer position to pump position
|
|
for _, collision_layer in pairs(surface.find_entities_filtered{name=OSM.PUMPS.collision_layer}) do
|
|
local i = string.gsub(tostring(collision_layer.position.x)..tostring(collision_layer.position.y), "%.", "-")
|
|
if not powered_pumps[i] then
|
|
collision_layer.destroy()
|
|
collision_count = collision_count+1
|
|
end
|
|
end
|
|
end
|
|
log("Info: Regenerated "..pump_count.." offshore pumps")
|
|
log("Info: Removed "..collision_count.." orphan collision layers")
|
|
end
|
|
|
|
return PUMPS |