1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2024-12-30 23:17:53 +02:00
ComfyFactorio/terrain_layouts/watery_world.lua
2021-03-24 16:46:00 +01:00

83 lines
3.0 KiB
Lua

-- DISABLE WATER IN INGAME MAP GEN SETTINGS FOR BEST LOOKS
--[[
>>>eNpjYBBi4GVgZACCBnsQycOXmJeemlOsm5ZZXFxalMrA4OAAk
XOwF4JK5SWWlBYl5uimJxYjS3NDpfOLUg1xiBvhEDfGIW6CQ9wUh
7gZsjhLcn5iDrIAZ3JRaUqqbn4miihXal5qbqVuUmIx0LMHgMIMY
CnWkqLU1GKIIihmPLlZi7mhRY4BhP/XMyj8/w/CQNYDoC4QZmBsA
JoBVAkUgwHW5JzMtDQGBgVHIHYCGcTIyFgtss79YdUUe0aIGj0HK
OMDVORAEkzEE8bwc8AppQJjmMAYF+wZjcHgMxIDYmkJ0AqoKg4HB
AMi2QKSZGTsfbt1wfdjF+wY/6z8eMk3KcGe0dBV5N0Ho3V2QEkBk
D+Z4MSsmSCwE+YVBpiZD+yhUjftGc+eAYE39oysIB0iIEJBBkgEu
AEJAT4gsaAHJgbRbQczRsSBMQ0MvsF88hjGuGyP7g9gQNiADJcDE
SdABNhCuMsYIUyHfgdGB3mYrCRCCVC/EQOyG1IQPjwJs/Ywkv1oD
sGMCGR/oImoOGCJBi6QhSlw4gUz3DXA8LzADuM5zHdgZAYxQKq+A
MUgPEjihRgFoQUcmBkQAJi8BPc6XQMAy367Og==<<<
]]
local get_noise = require 'utils.get_noise'
local math_random = math.random
local math_floor = math.floor
local math_abs = math.abs
local spawn_size = 160
local spawn_check = spawn_size + 96
local waters = {'deepwater', 'water'}
local function is_water(position, noise, seed)
if math_abs(position.y) <= spawn_check or math_abs(position.x) <= spawn_check then
local border_noise = get_noise('cave_ponds', position, seed)
if math_abs(position.x) + border_noise * 10 < spawn_size and math_abs(position.y) + border_noise * 10 < spawn_size then
return false
end
if math_abs(position.x) + border_noise * 10 < spawn_size + 32 and math_abs(position.y) + border_noise * 10 < spawn_size + 32 then
return true
end
end
if math_abs(noise) < 0.15 then
return
end
if math_abs(noise) > 0.80 then
return
end
return true
end
local function on_chunk_generated(event)
local surface = event.surface
local seed = surface.map_gen_settings.seed
local left_top_x = event.area.left_top.x
local left_top_y = event.area.left_top.y
local set_tiles = surface.set_tiles
local get_tile = surface.get_tile
local position
local noise
for x = 0, 31, 1 do
for y = 0, 31, 1 do
position = {x = left_top_x + x, y = left_top_y + y}
if not get_tile(position).collides_with('resource-layer') then
noise = get_noise('watery_world', position, seed)
if is_water(position, noise, seed) then
set_tiles({{name = waters[math_floor(noise * 10 % 2 + 1)], position = position}}, true)
if math_random(1, 128) == 1 then
surface.create_entity({name = global.watery_world_fishes[math_random(1, #global.watery_world_fishes)], position = position})
end
end
end
end
end
end
local function on_init()
global.watery_world_fishes = {}
for _, prototype in pairs(game.entity_prototypes) do
if prototype.type == 'fish' then
table.insert(global.watery_world_fishes, prototype.name)
end
end
end
local Event = require 'utils.event'
Event.on_init(on_init)
Event.add(defines.events.on_chunk_generated, on_chunk_generated)