2018-01-19 23:33:54 +02:00
|
|
|
require "map_gen.shared.perlin_noise"
|
2018-05-10 21:42:24 +02:00
|
|
|
local Event = require "utils.event"
|
2017-07-18 21:26:12 +02:00
|
|
|
|
2018-05-10 21:42:24 +02:00
|
|
|
local random_ores = {"iron-ore", "coal", "copper-ore", "stone", "uranium-ore"}
|
|
|
|
local random_dense = {1.15, 0.8, 1, 0.9, 0.5} --ore density reference
|
2017-07-14 20:12:28 +02:00
|
|
|
|
2018-05-10 21:42:24 +02:00
|
|
|
local function run_ores_module_setup()
|
|
|
|
if not global.ores_seed_A then
|
|
|
|
global.ores_seed_A = math.random(10, 10000)
|
2017-07-14 20:12:28 +02:00
|
|
|
end
|
2018-05-10 21:42:24 +02:00
|
|
|
if not global.ores_seed_B then
|
|
|
|
global.ores_seed_B = math.random(10, 10000)
|
2017-07-14 20:12:28 +02:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2018-05-10 21:42:24 +02:00
|
|
|
Event.on_init(run_ores_module_setup)
|
2017-07-14 20:12:28 +02:00
|
|
|
|
2018-05-10 21:42:24 +02:00
|
|
|
return function(x, y, world)
|
|
|
|
local pos = {world.x + 0.5, world.y + 0.5}
|
2017-07-14 20:12:28 +02:00
|
|
|
|
2018-05-10 21:42:24 +02:00
|
|
|
local entities = world.surface.find_entities_filtered {position = pos, type = "resource"}
|
|
|
|
for _, e in ipairs(entities) do
|
|
|
|
e.destroy()
|
|
|
|
end
|
2017-07-18 21:26:12 +02:00
|
|
|
|
2018-05-10 21:42:24 +02:00
|
|
|
local distance_bonus = 200 + math.sqrt(world.x * world.x + world.y * world.y) * 0.2
|
|
|
|
|
|
|
|
local wiggle = 100 + perlin:noise((x * 0.005), (y * 0.005), global.ores_seed_A + 41) * 60
|
|
|
|
local Ores_A = perlin:noise((x * 0.01), (y * 0.01), global.ores_seed_B + 57) * wiggle
|
|
|
|
|
|
|
|
if Ores_A > 35 then --we place ores
|
|
|
|
local Ores_B = perlin:noise((x * 0.02), (y * 0.02), global.ores_seed_B + 13) * wiggle
|
2017-07-14 20:12:28 +02:00
|
|
|
local a = 5
|
2018-05-10 21:42:24 +02:00
|
|
|
--
|
|
|
|
if Ores_A < 76 then
|
|
|
|
a = math.floor(Ores_A * 0.75 + Ores_B * 0.5) % 4 + 1
|
|
|
|
end --if its not super high we place normal ores
|
|
|
|
--
|
2017-07-14 20:12:28 +02:00
|
|
|
local res_amount = distance_bonus
|
|
|
|
res_amount = math.floor(res_amount * random_dense[a])
|
2018-05-10 21:42:24 +02:00
|
|
|
--
|
|
|
|
|
|
|
|
return {name = random_ores[a], amount = res_amount}
|
2017-07-14 20:12:28 +02:00
|
|
|
elseif Ores_A < -60 then
|
2018-05-10 21:42:24 +02:00
|
|
|
if math.random(1, 200) == 1 then
|
|
|
|
return {name = "crude-oil", amount = math.random(5000, 20000) + math.floor(distance_bonus) * 1500}
|
2017-07-14 20:12:28 +02:00
|
|
|
end
|
|
|
|
end
|
2017-07-18 21:26:12 +02:00
|
|
|
end
|