extends Spatial export(NodePath) var traveler = null onready var _traveler = get_node(traveler) export var acceleration = 10.0 onready var chunk_render_distance = $"ChunkRenderDistance" onready var chunk_render_mid = $"ChunkRenderMid" onready var chunk_render_close = $"ChunkRenderClose" onready var lod_distance = chunk_render_distance.get_node("Radius").shape.radius onready var lod_mid = chunk_render_mid.get_node("Radius").shape.radius onready var lod_close = chunk_render_close.get_node("Radius").shape.radius onready var chunk_half_size = $"Chunk/Size".shape.radius onready var chunk_size = chunk_half_size * 2.0 func _ready(): ChunkLoader.world = self ChunkGen.setup_monuments() func _on_ChunkRenderDistance_area_entered(area:Area): if area.lod < area.LOD.DISTANCE: area.lod = area.LOD.DISTANCE area.lod_update() func _on_ChunkRenderMid_area_entered(area:Area): if area.lod < area.LOD.MID: area.lod = area.LOD.MID area.lod_update() func _on_ChunkRenderClose_area_entered(area:Area): if area.lod < area.LOD.CLOSE: area.lod = area.LOD.CLOSE area.lod_update() func _on_ChunkRenderDistance_area_exited(area:Area): free_chunk(area) func _on_ChunkRenderMid_area_exited(area:Area): area.lod = area.LOD.DISTANCE area.lod_update() func _on_ChunkRenderClose_area_exited(area:Area): area.lod = area.LOD.MID area.lod_update() 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): ChunkLoader.chunk_update() var stick = Input.get_axis("ship_down","ship_up") if stick != 0.0: self.travel(Vector3.FORWARD*stick) func free_chunk(chunk): var coords = chunk.transform.origin coords = Vector2(coords.x,coords.z) coords = coords.snapped(Vector2(chunk_size,chunk_size)) ChunkLoader.free_chunk(coords)