diff --git a/lignumis/_migrations/lignumis-0.9.9.lua b/lignumis/_migrations/lignumis-0.9.9.lua new file mode 100644 index 0000000..f8ec72e --- /dev/null +++ b/lignumis/_migrations/lignumis-0.9.9.lua @@ -0,0 +1,26 @@ +local RocketSilo = require("scripts/wooden-rocket-silo") + +if not storage.rocket_silos then + storage.rocket_silos = {} +end + +if not game.planets["lignumis"] then return end + +local lignumis = game.planets["lignumis"].surface + +for _, silo in pairs(lignumis.find_entities_filtered { name = "provisional-rocket-silo" }) do + local found = false + for _, entry in pairs(storage.rocket_silos) do + if entry.real_silo == silo then + found = true + break + end + end + if not found then + RocketSilo.events[defines.events.on_script_trigger_effect]({ + effect_id = "provisional-rocket-ready", + surface_index = lignumis.index, + cause_entity = silo + }) + end +end diff --git a/lignumis/control.lua b/lignumis/control.lua index a4946ba..3beffba 100644 --- a/lignumis/control.lua +++ b/lignumis/control.lua @@ -1,10 +1,12 @@ local handler = require("event_handler") +gui = require("__flib__/gui") handler.add_libraries({ - require("script/init-existing"), - require("script/init-new"), - require("script/init"), - require("script/to-nauvis") + require("scripts/init-existing"), + require("scripts/init-new"), + require("scripts/init"), + require("scripts/to-nauvis"), + require("scripts/wooden-rocket-silo") }) diff --git a/lignumis/info.json b/lignumis/info.json index 4a9dfc9..6bb0c5e 100644 --- a/lignumis/info.json +++ b/lignumis/info.json @@ -9,6 +9,7 @@ "dependencies": [ "base", "space-age >= 2.0.28", + "flib", "PlanetsLib >= 1.1.26", "astroponics >= 1.2.0", "cf-lib >= 0.0.2", diff --git a/lignumis/locale/en/strings.cfg b/lignumis/locale/en/strings.cfg index 3d48a5b..f8ba08d 100644 --- a/lignumis/locale/en/strings.cfg +++ b/lignumis/locale/en/strings.cfg @@ -31,6 +31,7 @@ gold-storage-tank=Gold storage tank desiccation-furnace=Desiccation furnace steam-assembling-machine=Steam assembling machine provisional-rocket-silo=Provisional rocket silo +provisional-rocket-silo-ready=Provisional rocket silo (ready) basic-gun-turret=Basic gun turret basic-construction-robot-gold=Basic construction robot (gold) basic-construction-robot-copper=Basic construction robot (copper) @@ -166,4 +167,7 @@ quality-catalyst-energy-value=Quality value quality-catalyst=Quality catalyst [lignumis] -start-new-game=Lignumis is meant to be played in a fresh game as it extends the early game before Nauvis. \ No newline at end of file +start-new-game=Lignumis is meant to be played in a fresh game as it extends the early game before Nauvis. +provisional-rocket-silo-button=Escape to Nauvis +provisional-rocket-silo-button-tooltip=Your personal inventory must be empty! +provisional-rocket-silo-description=Fill the rocket inventory and launch the rocket to escape to Nauvis.\nBe sure to take material to jumpstart your iron, copper and wood production. \ No newline at end of file diff --git a/lignumis/prototypes/content/technology.lua b/lignumis/prototypes/content/technology.lua index dc09f1d..a028168 100644 --- a/lignumis/prototypes/content/technology.lua +++ b/lignumis/prototypes/content/technology.lua @@ -32,10 +32,6 @@ data:extend({ space_location = "nauvis", use_icon_overlay_constant = true }, - { - type = "unlock-recipe", - recipe = "destination-nauvis" - }, { type = "unlock-space-platforms", modifier = true, diff --git a/lignumis/prototypes/content/wooden-rocket-silo.lua b/lignumis/prototypes/content/wooden-rocket-silo.lua index 005491b..c4d65c1 100644 --- a/lignumis/prototypes/content/wooden-rocket-silo.lua +++ b/lignumis/prototypes/content/wooden-rocket-silo.lua @@ -6,7 +6,7 @@ local silo = table.deepcopy(data.raw["rocket-silo"]["rocket-silo"]) silo.name = "provisional-rocket-silo" silo.icon = "__lignumis__/graphics/icons/provisional-rocket-silo.png" silo.module_slots = 0 -silo.allowed_effects = { "consumption", "pollution" } +silo.allowed_effects = { "consumption", "pollution", "speed" } silo.minable = { mining_time = 1, result = "provisional-rocket-silo" } silo.max_health = 1000 silo.energy_source = { @@ -30,7 +30,7 @@ silo.emissions_per_second = { noise = 1000 / 60 } silo.energy_usage = "1MW" silo.rocket_entity = "provisional-rocket" silo.fixed_recipe = "provisional-rocket-part" -silo.door_opening_speed = 1 / (20 * 60) +--silo.door_opening_speed = 1 / (20 * 60) silo.base_day_sprite.filename = "__lignumis__/graphics/entity/wooden-rocket-silo/06-rocket-silo.png" silo.base_front_sprite.filename = "__lignumis__/graphics/entity/wooden-rocket-silo/14-rocket-silo-front.png" silo.fluid_boxes = { @@ -45,8 +45,13 @@ silo.fluid_boxes = { } silo.fluid_boxes_off_when_no_fluid_recipe = true silo.launch_to_space_platforms = false -silo.rocket_parts_storage_cap = 50 -silo.to_be_inserted_to_rocket_inventory_size = 20 +silo.rocket_parts_required = 1 +silo.rocket_parts_storage_cap = 1 +silo.to_be_inserted_to_rocket_inventory_size = 1 +silo.clamps_on_trigger = { + type = "script", + effect_id = "provisional-rocket-ready" +} local silo_item = table.deepcopy(data.raw["item"]["rocket-silo"]) silo_item.name = "provisional-rocket-silo" @@ -67,10 +72,11 @@ silo_recipe.ingredients = { local rocket = table.deepcopy(data.raw["rocket-silo-rocket"]["rocket-silo-rocket"]) rocket.name = "provisional-rocket" -rocket.rising_speed = 1 / (14 * 60) -rocket.engine_starting_speed = 1 / (11 * 60) -rocket.flying_speed = 1 / (4000 * 60) -rocket.flying_acceleration = 0.005 +rocket.inventory_size = 40 +--rocket.rising_speed = 1 / (14 * 60) +--rocket.engine_starting_speed = 1 / (11 * 60) +--rocket.flying_speed = 1 / (4000 * 60) +--rocket.flying_acceleration = 0.005 rocket.rocket_sprite.layers[1].filename = "__lignumis__/graphics/entity/wooden-rocket-silo/rocket-static-pod.png" local rocket_part_recipe = { @@ -92,28 +98,198 @@ local rocket_part_recipe = { allow_productivity = true } -local nauvis_item = { - type = "item", - name = "destination-nauvis", - icon = "__base__/graphics/icons/nauvis.png", - subgroup = "space-related", - order = "z[destination-nauvis]", - inventory_move_sound = item_sounds.mechanical_inventory_move, - pick_sound = item_sounds.mechanical_inventory_pickup, - drop_sound = item_sounds.mechanical_inventory_move, - stack_size = 1, - weight = 1 * tons, - send_to_orbit_mode = "automated", - spoil_ticks = 60 * 60 * 10 +local silo_ready = { + type = "container", + name = "provisional-rocket-silo-ready", + icon = silo.icon, + minable = { mining_time = 1, result = nil }, + deconstruction_alternative = "provisional-rocket-silo", + inventory_size = 40, + inventory_type = "normal", + quality_affects_inventory_size = false, + placeable_by = { item = "provisional-rocket-silo", count = 1 }, + health = 1000, + surface_conditions = { + { + property = "pressure", + min = 1 + } + }, + flags = { "not-on-map", "not-blueprintable", "not-deconstructable", "not-flammable", "not-repairable", "not-upgradable", "no-automated-item-insertion", "no-automated-item-removal", "not-in-kill-statistics" }, + allow_copy_paste = false, + additional_pastable_entities = { "provisional-rocket-silo" }, + --picture = { + -- layers = { + -- { + -- filename = "__base__/graphics/entity/rocket-silo/01-rocket-silo-hole.png", + -- width = 400, + -- height = 270, + -- shift = util.by_pixel(-5, 16), + -- scale = 0.5 + -- }, + -- { + -- filename = "__base__/graphics/entity/rocket-silo/00-rocket-silo-shadow.png", + -- priority = "medium", + -- width = 612, + -- height = 578, + -- draw_as_shadow = true, + -- dice = 2, + -- shift = util.by_pixel(7, 2), + -- scale = 0.5 + -- }, + -- --{ + -- -- filename = "__base__/graphics/entity/rocket-silo/04-door-back.png", + -- -- width = 312, + -- -- height = 286, + -- -- shift = util.by_pixel(37, 12), + -- -- scale = 0.5 + -- --}, + -- --{ + -- -- filename = "__base__/graphics/entity/rocket-silo/05-door-front.png", + -- -- width = 332, + -- -- height = 300, + -- -- shift = util.by_pixel(-28, 33), + -- -- scale = 0.5 + -- --}, + -- { + -- filename = "__lignumis__/graphics/entity/wooden-rocket-silo/06-rocket-silo.png", + -- dice_y = 3, + -- width = 608, + -- height = 596, + -- shift = util.by_pixel(3, -1), + -- scale = 0.5 + -- }, + -- { + -- filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png", + -- width = 32, + -- height = 32, + -- shift = { 1.34375, 0.28125 - 1.375 }, + -- scale = 0.5 + -- }, + -- { + -- filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png", + -- width = 32, + -- height = 32, + -- shift = { 2.3125, 0.9375 - 1.375 }, + -- scale = 0.5 + -- }, + -- { + -- filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png", + -- width = 32, + -- height = 32, + -- shift = { 2.65625, 1.90625 - 1.375 }, + -- scale = 0.5 + -- }, + -- { + -- filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png", + -- width = 32, + -- height = 32, + -- shift = { -2.65625, 1.90625 - 1.375 }, + -- scale = 0.5 + -- }, + -- { + -- filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png", + -- width = 32, + -- height = 32, + -- shift = { -2.3125, 0.9375 - 1.375 }, + -- scale = 0.5 + -- }, + -- { + -- filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png", + -- width = 32, + -- height = 32, + -- shift = { -1.34375, 0.28125 - 1.375 }, + -- scale = 0.5 + -- }, + -- { + -- filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png", + -- width = 32, + -- height = 32, + -- shift = { 0, 0 - 1.375 }, + -- scale = 0.5 + -- }, + -- { + -- filename = "__base__/graphics/entity/rocket-silo/08-rocket-silo-arms-back.png", + -- priority = "medium", + -- width = 128, + -- height = 150, + -- x = 3968, + -- animation_speed = 0.3, + -- shift = util.by_pixel(-53, -84), + -- scale = 0.5 + -- }, + -- { + -- filename = "__base__/graphics/entity/rocket-silo/08-rocket-silo-arms-right.png", + -- priority = "medium", + -- width = 182, + -- height = 188, + -- x = 5642, + -- animation_speed = 0.3, + -- shift = util.by_pixel(101, -38), + -- scale = 0.5 + -- }, + -- { + -- filename = "__base__/graphics/entity/rocket-silo/rocket-static-pod-shadow.png", + -- priority = "medium", + -- width = 738, + -- height = 214, + -- shift = util.by_pixel(160.5, 23.5), + -- draw_as_shadow = true, + -- scale = 0.5 + -- }, + -- { + -- filename = "__lignumis__/graphics/entity/wooden-rocket-silo/rocket-static-pod.png", + -- priority = "medium", + -- width = 308, + -- height = 602, + -- shift = util.by_pixel(-4, -41.25), + -- scale = 0.5 + -- }, + -- { + -- filename = "__base__/graphics/entity/rocket-silo/rocket-static-emission.png", + -- width = 306, + -- height = 518, + -- shift = util.by_pixel(-4, -4.25), + -- draw_as_glow = true, + -- blend_mode = "additive", + -- scale = 0.5 + -- }, + -- { + -- filename = "__base__/graphics/entity/rocket-silo/03-rocket-over-shadow-over-rocket.png", + -- width = 426, + -- height = 288, + -- shift = util.by_pixel(-2, 21), + -- scale = 0.5 + -- }, + -- { + -- filename = "__lignumis__/graphics/entity/wooden-rocket-silo/14-rocket-silo-front.png", + -- width = 580, + -- height = 262, + -- shift = util.by_pixel(-1, 78), + -- scale = 0.5 + -- }, + -- { + -- filename = "__base__/graphics/entity/rocket-silo/13-rocket-silo-arms-front.png", + -- priority = "medium", + -- width = 126, + -- height = 228, + -- x = 3906, + -- animation_speed = 0.3, + -- shift = util.by_pixel(-51, 16), + -- scale = 0.5 + -- } + -- } + --}, + collision_mask = { layers = {} }, + collision_box = table.deepcopy(silo.collision_box), + selection_box = table.deepcopy(silo.selection_box), } -local nauvis_recipe = { - type = "recipe", - name = "destination-nauvis", - enabled = false, - ingredients = {}, - results = { { type = "item", name = "destination-nauvis", amount = 1 } } -} +local silo_ready_item = table.deepcopy(data.raw["item"]["rocket-silo"]) +silo_ready_item.name = "provisional-rocket-silo-ready" +silo_ready_item.order = "0[provisional-rocket-silo-ready]" +silo_ready_item.place_result = "provisional-rocket-silo-ready" +silo_ready_item.icon = "__lignumis__/graphics/icons/provisional-rocket-silo.png" data:extend({ silo, @@ -121,6 +297,6 @@ data:extend({ silo_recipe, rocket, rocket_part_recipe, - nauvis_item, - nauvis_recipe + silo_ready, + silo_ready_item }) diff --git a/lignumis/script/init-existing.lua b/lignumis/scripts/init-existing.lua similarity index 90% rename from lignumis/script/init-existing.lua rename to lignumis/scripts/init-existing.lua index b50a7a1..9d44fa9 100644 --- a/lignumis/script/init-existing.lua +++ b/lignumis/scripts/init-existing.lua @@ -4,9 +4,7 @@ local InitExisting = {} -- Don't send players to Lignumis but instead print a warning InitExisting.on_init = function() - if game.tick == 0 then - return - end + if game.tick == 0 then return end storage.init = {} for _, player in pairs(game.players) do diff --git a/lignumis/script/init-new.lua b/lignumis/scripts/init-new.lua similarity index 94% rename from lignumis/script/init-new.lua rename to lignumis/scripts/init-new.lua index ff7eefc..efe1a07 100644 --- a/lignumis/script/init-new.lua +++ b/lignumis/scripts/init-new.lua @@ -6,9 +6,7 @@ local InitNew = {} -- Initialize the freeplay intro local function init_intro() - if not remote.interfaces.freeplay then - return - end + if not remote.interfaces.freeplay then return end -- Disable Nauvis intro remote.call("freeplay", "set_disable_crashsite", true) @@ -63,9 +61,7 @@ end InitNew.on_init = function() - if game.tick > 0 then - return - end + if game.tick > 0 then return end init_intro() init_space_locations() diff --git a/lignumis/script/init.lua b/lignumis/scripts/init.lua similarity index 84% rename from lignumis/script/init.lua rename to lignumis/scripts/init.lua index 9370f4e..8487110 100644 --- a/lignumis/script/init.lua +++ b/lignumis/scripts/init.lua @@ -23,9 +23,7 @@ end local function init_player(event) local player = game.get_player(event.player_index) - if not player.character then - return - end + if not player.character then return end local surface = storage.surface or game.planets["lignumis"].surface player.teleport(surface.find_non_colliding_position("character", { 0, 0 }, 0, 1), "lignumis") @@ -41,9 +39,7 @@ end local function init_freeplay(event) local player = game.get_player(event.player_index) - if not player or not remote.interfaces.freeplay then - return - end + if not player or not remote.interfaces.freeplay then return end local surface = storage.surface or game.planets["lignumis"].surface storage.crashed_ship_items = remote.call("freeplay", "get_ship_items") @@ -75,9 +71,7 @@ Init.events[defines.events.on_player_created] = function(event) migrate_0_9_6(event) storage.init = storage.init or {} - if storage.init[event.player_index] then - return - end + if storage.init[event.player_index] then return end storage.init[event.player_index] = true init_player(event) @@ -96,19 +90,13 @@ end -- End intro and show starting message Init.events[defines.events.on_cutscene_waypoint_reached] = function(event) - if not storage.crash_site_cutscene_active then - return - end - if not crash_site.is_crash_site_cutscene(event) then - return - end + if not storage.crash_site_cutscene_active then return end + if not crash_site.is_crash_site_cutscene(event) then return end local player = game.get_player(event.player_index) player.exit_cutscene() - if storage.skip_intro then - return - end + if storage.skip_intro then return end local intro_message = storage.custom_intro_message or { "msg-intro-space-age" } @@ -122,12 +110,9 @@ end -- Cancel intro Init.events["crash-site-skip-cutscene"] = function(event) - if not storage.crash_site_cutscene_active then - return - end - if event.player_index ~= 1 then - return - end + if not storage.crash_site_cutscene_active then return end + if event.player_index ~= 1 then return end + local player = game.get_player(event.player_index) if player.controller_type == defines.controllers.cutscene then player.exit_cutscene() @@ -135,12 +120,9 @@ Init.events["crash-site-skip-cutscene"] = function(event) end Init.events[defines.events.on_cutscene_cancelled] = function(event) - if not storage.crash_site_cutscene_active then - return - end - if event.player_index ~= 1 then - return - end + if not storage.crash_site_cutscene_active then return end + if event.player_index ~= 1 then return end + storage.crash_site_cutscene_active = nil local player = game.get_player(event.player_index) if player.gui.screen.skip_cutscene_label then diff --git a/lignumis/script/to-nauvis.lua b/lignumis/scripts/to-nauvis.lua similarity index 53% rename from lignumis/script/to-nauvis.lua rename to lignumis/scripts/to-nauvis.lua index 884d4ac..66d4087 100644 --- a/lignumis/script/to-nauvis.lua +++ b/lignumis/scripts/to-nauvis.lua @@ -1,5 +1,4 @@ local crash_site = require("crash-site") -local util = require("util") -- Transition from Lignumis to Nauvis with the provisional rocket silo @@ -19,6 +18,7 @@ end -- Initialize Nauvis local function init_nauvis() + if storage.nauvis_visited then return end local nauvis = game.planets["nauvis"].create_surface() nauvis.request_to_generate_chunks({ 0, 0 }, 3) nauvis.force_generate_chunk_requests() @@ -26,32 +26,28 @@ local function init_nauvis() end --- Teleport all players to Nauvis and show welcoe message -local function teleport_players() +-- Teleport player to Nauvis and show welcome message +local function teleport_player(player) local nauvis = game.planets["nauvis"].surface - for _, player in pairs(game.players) do - if player.surface.name == "lignumis" then - player.teleport(nauvis.find_non_colliding_position("character", { 0, 0 }, 0, 1), "nauvis") - chart_starting_area(nauvis, player) - player.print("Oh no, not again. But... Welcome to Nauvis!") - end + if player.surface.name == "lignumis" then + player.teleport(nauvis.find_non_colliding_position("character", { 0, 0 }, 0, 1), "nauvis") + chart_starting_area(nauvis, player) + player.print("Oh no, not again. But... Welcome to Nauvis!") end end -- Initialize the Nauvis freeplay scenario local function init_freeplay() - if not remote.interfaces.freeplay then - return - end + if not remote.interfaces.freeplay then return end local nauvis = game.planets["nauvis"].surface local ship_items = { - ["burner-mining-drill"] = 5, - ["stone-furnace"] = 5, + ["burner-mining-drill"] = 2, + ["stone-furnace"] = 2, ["burner-assembling-machine"] = 2, - ["burner-agricultural-tower"] = 4, - ["wood-lab"] = 4 + ["burner-agricultural-tower"] = 2, + ["wood-lab"] = 2 } local debris_items = { ["wood-darts-magazine"] = 20, ["wood"] = 20, ["lumber"] = 20 } local crashed_ship_parts = remote.call("freeplay", "get_ship_parts") @@ -61,13 +57,32 @@ end ToNauvis.events[defines.events.on_rocket_launched] = function(event) - if not event.rocket_silo.name == "provisional-rocket-silo" then - return + if not event.rocket_silo.name == "provisional-rocket-silo" then return end + + local rocket_entry + local rocket_entry_index + local player + + for i, entry in pairs(storage.rocket_silos) do + if entry.real_silo == event.rocket_silo then + rocket_entry = entry + rocket_entry_index = i + player = game.get_player(entry.player) + break + end end init_nauvis() - teleport_players() + teleport_player(player) init_freeplay() + + -- Give the player the content of the rocket + local inventory = player.get_main_inventory() + for _, item in pairs(rocket_entry.rocket_content) do + inventory.insert(item) + end + inventory.sort_and_merge() + table.remove(storage.rocket_silos, rocket_entry_index) end -return ToNauvis \ No newline at end of file +return ToNauvis diff --git a/lignumis/scripts/wooden-rocket-silo.lua b/lignumis/scripts/wooden-rocket-silo.lua new file mode 100644 index 0000000..d1b8d18 --- /dev/null +++ b/lignumis/scripts/wooden-rocket-silo.lua @@ -0,0 +1,147 @@ +local RocketSilo = { + events = {} +} + + +-- Logic for provisional rocket silo with fake silo with inventory and custom launch GUI + +local function build_gui(player, rocket_silo) + local anchor = { + gui = defines.relative_gui_type.container_gui, + names = { "provisional-rocket-silo-ready" }, + position = defines.relative_gui_position.right + } + + local launch_button = { type = "button", name = "provisional-rocket-silo-launch-button", caption = { "lignumis.provisional-rocket-silo-button" } } + + local inventory = player.get_main_inventory() + launch_button.enabled = inventory.is_empty() + if not launch_button.enabled then + launch_button.tooltip = { "lignumis.provisional-rocket-silo-button-tooltip" } + end + + storage.rocket_silo_guis = storage.rocket_silo_guis or {} + storage.rocket_silo_guis[player.index] = { + fake_silo = rocket_silo, + gui = gui.add(player.gui.relative, { + { + type = "frame", + name = "provisional-rocket-silo-relative-frame", + direction = "vertical", + anchor = anchor, + children = { + { type = "label", style = "frame_title", caption = { "lignumis.provisional-rocket-silo-button" }, ignored_by_interaction = true }, + { + type = "frame", + direction = "vertical", + style = "inside_shallow_frame_with_padding", + children = { + { + type = "flow", + direction = "vertical", + style = "inset_frame_container_vertical_flow", + children = { + { type = "label", caption = { "lignumis.provisional-rocket-silo-description" } }, + launch_button + } + } + } + } + } + } + }) + } +end + + +local function on_gui_opened(event) + local entity = event.entity + if not entity or not entity.valid then return end + if entity.name ~= "provisional-rocket-silo-ready" then return end + local player = game.get_player(event.player_index) + + if player.gui.relative["provisional-rocket-silo-relative-frame"] then + player.gui.relative["provisional-rocket-silo-relative-frame"].destroy() + end + + build_gui(player, entity) +end + + +local function on_gui_closed(event) + local entity = event.entity + if not entity or not entity.valid then return end + if entity.name ~= "provisional-rocket-silo-ready" then return end +end + + +local function launch(event) + if event.element.name ~= "provisional-rocket-silo-launch-button" then return end + local player = game.get_player(event.player_index) + local fake_silo = storage.rocket_silo_guis[player.index].fake_silo + rocket_content = fake_silo.get_inventory(defines.inventory.chest).get_contents() + for _, entry in pairs(storage.rocket_silos) do + if entry.fake_silo == fake_silo then + entry.player = event.player_index + entry.rocket_content = rocket_content + fake_silo.destroy() + entry.real_silo.launch_rocket() + break + end + end +end + + +local function on_silo_mined(event) + if event.entity.name ~= "provisional-rocket-silo-ready" then return end + local fake_silo = event.entity + local player = game.get_player(event.player_index) + for i, entry in pairs(storage.rocket_silos) do + if entry.fake_silo == fake_silo then + player.mine_entity(entry.real_silo, true) + table.remove(storage.rocket_silos, i) + break + end + end +end + + +RocketSilo.on_init = function() + storage.rocket_silos = {} + storage.rocket_silo_guis = {} +end + + +RocketSilo.events[defines.events.on_script_trigger_effect] = function(event) + if event.effect_id ~= "provisional-rocket-ready" then return end + + local lignumis = game.planets["lignumis"].surface + + if event.surface_index ~= lignumis.index then return end + + local real_silo = event.cause_entity + local fake_silo = real_silo.surface.create_entity({ + name = "provisional-rocket-silo-ready", + position = real_silo.position, + force = real_silo.force, + create_build_effect_smoke = false, + }) + storage.rocket_silos = storage.rocket_silos or {} + table.insert(storage.rocket_silos, { + real_silo = real_silo, + fake_silo = fake_silo + }) + for _, player in pairs(real_silo.force.players) do + if player.selected == real_silo then + player.selected = fake_silo + end + end +end + +RocketSilo.events[defines.events.on_gui_opened] = on_gui_opened +RocketSilo.events[defines.events.on_gui_closed] = on_gui_closed +RocketSilo.events[defines.events.on_gui_click] = launch +RocketSilo.events[defines.events.on_player_mined_entity] = on_silo_mined + + +return RocketSilo