1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-22 03:38:48 +02:00
2021-03-25 03:49:03 +01:00

105 lines
4.1 KiB
Lua

local random = math.random
local abs = math.abs
local floor = math.floor
local Balance = require 'maps.chronosphere.balance'
local Functions = require 'maps.chronosphere.world_functions'
local Raffle = require 'maps.chronosphere.raffles'
local Specials = require 'maps.chronosphere.terrain_specials'
local simplex_noise = require 'utils.simplex_noise'.d2
local Difficulty = require 'modules.difficulty_vote'
local function roll_biters(p, biters, entities)
local roll = random(1, biters)
if roll < 4 and p.x > -800 then
entities[#entities + 1] = {name = Raffle.spawners[random(1, #Raffle.spawners)], position = p, spawn_decorations = true}
elseif roll == 5 and p.x > -800 then
entities[#entities + 1] = {name = 'behemoth-worm-turret', position = p, spawn_decorations = true}
elseif roll == 6 then
entities[#entities + 1] = {name = Raffle.trees[random(1, #Raffle.trees)], position = p}
end
end
local function process_tile(p, seed, tiles, entities)
local body_radius = 1984 --3072
local body_square_radius = body_radius ^ 2
local body_center_position = {x = 0, y = 0}
local body_spacing = floor(body_radius * 0.82)
local body_circle_center_1 = {x = body_center_position.x, y = body_center_position.y - body_spacing}
local body_circle_center_2 = {x = body_center_position.x, y = body_center_position.y + body_spacing}
local difficulty = Difficulty.get().difficulty_vote_value
local biters = Balance.fish_market_base_modifier(difficulty)
--Main Fish Body
local distance_to_center_1 = ((p.x - body_circle_center_1.x) ^ 2 + (p.y - body_circle_center_1.y) ^ 2)
local distance_to_center_2 = ((p.x - body_circle_center_2.x) ^ 2 + (p.y - body_circle_center_2.y) ^ 2)
local eye_center = {x = -500, y = -150}
if distance_to_center_1 < body_square_radius and distance_to_center_2 < body_square_radius then
if p.x < -600 and p.x > -1090 and p.y < 64 and p.y > -64 then --mouth
local noise = simplex_noise(p.x * 0.006, 0, seed) * 20
if p.y <= 12 + noise and p.y >= -12 + noise then
tiles[#tiles + 1] = {name = 'water', position = p}
else
tiles[#tiles + 1] = {name = 'grass-1', position = p}
roll_biters(p, biters, entities)
end
else
local distance = Functions.distance(eye_center.x - p.x, eye_center.y - p.y)
if distance < 33 and distance >= 15 then --eye
tiles[#tiles + 1] = {name = 'water-green', position = p}
elseif distance < 15 then --eye
tiles[#tiles + 1] = {name = 'out-of-map', position = p}
else --rest
tiles[#tiles + 1] = {name = 'grass-1', position = p}
roll_biters(p, biters, entities)
end
end
else
if p.x > 800 and abs(p.y) < p.x - 800 then --tail
tiles[#tiles + 1] = {name = 'grass-1', position = p}
roll_biters(p, biters, entities)
else
tiles[#tiles + 1] = {name = 'out-of-map', position = p}
end
end
end
local function market_chunk(surface, left_top)
local tiles = {}
local entities = {}
local seed = surface.map_gen_settings.seed
for y = 0, 31, 1 do
for x = 0, 31, 1 do
local p = {x = left_top.x + x, y = left_top.y + y}
process_tile(p, seed, tiles, entities)
end
end
surface.set_tiles(tiles, true)
Specials.fish_market(surface, left_top)
end
local function normal_chunk(surface, left_top)
local tiles = {}
local entities = {}
local seed = surface.map_gen_settings.seed
for y = 0, 31, 1 do
for x = 0, 31, 1 do
local p = {x = left_top.x + x, y = left_top.y + y}
process_tile(p, seed, tiles, entities)
end
end
surface.set_tiles(tiles, true)
Functions.spawn_entities(surface, entities)
end
local function fishmarket(_, surface, left_top)
if abs(left_top.y) <= 31 and abs(left_top.x - 864) <= 31 then
market_chunk(surface, left_top)
return
end
normal_chunk(surface, left_top)
end
return fishmarket