génération des chunks

pull/47/head
Valentin Stark 3 years ago
parent bad548dbd5
commit bc449574ae
  1. 1
      utils/terrain/Terrain.gd
  2. 9
      utils/world_generation/WorldGeneration.gd
  3. 11
      world/World3d.gd
  4. 9
      world/chunk.gd
  5. 2
      world/game.tscn

@ -853,5 +853,6 @@ func get_voronoi_cells_as_polygon():
func get_chunk(vect): func get_chunk(vect):
var centers = [] var centers = []
for idx in _data["find_point"][int(vect[0] / 64.0) * 32 + int(vect[1] / 64.0)]: for idx in _data["find_point"][int(vect[0] / 64.0) * 32 + int(vect[1] / 64.0)]:
# print(idx)
centers.append(get_center(idx)) centers.append(get_center(idx))
return centers return centers

@ -4,7 +4,7 @@ class_name WorldGeneration
export(int) var width = 2048 export(int) var width = 2048
export(int) var height = 2048 export(int) var height = 2048
export(int) var spacing = 40 export(int) var spacing = 5
export(int, 1, 9) var octaves = 5 export(int, 1, 9) var octaves = 5
export(int, 1, 30) var wavelength = 8 export(int, 1, 30) var wavelength = 8
export(int) var border_width = 200 export(int) var border_width = 200
@ -289,8 +289,13 @@ func create_mesh():
st.begin(Mesh.PRIMITIVE_TRIANGLES) st.begin(Mesh.PRIMITIVE_TRIANGLES)
var factor = Vector3(1, 120, 1) var factor = Vector3(1, 120, 1)
for center in Global.terrain.get_centers(): # for center in Global.terrain.get_centers():
for i in range(1, 2048):
for j in range(1, 2048):
for center in Global.terrain.get_chunk(Vector2(i, j)):
# print(center.get_data("water"))
if not center.get_data("water"): if not center.get_data("water"):
# print(center.get_data("material"))
var material_id = materials[center.get_data("material")] var material_id = materials[center.get_data("material")]
var top_uv = Vector2(0, float(material_id) / (materials.size()-1)) var top_uv = Vector2(0, float(material_id) / (materials.size()-1))
var border_uv = Vector2(1, float(material_id) / (materials.size()-1)) var border_uv = Vector2(1, float(material_id) / (materials.size()-1))

@ -1,8 +1,8 @@
extends Spatial extends Spatial
var rng = RandomNumberGenerator.new() var rng = RandomNumberGenerator.new()
var chunk_size = 16 var chunk_size = 32
var chunk_amount = 16 var chunk_amount = 4
var chunks = {} var chunks = {}
var unready_chunks = {} var unready_chunks = {}
var thread var thread
@ -47,9 +47,12 @@ func load_chunk(array):
var x = array[1] var x = array[1]
var z = array[2] var z = array[2]
# print(x)
# print(z)
var chunk = Chunk.new(x * chunk_size, z * chunk_size) var chunk = Chunk.new(x * chunk_size, z * chunk_size)
chunk.translation = Vector3(x * chunk_size, 0, z * chunk_size) # chunk.translation = Vector3(x * chunk_size, 0, z * chunk_size)
call_deferred("load_done", chunk, thread) call_deferred("load_done", chunk, thread)
@ -76,7 +79,7 @@ func update_chunks():
var camera_translation = $CamBase/Camera.translation var camera_translation = $CamBase/Camera.translation
# print(camera_translation) # print(camera_translation)
var c_x = int(camera_translation.x) / chunk_size var c_x = int(camera_translation.x) / chunk_size
var c_z = int(camera_translation.z) / chunk_size var c_z = int(camera_translation.y) / chunk_size * -1
for x in range(c_x - chunk_amount * 0.5, c_x + chunk_amount * 0.53): for x in range(c_x - chunk_amount * 0.5, c_x + chunk_amount * 0.53):
for z in range(c_z - chunk_amount * 0.5, c_z + chunk_amount * 0.53): for z in range(c_z - chunk_amount * 0.5, c_z + chunk_amount * 0.53):

@ -5,6 +5,7 @@ var noise
var should_remove = true var should_remove = true
var x var x
var z var z
var empty = true
func _init(x, z): func _init(x, z):
self.x = x self.x = x
@ -12,7 +13,7 @@ func _init(x, z):
func _ready(): func _ready():
generate_chunk() generate_chunk()
pass
func generate_chunk(): func generate_chunk():
var file = File.new() var file = File.new()
file.open("res://world/materials/materials.json", File.READ) file.open("res://world/materials/materials.json", File.READ)
@ -22,8 +23,13 @@ func generate_chunk():
st.begin(Mesh.PRIMITIVE_TRIANGLES) st.begin(Mesh.PRIMITIVE_TRIANGLES)
var factor = Vector3(1, 120, 1) var factor = Vector3(1, 120, 1)
# print(x)
# print(z)
for center in Global.terrain.get_chunk(Vector2(x, z)): for center in Global.terrain.get_chunk(Vector2(x, z)):
# print(center.get_data("water"))
if not center.get_data("water"): if not center.get_data("water"):
empty = false
# print(center.get_data("material"))
var material_id = materials[center.get_data("material")] var material_id = materials[center.get_data("material")]
var top_uv = Vector2(0, float(material_id) / (materials.size()-1)) var top_uv = Vector2(0, float(material_id) / (materials.size()-1))
var border_uv = Vector2(1, float(material_id) / (materials.size()-1)) var border_uv = Vector2(1, float(material_id) / (materials.size()-1))
@ -59,6 +65,7 @@ func generate_chunk():
st.add_vertex(Vector3(center.point2d().x, center.get_elevation(), center.point2d().y) * factor) st.add_vertex(Vector3(center.point2d().x, center.get_elevation(), center.point2d().y) * factor)
Global.loading.increment_step() Global.loading.increment_step()
if not empty:
st.generate_normals() st.generate_normals()
st.index() st.index()

@ -176,7 +176,7 @@ fov = 55.0
depth_threshold = 0.001 depth_threshold = 0.001
depth_multiplier = 999.0 depth_multiplier = 999.0
zoom_sensibility = 1.436 zoom_sensibility = 1.436
height = 6.596 height = 5.0
[node name="DirectionalLight" type="DirectionalLight" parent="World3d"] [node name="DirectionalLight" type="DirectionalLight" parent="World3d"]
transform = Transform( 0.971628, 0.168947, -0.16552, 0, 0.699825, 0.714314, 0.236516, -0.694047, 0.67997, 0, 1.41623, 14.8745 ) transform = Transform( 0.971628, 0.168947, -0.16552, 0, 0.699825, 0.714314, 0.236516, -0.694047, 0.67997, 0, 1.41623, 14.8745 )

Loading…
Cancel
Save