1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-03-17 20:58:13 +02:00

basic terrain

This commit is contained in:
MewMew 2019-10-07 07:19:41 +02:00
parent 30b2519a2d
commit 1f0ca98420
3 changed files with 94 additions and 17 deletions

View File

@ -3,7 +3,7 @@ function locomotive_spawn(surface, position)
surface.create_entity({name = "straight-rail", position = {position.x, position.y + y}, force = "player", direction = 0})
end
global.locomotive = surface.create_entity({name = "locomotive", position = {position.x, position.y + -3}, force = "player"})
global.locomotive.get_inventory(defines.inventory.fuel).insert({name = "coal", count = 50})
global.locomotive.get_inventory(defines.inventory.fuel).insert({name = "wood", count = 100})
global.locomotive_cargo = surface.create_entity({name = "cargo-wagon", position = {position.x, position.y + 3}, force = "player"})
global.locomotive_cargo.get_inventory(defines.inventory.cargo_wagon).insert({name = "raw-fish", count = 4000})

View File

@ -31,12 +31,28 @@ local function on_entity_died(event)
end
end
local function on_entity_damaged(event)
if not event.entity.valid then return end
if event.entity.force.index ~= 1 then return end
if event.entity == global.locomotive or event.entity == global.locomotive_cargo then
if event.cause then
if event.cause.force.index == 2 then
return
end
end
event.entity.health = event.entity.health + event.final_damage_amount
end
end
local function on_player_joined_game(event)
local surface = game.surfaces["mountain_fortress"]
local player = game.players[event.player_index]
if player.online_time == 0 then
player.teleport(surface.find_non_colliding_position("character", game.forces.player.get_spawn_position(surface), 3, 0.5), surface)
player.insert({name = 'pistol', count = 1})
player.insert({name = 'firearm-magazine', count = 16})
player.insert({name = 'rail', count = 16})
end
end
@ -59,6 +75,8 @@ local function on_init(surface)
game.map_settings.enemy_expansion.settler_group_min_size = 16
game.map_settings.pollution.enabled = false
game.forces.player.technologies["steel-axe"].researched = true
game.forces.player.technologies["railway"].researched = true
game.forces.player.set_spawn_position({-2, 16}, surface)
locomotive_spawn(surface, {x = 0, y = 16})
@ -69,5 +87,6 @@ end
local event = require 'utils.event'
event.on_init(on_init)
event.add(defines.events.on_entity_damaged, on_entity_damaged)
event.add(defines.events.on_entity_died, on_entity_died)
event.add(defines.events.on_player_joined_game, on_player_joined_game)

View File

@ -1,25 +1,82 @@
local math_random = math.random
local simplex_noise = require "utils.simplex_noise".d2
local rock_raffle = {"sand-rock-big","sand-rock-big","rock-big","rock-big","rock-big","rock-big","rock-big","rock-big","rock-huge"}
local spawner_raffle = {"biter-spawner", "biter-spawner", "biter-spawner", "spitter-spawner"}
local noises = {
["large_caves"] = {{modifier = 0.0033, weight = 1}, {modifier = 0.01, weight = 0.22}, {modifier = 0.05, weight = 0.05}, {modifier = 0.1, weight = 0.04}},
["small_caves"] = {{modifier = 0.008, weight = 1}, {modifier = 0.03, weight = 0.15}, {modifier = 0.25, weight = 0.05}},
}
local caves_start = -360
local function process_position(surface, p)
local distance_to_center = math.sqrt(p.x^2 + p.y^2)
local index = math.floor((distance_to_center / 16) % 18) + 1
--if index == 7 then surface.create_entity({name = "rock-big", position = p}) return end
if index % 2 == 1 then
if math.random(1, 3) == 1 then
surface.create_entity({name = "rock-big", position = p})
else
surface.create_entity({name = "tree-0" .. math.ceil(index * 0.5), position = p})
end
return
local function get_noise(name, pos, seed)
local noise = 0
local d = 0
for _, n in pairs(noises[name]) do
noise = noise + simplex_noise(pos.x * n.modifier, pos.y * n.modifier, seed) * n.weight
d = d + n.weight
seed = seed + 10000
end
noise = noise / d
return noise
end
function get_cave_density_modifer(y)
if y < caves_start then y = y - 2048 end
local m = 1 + ((y) * 0.000175)
if m < 0.10 then m = 0.10 end
return m
end
local function process_rock_chunk_position(p, seed, tiles, entities)
local m = get_cave_density_modifer(p.y)
local noise = get_noise("large_caves", p, seed)
if noise > m * -1 and noise < m then
tiles[#tiles + 1] = {name = "dirt-7", position = p}
if math_random(1,3) > 1 then entities[#entities + 1] = {name = rock_raffle[math_random(1, #rock_raffle)], position = p} end
return
end
if math.abs(noise) > m * 7 then
tiles[#tiles + 1] = {name = "water", position = p}
return
end
if math.abs(noise) > m * 6.5 then
if math_random(1,16) == 1 then entities[#entities + 1] = {name="tree-02", position=p} end
end
if math.abs(noise) > m * 5 then
tiles[#tiles + 1] = {name = "grass-2", position = p}
if math_random(1,128) == 1 then entities[#entities + 1] = {name=spawner_raffle[math_random(1, #spawner_raffle)], position=p} end
return
end
local noise = get_noise("small_caves", p, seed)
if noise > (m + 0.05) * -1 and noise < m - 0.05 then
tiles[#tiles + 1] = {name = "dirt-6", position = p}
if math_random(1,5) > 1 then entities[#entities + 1] = {name = rock_raffle[math_random(1, #rock_raffle)], position = p} end
return
end
tiles[#tiles + 1] = {name = "out-of-map", position = p}
end
local function rock_chunk(surface, left_top)
for x = 0, 31, 1 do
for y = 0, 31, 1 do
surface.set_tiles({{name = "dirt-7", position = {x = left_top.x + x, y = left_top.y + y}}})
local tiles = {}
local entities = {}
local seed = game.surfaces[1].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_rock_chunk_position(p, seed, tiles, entities)
end
end
surface.set_tiles(tiles, true)
for _, e in pairs(entities) do
if game.entity_prototypes[e.name].type == "simple-entity" then
surface.create_entity(e)
else
if surface.can_place_entity(e) then
surface.create_entity(e)
end
end
end
end
@ -80,7 +137,7 @@ local function biter_chunk(surface, left_top)
for x = 0, 31, 1 do
for y = 0, 31, 1 do
local p = {x = left_top.x + x, y = left_top.y + y}
surface.set_tiles({{name = "sand-3", position = p}})
surface.set_tiles({{name = "dirt-3", position = p}})
tile_positions[#tile_positions + 1] = p
end
end
@ -102,6 +159,7 @@ end
local function process_chunk(left_top)
local surface = game.surfaces["mountain_fortress"]
game.forces.player.chart(surface, {{left_top.x, left_top.y},{left_top.x + 31, left_top.y + 31}})
if left_top.y == 96 and left_top.x == 96 then
local p = global.locomotive.position
for _, entity in pairs(surface.find_entities_filtered({area = {{p.x - 3, p.y - 4},{p.x + 3, p.y + 8}}, force = "neutral"})) do entity.destroy() end
@ -132,5 +190,5 @@ local function on_chunk_generated(event)
end
local event = require 'utils.event'
event.on_nth_tick(60, process_chunk_queue)
event.on_nth_tick(1, process_chunk_queue)
event.add(defines.events.on_chunk_generated, on_chunk_generated)