class_name World extends Node3D @onready var noise := FastNoiseLite.new() func _ready() -> void: brrr() class OtherThread extends Thread: func _exit_tree(): wait_to_finish() func brrr(): noise.seed = randi() var thread = OtherThread.new() var rrrb = func(): for row in range(0, 2): Chunk.chunks.append([]) for column in range(0, 1): Chunk.chunks[row].append([]) for depth in range(0, 2): Chunk.chunks[row][column].append([]) var chunk = Chunk.new() chunk.noise = noise chunk.generate_block_data(row, column, depth) Chunk.chunks[row][column][depth] = chunk #var rrrb2 = func(): for row in Chunk.chunks.size(): for column in Chunk.chunks[row].size(): for depth in Chunk.chunks[row][column].size(): var chunk: Chunk = Chunk.chunks[row][column][depth] var mesh = chunk.generate_mesh() add_child.call_deferred(mesh) thread.start(rrrb) #thread.wait_to_finish() #thread.start(rrrb2) func create_chunk(chunk_position: Vector3) -> Chunk: var chunk := Chunk.new() chunk.noise = noise if Chunk.chunks.size() == chunk_position.x: Chunk.chunks.append([]) if Chunk.chunks[chunk_position.x].size() == chunk_position.y: Chunk.chunks[chunk_position.x].append([]) if Chunk.chunks[chunk_position.x][chunk_position.y].size() == chunk_position.z: Chunk.chunks[chunk_position.y].append([]) Chunk.chunks[chunk_position.x][chunk_position.y][chunk_position.z] = chunk return chunk func add_block(target_position: Vector3, block_type: Block.Type = Block.Type.AIR): var chunk_idx := Chunk.global_to_chunk(target_position) var chunk: Chunk var created_new_chunk := false if Chunk.chunk_exists(chunk_idx.x, chunk_idx.y, chunk_idx.z): chunk = Chunk.chunks[chunk_idx.x][chunk_idx.y][chunk_idx.z] else: created_new_chunk = true chunk = create_chunk(Vector3(chunk_idx.x, chunk_idx.y, chunk_idx.z)) chunk.generate_block_data(chunk_idx.x, chunk_idx.y, chunk_idx.z, true) var block_chunk_idx := Chunk.global_to_chunk_block(target_position) chunk.add_block(block_chunk_idx, block_type) if created_new_chunk: add_child.call_deferred(chunk.generate_mesh())