extends Node class_name World var chunks : Dictionary[Vector2i, Chunk] var tps = 1 var update_timer = 0 signal updated(chunk : Chunk) func get_chunk_at(position : Vector2i) -> Chunk: if chunks.has(position): return chunks[position] var new_chunk : Chunk = Chunk.new(position) chunks[position] = new_chunk return new_chunk func tile_pos_to_chunk_pos(position : Vector2i) -> Vector2i: return floor(Vector2(position) / TileGlobals.chunk_size) func _ready() -> void: pass func set_tile(position : Vector2i, tile_id : int): var chunk_position : Vector2i = tile_pos_to_chunk_pos(position) var position_in_chunk = position - chunk_position * TileGlobals.chunk_size var chunk : Chunk = get_chunk_at(chunk_position) chunk.set_tile(position_in_chunk, tile_id) updated.emit(chunk) func add_item(position : Vector2i, item : Item): var chunk_position : Vector2i = tile_pos_to_chunk_pos(position) var position_in_chunk = position - chunk_position * TileGlobals.chunk_size var chunk : Chunk = get_chunk_at(chunk_position) func global_position_to_tile(position : Vector2) -> Vector2i: return Vector2i(floor(position/TileGlobals.tile_size)) func update_chunks(): for chunk in chunks.values(): if chunk.update(): updated.emit(chunk) func _process(delta): update_timer -= delta if update_timer <= 0: update_timer = 1/tps update_chunks()