UnrealisticReactors/scripts/entity/ruin.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,
}