99 lines
2.6 KiB
Lua
99 lines
2.6 KiB
Lua
local rpath = (...):match("(.-)[^%.]+$")
|
|
local rroot = rpath:match("^([^%.]+%.)")
|
|
local Setting = require(rroot .. "setting")
|
|
local create_steam = require(rpath .. "util").create_steam
|
|
|
|
|
|
|
|
local function add_reactor_ruin(dead_reactor_name, dead_reactor_core)
|
|
local surface = dead_reactor_core.surface
|
|
|
|
-- create reactor ruin
|
|
local entity = surface.create_entity{
|
|
name = RUIN_NAME[dead_reactor_name],
|
|
position = dead_reactor_core.position,
|
|
force = dead_reactor_core.force,
|
|
create_build_effect_smoke = false,
|
|
}
|
|
entity.destructible = false
|
|
|
|
-- create steam producing entity
|
|
local p = dead_reactor_core.position
|
|
local steam = create_steam(surface, {
|
|
name = RUIN_SMOKE_NAME,
|
|
position = {p.x,p.y+0.3},
|
|
force = dead_reactor_core.force,
|
|
})
|
|
steam.active = true -- start active - it's always active
|
|
local glow = surface.create_entity{
|
|
name = "rr-ruin-glow",
|
|
position = dead_reactor_core.position,
|
|
force = dead_reactor_core.force,
|
|
}
|
|
|
|
-- reactor ruin is saved in global table
|
|
local ruin = {
|
|
id = entity.unit_number, --same id as reactor
|
|
entity = entity,
|
|
steam = steam,
|
|
glow = glow,
|
|
tick = game.tick,--changes during radiation creation
|
|
meltdown_tick = game.tick,
|
|
spread = 6,
|
|
}
|
|
global.ruins[ruin.id] = ruin
|
|
return ruin
|
|
end
|
|
|
|
-- remove reactor ruin
|
|
local function remove_reactor_ruin(entity)
|
|
--when the reactor ruin was replaced by a sarcophagus, the steam creator entity needs to be removed
|
|
--logging("---------------------------------------------------------------")
|
|
--logging("Removing reactor ruin ID: " .. entity.unit_number)
|
|
local ruin = global.ruins[entity.unit_number]
|
|
if ruin then
|
|
--logging("-> found matching entry")
|
|
if ruin.steam and ruin.steam.valid then ruin.steam.destroy() end
|
|
if ruin.glow and ruin.glow.valid then ruin.glow.destroy() end
|
|
global.ruins[ruin.id] = nil
|
|
end
|
|
end
|
|
|
|
|
|
local function update_reactor_ruin(ruin)
|
|
if ruin and ruin.entity.valid and ruin.steam and ruin.steam.valid then
|
|
-- reset steam puff crafting progress so it never actually finishes
|
|
ruin.steam.crafting_progress = 0.1
|
|
end
|
|
end
|
|
|
|
|
|
local function on_tick(tick)
|
|
--sarcophagus healing
|
|
if tick % 180 == 0 then
|
|
for key, entity in pairs(global.sarcophagus) do
|
|
entity.health = entity.health + 1000/math.max(1,Setting.protoduration("sarcophagus")) * 3
|
|
if entity.health == 1000 then
|
|
entity.minable = true
|
|
entity.destructible = true
|
|
global.sarcophagus[key] = nil
|
|
end
|
|
end
|
|
end
|
|
-- reactor ruins
|
|
if (tick-7) % (TICKS_PER_UPDATE*4) == 0 then
|
|
for _,ruin in pairs(global.ruins) do
|
|
update_reactor_ruin(ruin)
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
return { -- exports
|
|
tick = on_tick,
|
|
add = add_reactor_ruin,
|
|
remove = remove_reactor_ruin,
|
|
}
|
|
|