summaryrefslogtreecommitdiff
path: root/main.gd
blob: 77dcfab53efa26a8b7901c24114c613fe3fb4dbc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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())