extends Spatial export(NodePath) var traveler = null onready var _traveler = get_node(traveler) export var acceleration = 10.0 onready var Chunk = preload("res://Chunk.tscn") onready var chunk_size = $"Chunks/Chunk/Size".shape.radius*2.0 var chunks = {} 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 chunk_coords(coords:Vector2): return coords.snapped(Vector2(chunk_size,chunk_size)) func gen_chunk(coords:Vector2): var chunk = Chunk.instance() chunk.transform.origin = v3_coords(coords) $"Chunks".add_child(chunk) chunks[coords] = chunk func gen_chunks(): var gen_center = -v2_coords($"Chunks".transform.origin) var gen_radius = $"ChunkRenderDistance/Radius".shape.radius var gen_radius_rounded = stepify(gen_radius, chunk_size) for x in range(-gen_radius_rounded, gen_radius_rounded+chunk_size, chunk_size): for y in range(-gen_radius_rounded, gen_radius_rounded+chunk_size, chunk_size): var gen_coords = Vector2(x,y) if gen_coords.length() > gen_radius: continue var coords = chunk_coords(gen_coords + gen_center) if !chunks.has(coords): gen_chunk(coords) func _on_ChunkRenderDistance_area_exited(area:Area): gen_chunks() area.queue_free() chunks.erase(v2_coords(area.transform.origin)) func _ready(): gen_chunks() func travel(direction:Vector3): var heading = _traveler.global_transform.basis heading = Basis(Vector3.UP*heading.get_euler().y) direction = -direction direction = heading * direction direction = direction.normalized() $"Chunks".add_central_force(direction*acceleration) func _physics_process(_state): var stick = Input.get_axis("ship_down","ship_up") if stick != 0.0: self.travel(Vector3.FORWARD*stick)