87 lines
2.6 KiB
Lua
87 lines
2.6 KiB
Lua
local util = require("__AbandonedRuins__/utilities")
|
|
local spawning = require("__AbandonedRuins__/spawning")
|
|
|
|
local SURFACE_NAME = "ruins"
|
|
|
|
---@param center MapPosition
|
|
---@param half_size number
|
|
---@param surface LuaSurface
|
|
local function draw_dimensions(center, half_size, surface)
|
|
rendering.draw_line(
|
|
{
|
|
from = {center.x + 0.5, center.y},
|
|
to = {center.x - 0.5, center.y},
|
|
width = 2,
|
|
color = {b = 0.5, a = 0.5},
|
|
surface = surface
|
|
})
|
|
rendering.draw_line(
|
|
{
|
|
from = {center.x, center.y + 0.5},
|
|
to = {center.x, center.y - 0.5},
|
|
width = 2,
|
|
color = {b = 0.5, a = 0.5},
|
|
surface = surface
|
|
})
|
|
rendering.draw_rectangle(
|
|
{
|
|
left_top = {center.x - half_size, center.y - half_size},
|
|
right_bottom = {center.x + half_size, center.y + half_size},
|
|
filled = false,
|
|
width = 2,
|
|
color = {g = 0.3, a = 0.3},
|
|
surface = surface
|
|
})
|
|
end
|
|
|
|
script.on_init(function()
|
|
-- Disable normal spawning
|
|
remote.call("AbandonedRuins", "set_spawn_ruins", false)
|
|
end)
|
|
|
|
|
|
script.on_event(defines.events.on_player_created, function(event)
|
|
-- This stuff is all here instead of on_init because this relies on other mods' on_init,
|
|
-- which run after the scenario on_init, but before scenario on_player_created
|
|
|
|
-- Set up the debug surface
|
|
local ruin_set = remote.call("AbandonedRuins", "get_current_ruin_set")
|
|
local total_ruins_amount = #ruin_set.small + #ruin_set.medium + #ruin_set.large
|
|
local chunk_radius = math.ceil(math.sqrt(total_ruins_amount) / 2)
|
|
local mgs = {}
|
|
mgs.width = chunk_radius * 2 * 32
|
|
mgs.height = chunk_radius * 2 * 32
|
|
mgs.default_enable_all_autoplace_controls = false
|
|
mgs.property_expression_names = {}
|
|
mgs.property_expression_names.elevation = 10
|
|
local surface = game.create_surface(SURFACE_NAME, mgs)
|
|
surface.request_to_generate_chunks({0, 0}, chunk_radius)
|
|
surface.force_generate_chunk_requests()
|
|
|
|
-- Spawn all ruins at once, small to big, top left to bottom right
|
|
local x = -chunk_radius
|
|
local y = -chunk_radius
|
|
|
|
for size, ruin_list in pairs(ruin_set) do
|
|
for _, ruin in pairs(ruin_list) do
|
|
local center = util.get_center_of_chunk({x = x, y = y})
|
|
spawning.spawn_ruin(ruin, util.ruin_half_sizes[size], center, surface)
|
|
draw_dimensions(center, util.ruin_half_sizes[size], surface)
|
|
|
|
x = x + 1
|
|
if (x >= chunk_radius) then
|
|
x = -chunk_radius
|
|
y = y + 1
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Enable map editor for the player
|
|
local player = game.get_player(event.player_index)
|
|
player.toggle_map_editor()
|
|
game.tick_paused = false
|
|
player.teleport({0, 0}, SURFACE_NAME)
|
|
player.force = "neutral"
|
|
player.game_view_settings.show_entity_info = true
|
|
end)
|