diff --git a/utils/terrain/Terrain.gd b/utils/terrain/Terrain.gd index de35550..1bb71ea 100644 --- a/utils/terrain/Terrain.gd +++ b/utils/terrain/Terrain.gd @@ -853,5 +853,6 @@ func get_voronoi_cells_as_polygon(): func get_chunk(vect): var centers = [] for idx in _data["find_point"][int(vect[0] / 64.0) * 32 + int(vect[1] / 64.0)]: + # print(idx) centers.append(get_center(idx)) return centers diff --git a/utils/world_generation/WorldGeneration.gd b/utils/world_generation/WorldGeneration.gd index c409e6c..c80cba6 100644 --- a/utils/world_generation/WorldGeneration.gd +++ b/utils/world_generation/WorldGeneration.gd @@ -4,7 +4,7 @@ class_name WorldGeneration export(int) var width = 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, 30) var wavelength = 8 export(int) var border_width = 200 @@ -289,41 +289,46 @@ func create_mesh(): st.begin(Mesh.PRIMITIVE_TRIANGLES) var factor = Vector3(1, 120, 1) - for center in Global.terrain.get_centers(): - if not center.get_data("water"): - var material_id = materials[center.get_data("material")] - var top_uv = Vector2(0, float(material_id) / (materials.size()-1)) - var border_uv = Vector2(1, float(material_id) / (materials.size()-1)) - - for edge in center.borders(): - if edge.end_center().get_elevation() < edge.start_center().get_elevation(): - var top = edge.start_center().get_elevation() - # if edge.start_center().get_data("ocean"): - # top = -1.0 - var bottom = edge.end_center().get_elevation() - if edge.end_center().get_data("ocean"): - bottom = 0.0 - st.add_uv(border_uv) - st.add_vertex(Vector3(edge.start_corner().point3d().x, bottom, edge.start_corner().point3d().z) * factor) - st.add_vertex(Vector3(edge.end_corner().point3d().x, top, edge.end_corner().point3d().z) * factor) - st.add_vertex(Vector3(edge.start_corner().point3d().x, top, edge.start_corner().point3d().z) * factor) - - st.add_vertex(Vector3(edge.start_corner().point3d().x, bottom, edge.start_corner().point3d().z) * factor) - st.add_vertex(Vector3(edge.end_corner().point3d().x, bottom, edge.end_corner().point3d().z) * factor) - st.add_vertex(Vector3(edge.end_corner().point3d().x, top, edge.end_corner().point3d().z) * factor) - - for corner_count in center.corners().size(): - var current_corner = center.corners()[corner_count] - var next_corner - if corner_count < center.corners().size() - 1: - next_corner = center.corners()[corner_count+1] - else: - next_corner = center.corners()[0] - - st.add_uv(Vector2(top_uv)) - st.add_vertex(Vector3(current_corner.point2d().x, center.get_elevation(), current_corner.point2d().y) * factor) - st.add_vertex(Vector3(next_corner.point2d().x, center.get_elevation(), next_corner.point2d().y) * factor) - st.add_vertex(Vector3(center.point2d().x, center.get_elevation(), center.point2d().y) * factor) + # 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"): + # print(center.get_data("material")) + var material_id = materials[center.get_data("material")] + var top_uv = Vector2(0, float(material_id) / (materials.size()-1)) + var border_uv = Vector2(1, float(material_id) / (materials.size()-1)) + + for edge in center.borders(): + if edge.end_center().get_elevation() < edge.start_center().get_elevation(): + var top = edge.start_center().get_elevation() + # if edge.start_center().get_data("ocean"): + # top = -1.0 + var bottom = edge.end_center().get_elevation() + if edge.end_center().get_data("ocean"): + bottom = 0.0 + st.add_uv(border_uv) + st.add_vertex(Vector3(edge.start_corner().point3d().x, bottom, edge.start_corner().point3d().z) * factor) + st.add_vertex(Vector3(edge.end_corner().point3d().x, top, edge.end_corner().point3d().z) * factor) + st.add_vertex(Vector3(edge.start_corner().point3d().x, top, edge.start_corner().point3d().z) * factor) + + st.add_vertex(Vector3(edge.start_corner().point3d().x, bottom, edge.start_corner().point3d().z) * factor) + st.add_vertex(Vector3(edge.end_corner().point3d().x, bottom, edge.end_corner().point3d().z) * factor) + st.add_vertex(Vector3(edge.end_corner().point3d().x, top, edge.end_corner().point3d().z) * factor) + + for corner_count in center.corners().size(): + var current_corner = center.corners()[corner_count] + var next_corner + if corner_count < center.corners().size() - 1: + next_corner = center.corners()[corner_count+1] + else: + next_corner = center.corners()[0] + + st.add_uv(Vector2(top_uv)) + st.add_vertex(Vector3(current_corner.point2d().x, center.get_elevation(), current_corner.point2d().y) * factor) + st.add_vertex(Vector3(next_corner.point2d().x, center.get_elevation(), next_corner.point2d().y) * factor) + st.add_vertex(Vector3(center.point2d().x, center.get_elevation(), center.point2d().y) * factor) Global.loading.increment_step() st.generate_normals() diff --git a/world/World3d.gd b/world/World3d.gd index 2682307..5bfc11c 100644 --- a/world/World3d.gd +++ b/world/World3d.gd @@ -1,8 +1,8 @@ extends Spatial var rng = RandomNumberGenerator.new() -var chunk_size = 16 -var chunk_amount = 16 +var chunk_size = 32 +var chunk_amount = 4 var chunks = {} var unready_chunks = {} var thread @@ -46,10 +46,13 @@ func load_chunk(array): var thread = array[0] var x = array[1] var z = array[2] + + # print(x) + # print(z) 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) @@ -74,9 +77,9 @@ func _process(delta): func update_chunks(): var camera_translation = $CamBase/Camera.translation -# print(camera_translation) + # print(camera_translation) 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 z in range(c_z - chunk_amount * 0.5, c_z + chunk_amount * 0.53): diff --git a/world/chunk.gd b/world/chunk.gd index b5430a8..955b0be 100644 --- a/world/chunk.gd +++ b/world/chunk.gd @@ -5,6 +5,7 @@ var noise var should_remove = true var x var z +var empty = true func _init(x, z): self.x = x @@ -12,7 +13,7 @@ func _init(x, z): func _ready(): generate_chunk() - + pass func generate_chunk(): var file = File.new() file.open("res://world/materials/materials.json", File.READ) @@ -22,8 +23,13 @@ func generate_chunk(): st.begin(Mesh.PRIMITIVE_TRIANGLES) var factor = Vector3(1, 120, 1) + # print(x) + # print(z) for center in Global.terrain.get_chunk(Vector2(x, z)): + # print(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 top_uv = Vector2(0, float(material_id) / (materials.size()-1)) var border_uv = Vector2(1, float(material_id) / (materials.size()-1)) @@ -59,13 +65,14 @@ func generate_chunk(): st.add_vertex(Vector3(center.point2d().x, center.get_elevation(), center.point2d().y) * factor) Global.loading.increment_step() - st.generate_normals() - st.index() + if not empty: + st.generate_normals() + st.index() - var mi = MeshInstance.new() - mi.mesh = st.commit() - var material = load("res://world/materials/world.material") - mi.set_surface_material(0, material) - mi.create_trimesh_collision() - mi.cast_shadow = GeometryInstance.SHADOW_CASTING_SETTING_ON - add_child(mi) + var mi = MeshInstance.new() + mi.mesh = st.commit() + var material = load("res://world/materials/world.material") + mi.set_surface_material(0, material) + mi.create_trimesh_collision() + mi.cast_shadow = GeometryInstance.SHADOW_CASTING_SETTING_ON + add_child(mi) diff --git a/world/game.tscn b/world/game.tscn index a05c5a7..b9f9c18 100644 --- a/world/game.tscn +++ b/world/game.tscn @@ -176,7 +176,7 @@ fov = 55.0 depth_threshold = 0.001 depth_multiplier = 999.0 zoom_sensibility = 1.436 -height = 6.596 +height = 5.0 [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 )