diff options
Diffstat (limited to 'world/chunk/ChunkGen.gd')
-rw-r--r-- | world/chunk/ChunkGen.gd | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/world/chunk/ChunkGen.gd b/world/chunk/ChunkGen.gd new file mode 100644 index 0000000..5e99be8 --- /dev/null +++ b/world/chunk/ChunkGen.gd @@ -0,0 +1,49 @@ +extends Node + +var chunk_half_size setget _set_chunk_size +var chunk_size + +func _set_chunk_size(val): + chunk_half_size = val + chunk_size = val * 2.0 + +onready var noise = OpenSimplexNoise.new() + +func _ready(): + randomize() + noise.seed = randi() + noise.octaves = 4 + noise.period = 64 + noise.persistence = 0.001 + noise.lacunarity = 2.0 + +func gen_chunk(chunk): + var gen_tree = Spatial.new() + gen_tree.name = "gen_tree" + chunk.add_child(gen_tree) + iterate_chunk(chunk, Vector2(10.0,10.0), funcref(self,"gen_rocks")) + +func v2_coords(coords:Vector3): + return Vector2(coords.x,coords.z) + +func v3_coords(coords:Vector2): + return Vector3(coords.x,0.0,coords.y) + +func iterate_chunk(chunk,step:Vector2,cb:FuncRef): + var chunk_size_rounded = Vector2(chunk_half_size,chunk_half_size).snapped(step) + for x in range(-chunk_size_rounded.x,chunk_size_rounded.x,step.x): + for y in range(-chunk_size_rounded.y,chunk_size_rounded.y,step.y): + cb.call_func(chunk,Vector2(x,y)) + +onready var Rock = preload("res://world/obstacles/Rock.tscn") +const rock_size = 5.0 +func make_rock(chunk,xform:Transform): + var rock = Rock.instance() + rock.transform = xform + chunk.get_node("gen_tree").add_child(rock) + +func gen_rocks(chunk,chunk_coords:Vector2): + var world_coords = chunk_coords + v2_coords(chunk.transform.origin) + var noise_val = self.noise.get_noise_2dv(world_coords) + if noise_val > 0.4: + make_rock(chunk,Transform(Basis().scaled(Vector3(2.0,2.0,2.0)),v3_coords(chunk_coords))) |