Godot-Voxel-Prototype/mapgen.gd

73 lines
1.8 KiB
GDScript

extends Node
var timer = 1
func _ready():
core.current_mapgen = funcref(self,"super_flatland")
yield(get_tree().create_timer(2),"timeout")
for x in range(-4,4):
for z in range(-4,4):
core.inset_map_node_id(5,Vector3(x,0,z))
core.chunk.update(Vector3(0,0,0))
var n2gc_timer = -0.01
var n2gc_time = 0
func _process(delta):
timer += delta
if timer > n2gc_time:
if n2gc_timer >= 1:
n2gc_timer = 0
n2gc_time = 1
else:
n2gc_timer += timer
timer = 0
var ppos = core.player.object.global_transform.origin
var pos = core.chunk.to_chunk_pos(ppos)
if core.chunk.get_chunk_at_pos(pos) == null:
core.chunk.new_chunk(pos)
core.current_mapgen.call_func(pos)
n2gc_time = 0
n2gc_timer = 0
#return
for i in range(1,core.settings.ganerate_chunk_range):
var r = core.chunk_size*i
var s = core.chunk_size
for x in range(-r,r,s):
for y in range(-r,r,s):
for z in range(-r,r,s):
pos = Vector3(x,y,z) + core.chunk.to_chunk_pos(ppos)
if core.chunk.get_chunk_at_pos(pos) == null:
core.chunk.new_chunk(pos)
core.current_mapgen.call_func(pos)
n2gc_time = 0
n2gc_timer = 0
#generates a flat map:
#all nodes above 9 will be air
#0 = grassy
#-1 - -3 = dirt
#-4 and lower = stone
func super_flatland(pos):
var id
var grassy = core.get_node_reg("grassy").id
var dirt = core.get_node_reg("dirt").id
var stone = core.get_node_reg("stone").id
var air = core.get_node_reg("air").id
var Y
for x in range(-core.chunk_size/2,core.chunk_size/2):
for y in range(-core.chunk_size/2,core.chunk_size/2):
for z in range(-core.chunk_size/2,core.chunk_size/2):
Y = pos.y+y
if Y == 0:
id = grassy
elif Y < -3:
id = stone
elif Y < 0:
id = dirt
else:
id = air
core.inset_map_node_id(id,Vector3(x,y,z)+pos)
core.chunk.update(pos)