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())
|