From 3f2a153736daed716e7f5ee9be8f35aa56192018 Mon Sep 17 00:00:00 2001 From: Valentin Stark Date: Tue, 16 Aug 2022 22:26:01 +0200 Subject: [PATCH 01/12] caca --- utils/terrain/Terrain.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/terrain/Terrain.gd b/utils/terrain/Terrain.gd index e923b8e..9337cbd 100644 --- a/utils/terrain/Terrain.gd +++ b/utils/terrain/Terrain.gd @@ -6,7 +6,7 @@ class Triangles: var _terrain var _curr var _end - + sqdqsdqsdsq func _init(terrain): self._terrain = terrain self._curr = 0 -- 2.36.2 From f108bc28bcd9aaf9f5cff4a915c1977127b066c0 Mon Sep 17 00:00:00 2001 From: Alain STARK Date: Tue, 16 Aug 2022 22:38:16 +0200 Subject: [PATCH 02/12] Add comments --- utils/terrain/Terrain.gd | 4 +++- world/game.tscn | 2 -- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/utils/terrain/Terrain.gd b/utils/terrain/Terrain.gd index 9337cbd..717c8fe 100644 --- a/utils/terrain/Terrain.gd +++ b/utils/terrain/Terrain.gd @@ -1,12 +1,14 @@ extends Reference +# Build terrain from delaunay graph class_name Terrain +# Triangles iterator class Triangles: var _terrain var _curr var _end - sqdqsdqsdsq + func _init(terrain): self._terrain = terrain self._curr = 0 diff --git a/world/game.tscn b/world/game.tscn index 04f54ff..3556972 100644 --- a/world/game.tscn +++ b/world/game.tscn @@ -8,6 +8,4 @@ script = ExtResource( 2 ) [node name="UI" parent="." instance=ExtResource( 1 )] -[connection signal="world_loaded" from="." to="UI/Map" method="_on_Game_world_loaded"] - [editable path="UI"] -- 2.36.2 From 7594b7d05c95e46157d72da7c31083c3111996b1 Mon Sep 17 00:00:00 2001 From: Valentin Stark Date: Tue, 16 Aug 2022 22:48:30 +0200 Subject: [PATCH 03/12] Added signal for map --- ui/map/map.gd | 3 ++- world/game.gd | 2 +- world/game.tscn | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/ui/map/map.gd b/ui/map/map.gd index b06d140..d00d79f 100644 --- a/ui/map/map.gd +++ b/ui/map/map.gd @@ -4,7 +4,8 @@ var terrain func create_map(): var river = {"size": 3, "color": "blue"} - + print(terrain) + print("a") terrain.get_edge(16).set_data("river", river) var triangle_idx = 5 diff --git a/world/game.gd b/world/game.gd index 02460cd..786c9b0 100644 --- a/world/game.gd +++ b/world/game.gd @@ -24,7 +24,7 @@ func _ready(): noise.octaves = octaves terrain = Terrain.new(width,height,spacing,true) init_points_data() - print(terrain.get_point(3)) + print(terrain) emit_signal("world_loaded", terrain) func init_points_data(): diff --git a/world/game.tscn b/world/game.tscn index 3556972..04f54ff 100644 --- a/world/game.tscn +++ b/world/game.tscn @@ -8,4 +8,6 @@ script = ExtResource( 2 ) [node name="UI" parent="." instance=ExtResource( 1 )] +[connection signal="world_loaded" from="." to="UI/Map" method="_on_Game_world_loaded"] + [editable path="UI"] -- 2.36.2 From 02a857ed55675689e64f2a169e4c035232493d43 Mon Sep 17 00:00:00 2001 From: Valentin Stark Date: Tue, 16 Aug 2022 23:17:48 +0200 Subject: [PATCH 04/12] Map : Triangle color based on elevation --- ui/map/map.gd | 13 ++++++++++--- world/game.gd | 23 +++++++++++++---------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/ui/map/map.gd b/ui/map/map.gd index d00d79f..0712a66 100644 --- a/ui/map/map.gd +++ b/ui/map/map.gd @@ -42,10 +42,17 @@ func create_map(): func draw_triangles(): - for polygon in terrain.get_triangles_as_polygon(): + for triangle in terrain.get_triangles(): + var colors = Gradient.new() + colors.add_point(0.999, Color("#9e0142")) # red + colors.add_point(0.5, Color("#dc865d")) # orange + colors.add_point(0.25, Color("#fbf8b0")) # yellow + colors.add_point(0, Color("#89cfa5")) # green + colors.add_point(-0.999, Color("#5e4fa2")) # blue var color = Color(randf(), randf(), randf(), 1) - if polygon.size() > 2: - draw_polygon(polygon, PoolColorArray([color])) + color = colors.interpolate(min(triangle.get_data("elevation"), 0.999)) + if triangle.polygon().size() > 2: + draw_polygon(triangle.polygon(), PoolColorArray([color])) func draw_triangles_edges(color=Color("#000000")): for line in terrain.get_edges_as_line(): diff --git a/world/game.gd b/world/game.gd index 786c9b0..118f253 100644 --- a/world/game.gd +++ b/world/game.gd @@ -28,8 +28,8 @@ func _ready(): emit_signal("world_loaded", terrain) func init_points_data(): - for index in terrain.get_points().size(): - terrain.get_point(index).set_elevation(find_elevation(terrain.get_point(index).point2d())) + for point in terrain.get_points(): + point.set_elevation(find_point_elevation(point.point2d())) # points_data.append({ # "elevation": 0, # "used": false, @@ -39,8 +39,10 @@ func init_points_data(): # "mountain": false, # "river": false # }) + for triangle in terrain.get_triangles(): + triangle.set_data("elevation", find_triangle_elevation(triangle)) -func find_elevation(point): +func find_point_elevation(point): var border = border_width + rng.randf_range(-20.0, 20.0) var elevation = noise.get_noise_2d(point.x / wavelength, point.y / wavelength) @@ -60,11 +62,12 @@ func find_elevation(point): elevation = min(elevation, 1) - elevation = elevation * terraces + # elevation = elevation * terraces + return elevation + +func find_triangle_elevation(triangle): + var elevation = 0 + for point in triangle.points(): + elevation += point.get_elevation() + elevation /= 3 return elevation -# -# if points_data[point_id].elevation <= 0: -# points_data[point_id].water = true -# -# if points_data[point_id].elevation >= mountain_height: -# points_data[point_id].mountain = true -- 2.36.2 From ff55c96dfc37a3cab833ea4f6560392160974fb0 Mon Sep 17 00:00:00 2001 From: Valentin Stark Date: Wed, 17 Aug 2022 00:24:29 +0200 Subject: [PATCH 05/12] Game : set water + some debug --- ui/map/map.gd | 24 ++++++++++++++++---- utils/terrain/Terrain.gd | 4 ++-- world/game.gd | 49 ++++++++++++++++++++++++++++++++++------ world/game.tscn | 3 +++ 4 files changed, 66 insertions(+), 14 deletions(-) diff --git a/ui/map/map.gd b/ui/map/map.gd index 0712a66..7153735 100644 --- a/ui/map/map.gd +++ b/ui/map/map.gd @@ -47,13 +47,27 @@ func draw_triangles(): colors.add_point(0.999, Color("#9e0142")) # red colors.add_point(0.5, Color("#dc865d")) # orange colors.add_point(0.25, Color("#fbf8b0")) # yellow - colors.add_point(0, Color("#89cfa5")) # green + colors.add_point(0, Color.green) # green colors.add_point(-0.999, Color("#5e4fa2")) # blue - var color = Color(randf(), randf(), randf(), 1) - color = colors.interpolate(min(triangle.get_data("elevation"), 0.999)) + var color = colors.interpolate(min(triangle.get_data("elevation"), 0.999)) + if triangle.get_data("ocean"): + color = Color.red if triangle.polygon().size() > 2: draw_polygon(triangle.polygon(), PoolColorArray([color])) - + + + + + + + + + + + + + + func draw_triangles_edges(color=Color("#000000")): for line in terrain.get_edges_as_line(): draw_line(line[0], line[1], color) @@ -121,4 +135,4 @@ func _draw(): func _on_Game_world_loaded(game_terrain): terrain = game_terrain - create_map() + update() diff --git a/utils/terrain/Terrain.gd b/utils/terrain/Terrain.gd index 717c8fe..5726c3e 100644 --- a/utils/terrain/Terrain.gd +++ b/utils/terrain/Terrain.gd @@ -166,11 +166,11 @@ class Point: func points_around(): var list_points = [] var incoming = _terrain._points_to_halfedges.get(_idx) - var incoming_edge = Point.new(incoming, _terrain) + var incoming_edge = Edge.new(incoming, _terrain) var outgoing_edge while true: list_points.append(Point.new(_terrain._triangles[incoming_edge._idx], _terrain)); - outgoing_edge = incoming_edge.next_half() + outgoing_edge = incoming_edge.opposite() incoming_edge = Edge.new(_terrain._halfedges[outgoing_edge._idx], _terrain); if not (incoming_edge._idx != -1 and incoming_edge._idx != incoming): break diff --git a/world/game.gd b/world/game.gd index 118f253..c4bc5a0 100644 --- a/world/game.gd +++ b/world/game.gd @@ -23,13 +23,14 @@ func _ready(): noise.seed = rng.randi() noise.octaves = octaves terrain = Terrain.new(width,height,spacing,true) - init_points_data() + init_data() print(terrain) emit_signal("world_loaded", terrain) -func init_points_data(): +func init_data(): for point in terrain.get_points(): - point.set_elevation(find_point_elevation(point.point2d())) + point.set_elevation(point_find_elevation(point.point2d())) + point.set_data("water", point_is_water(point)) # points_data.append({ # "elevation": 0, # "used": false, @@ -39,10 +40,19 @@ func init_points_data(): # "mountain": false, # "river": false # }) + fill_oceans() + for triangle in terrain.get_triangles(): - triangle.set_data("elevation", find_triangle_elevation(triangle)) + triangle.set_data("elevation", triangle_find_elevation(triangle)) + triangle.set_data("water", triangle_is_water(triangle)) + triangle.set_data("ocean", false) + for point in triangle.points(): + if point.get_data("ocean"): + triangle.set_data("ocean", true) + +# Point -func find_point_elevation(point): +func point_find_elevation(point): var border = border_width + rng.randf_range(-20.0, 20.0) var elevation = noise.get_noise_2d(point.x / wavelength, point.y / wavelength) @@ -64,10 +74,35 @@ func find_point_elevation(point): # elevation = elevation * terraces return elevation + +func point_is_water(point): + if (point.get_elevation() <= 0): + return true + return false + +# Triangle -func find_triangle_elevation(triangle): +func triangle_find_elevation(triangle): var elevation = 0 for point in triangle.points(): elevation += point.get_elevation() - elevation /= 3 + elevation /= 3.0 return elevation + +func triangle_is_water(triangle): + if triangle.get_data("elevation") <= 0: + return true + return false + +func fill_oceans(): + var stack = [] + for point in terrain.get_points(): + if point.point2d().x < 10 and point.get_data("water") and not point.get_data("ocean"): + stack.append(point.get_index()) + while stack.size(): + var current_point_id = stack.pop_back() + terrain.get_point(current_point_id).set_data("ocean", true) + for neighbour in terrain.get_point(current_point_id).points_around(): + if neighbour.get_data("water") and not neighbour.get_data("ocean"): + stack.append(neighbour.get_index()) + break diff --git a/world/game.tscn b/world/game.tscn index 04f54ff..3c60c82 100644 --- a/world/game.tscn +++ b/world/game.tscn @@ -8,6 +8,9 @@ script = ExtResource( 2 ) [node name="UI" parent="." instance=ExtResource( 1 )] +[node name="Map" parent="UI" index="0"] +scale = Vector2( 0.5, 0.5 ) + [connection signal="world_loaded" from="." to="UI/Map" method="_on_Game_world_loaded"] [editable path="UI"] -- 2.36.2 From 4474bdc0f78c3ed1d165d6d74b8f14dd0d7d387d Mon Sep 17 00:00:00 2001 From: Valentin Stark Date: Wed, 17 Aug 2022 00:49:49 +0200 Subject: [PATCH 06/12] Map : Cleaning --- ui/map/map.gd | 43 ++----------------------------------------- 1 file changed, 2 insertions(+), 41 deletions(-) diff --git a/ui/map/map.gd b/ui/map/map.gd index 7153735..60a2ccf 100644 --- a/ui/map/map.gd +++ b/ui/map/map.gd @@ -2,46 +2,7 @@ extends Node2D var terrain -func create_map(): - var river = {"size": 3, "color": "blue"} - print(terrain) - print("a") - terrain.get_edge(16).set_data("river", river) - - var triangle_idx = 5 - var triangle = terrain.get_triangle(triangle_idx) - - print("Triangle index : %d" % (triangle.get_index())) - - var edges = triangle.edges() - - print("Number of edges : %d" % (edges.size())) - print() - - for edge in edges: - print("Edge index : %d" % (edge.get_index())) - var start_point = edge.start() - var end_point = edge.end() - var start = start_point.point2d() - var end = end_point.point2d() - - print("Start point index : %d" % (start_point.get_index())) - print("End point index : %d" % (end_point.get_index())) - - print("Start point : %s" % (start)) - print("End point : %s" % (end)) - - if edge.has_key("river"): - print("Has river") - var a_river = edge.get_data("river") - print("River size : %d" % (a_river["size"])) - print("River color : %s" % (a_river["color"])) - - print() - print(terrain.get_point(5).point3d()) - - -func draw_triangles(): +func heightmap(): for triangle in terrain.get_triangles(): var colors = Gradient.new() colors.add_point(0.999, Color("#9e0142")) # red @@ -127,7 +88,7 @@ func draw_voronoi_cells_convex_hull(): func _draw(): print("before drawing") - draw_triangles() + heightmap() # draw_voronoi_cells() # draw_triangles_edges() # draw_voronoi_cells_convex_hull() -- 2.36.2 From 29d33d4be24e64c4089110b274f2a6757bba15af Mon Sep 17 00:00:00 2001 From: Valentin Stark Date: Wed, 17 Aug 2022 13:09:10 +0200 Subject: [PATCH 07/12] Game : Fix fill water --- utils/terrain/Terrain.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/terrain/Terrain.gd b/utils/terrain/Terrain.gd index 5726c3e..e80f328 100644 --- a/utils/terrain/Terrain.gd +++ b/utils/terrain/Terrain.gd @@ -170,7 +170,7 @@ class Point: var outgoing_edge while true: list_points.append(Point.new(_terrain._triangles[incoming_edge._idx], _terrain)); - outgoing_edge = incoming_edge.opposite() + outgoing_edge = incoming_edge.next_half() incoming_edge = Edge.new(_terrain._halfedges[outgoing_edge._idx], _terrain); if not (incoming_edge._idx != -1 and incoming_edge._idx != incoming): break -- 2.36.2 From e5b2b9e34735c396137b21872b2cbc71fffcbdb2 Mon Sep 17 00:00:00 2001 From: Valentin Stark Date: Wed, 17 Aug 2022 13:13:49 +0200 Subject: [PATCH 08/12] Ocean color --- ui/map/map.gd | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ui/map/map.gd b/ui/map/map.gd index 60a2ccf..4382d6d 100644 --- a/ui/map/map.gd +++ b/ui/map/map.gd @@ -12,7 +12,8 @@ func heightmap(): colors.add_point(-0.999, Color("#5e4fa2")) # blue var color = colors.interpolate(min(triangle.get_data("elevation"), 0.999)) if triangle.get_data("ocean"): - color = Color.red + var factor = pow((triangle.get_data("elevation")+1), 10) / 5.0 + color = Color("#5e4fa2") + Color(factor, factor, factor, 0.0) if triangle.polygon().size() > 2: draw_polygon(triangle.polygon(), PoolColorArray([color])) -- 2.36.2 From ba7d483060670b91dd0f42bb2c137192225b1580 Mon Sep 17 00:00:00 2001 From: Valentin Stark Date: Wed, 17 Aug 2022 15:24:54 +0200 Subject: [PATCH 09/12] Add coastline --- world/game.gd | 50 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/world/game.gd b/world/game.gd index c4bc5a0..fe4cf6a 100644 --- a/world/game.gd +++ b/world/game.gd @@ -31,6 +31,7 @@ func init_data(): for point in terrain.get_points(): point.set_elevation(point_find_elevation(point.point2d())) point.set_data("water", point_is_water(point)) + point.set_data("mountain", point_is_mountain(point)) # points_data.append({ # "elevation": 0, # "used": false, @@ -42,14 +43,31 @@ func init_data(): # }) fill_oceans() + for point in terrain.get_points(): + point.set_data("coast", point_is_coast(point)) for triangle in terrain.get_triangles(): triangle.set_data("elevation", triangle_find_elevation(triangle)) triangle.set_data("water", triangle_is_water(triangle)) triangle.set_data("ocean", false) + # TODO #1 : Get triangles around point for point in triangle.points(): if point.get_data("ocean"): triangle.set_data("ocean", true) - + for edge in terrain.get_edges(): + edge.set_data("coast", edge_is_coast(edge)) +func fill_oceans(): + var stack = [] + for point in terrain.get_points(): + if point.point2d().x < 10 and point.get_data("water") and not point.get_data("ocean"): + stack.append(point.get_index()) + while stack.size(): + var current_point_id = stack.pop_back() + terrain.get_point(current_point_id).set_data("ocean", true) + for neighbour in terrain.get_point(current_point_id).points_around(): + if neighbour.get_data("water") and not neighbour.get_data("ocean"): + stack.append(neighbour.get_index()) + break + # Point func point_find_elevation(point): @@ -80,6 +98,18 @@ func point_is_water(point): return true return false +func point_is_mountain(point): + if (point.get_elevation() >= mountain_height): + return true + return false + +func point_is_coast(point): + if not point.get_data("water"): + for neighbour in point.points_around(): + if neighbour.get_data("ocean"): + return true + return false + # Triangle func triangle_find_elevation(triangle): @@ -94,15 +124,9 @@ func triangle_is_water(triangle): return true return false -func fill_oceans(): - var stack = [] - for point in terrain.get_points(): - if point.point2d().x < 10 and point.get_data("water") and not point.get_data("ocean"): - stack.append(point.get_index()) - while stack.size(): - var current_point_id = stack.pop_back() - terrain.get_point(current_point_id).set_data("ocean", true) - for neighbour in terrain.get_point(current_point_id).points_around(): - if neighbour.get_data("water") and not neighbour.get_data("ocean"): - stack.append(neighbour.get_index()) - break +# Edge + +func edge_is_coast(edge): + if edge.start().get_data("coast") and edge.end().get_data("coast") and edge.triangle().get_data("ocean"): + return true + return false -- 2.36.2 From ff48aa19602fec63e360065d48bd83a4d529716b Mon Sep 17 00:00:00 2001 From: Valentin Stark Date: Wed, 17 Aug 2022 15:25:04 +0200 Subject: [PATCH 10/12] Add coastline --- ui/map/map.gd | 9 +++++++-- utils/terrain/Terrain.gd | 8 +++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/ui/map/map.gd b/ui/map/map.gd index 4382d6d..ecc47f9 100644 --- a/ui/map/map.gd +++ b/ui/map/map.gd @@ -8,7 +8,7 @@ func heightmap(): colors.add_point(0.999, Color("#9e0142")) # red colors.add_point(0.5, Color("#dc865d")) # orange colors.add_point(0.25, Color("#fbf8b0")) # yellow - colors.add_point(0, Color.green) # green + colors.add_point(0, Color("#89cfa5")) # green colors.add_point(-0.999, Color("#5e4fa2")) # blue var color = colors.interpolate(min(triangle.get_data("elevation"), 0.999)) if triangle.get_data("ocean"): @@ -17,7 +17,12 @@ func heightmap(): if triangle.polygon().size() > 2: draw_polygon(triangle.polygon(), PoolColorArray([color])) - + var coastline = PoolVector2Array() + for edge in terrain.get_edges(): + if edge.get_data("coast"): + coastline.append(edge.line()[0]) + coastline.append(edge.line()[1]) + draw_multiline(coastline, Color.black, 5.0) diff --git a/utils/terrain/Terrain.gd b/utils/terrain/Terrain.gd index e80f328..77e46ee 100644 --- a/utils/terrain/Terrain.gd +++ b/utils/terrain/Terrain.gd @@ -243,7 +243,13 @@ class Edge: func opposite(): return Edge.new(_terrain._halfedges[_idx], _terrain) - + + func line(): + var line = [] + line.append(start().point2d()) + line.append(end().point2d()) + return line + const terrain_file = "user://terrain.save" var width: int -- 2.36.2 From 22cc3a54631b4d9b9700c62a2cde94ec8509ac61 Mon Sep 17 00:00:00 2001 From: Valentin Stark Date: Wed, 17 Aug 2022 18:44:47 +0200 Subject: [PATCH 11/12] add old rivers --- ui/map/map.gd | 4 +++- world/game.gd | 57 ++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/ui/map/map.gd b/ui/map/map.gd index ecc47f9..bddf3f7 100644 --- a/ui/map/map.gd +++ b/ui/map/map.gd @@ -22,7 +22,9 @@ func heightmap(): if edge.get_data("coast"): coastline.append(edge.line()[0]) coastline.append(edge.line()[1]) - draw_multiline(coastline, Color.black, 5.0) + if edge.get_data("river"): + draw_line(edge.line()[0], edge.line()[1], Color.blue, 5.0) + draw_multiline(coastline, Color.black) diff --git a/world/game.gd b/world/game.gd index fe4cf6a..5124aaa 100644 --- a/world/game.gd +++ b/world/game.gd @@ -10,8 +10,8 @@ export(int, 1, 30) var wavelength = 8 export(int) var border_width = 200 export(int) var terraces = 24 export(int) var terrace_height = 5 -export(int) var mountain_height = 6 -export(int) var river_proba = 200 +export(float) var mountain_height = 6.0 / 24.0 +export(int) var river_proba = 50 var rng = RandomNumberGenerator.new() var noise = OpenSimplexNoise.new() @@ -24,7 +24,6 @@ func _ready(): noise.octaves = octaves terrain = Terrain.new(width,height,spacing,true) init_data() - print(terrain) emit_signal("world_loaded", terrain) func init_data(): @@ -32,6 +31,8 @@ func init_data(): point.set_elevation(point_find_elevation(point.point2d())) point.set_data("water", point_is_water(point)) point.set_data("mountain", point_is_mountain(point)) + point.set_data("river", point_is_river(point)) + # points_data.append({ # "elevation": 0, # "used": false, @@ -45,6 +46,8 @@ func init_data(): for point in terrain.get_points(): point.set_data("coast", point_is_coast(point)) + if point.get_data("river"): + set_river_path(point) for triangle in terrain.get_triangles(): triangle.set_data("elevation", triangle_find_elevation(triangle)) triangle.set_data("water", triangle_is_water(triangle)) @@ -55,6 +58,8 @@ func init_data(): triangle.set_data("ocean", true) for edge in terrain.get_edges(): edge.set_data("coast", edge_is_coast(edge)) + edge.set_data("river", edge_is_river(edge)) + func fill_oceans(): var stack = [] for point in terrain.get_points(): @@ -68,6 +73,41 @@ func fill_oceans(): stack.append(neighbour.get_index()) break +func set_river_path(point): + var start_elevation = point.get_elevation() + var waypoints = [] + var stack = [] + var end + stack.append(point.get_index()) + var came_from = {} + + while stack.size(): + var current_point_id = stack.pop_front() + if terrain.get_point(current_point_id).get_elevation() < start_elevation: + waypoints.append(current_point_id) + start_elevation = terrain.get_point(current_point_id).get_elevation() + stack = [] + end = current_point_id + if terrain.get_point(current_point_id).get_data("ocean"): + break + for neighbour in terrain.get_point(current_point_id).points_around(): +# if points_data[neighbour].elevation <= start_elevation: + if not came_from.has(neighbour.get_index()): + stack.append(neighbour.get_index()) + came_from[neighbour.get_index()] = current_point_id + + var path = [] + for waypoint in waypoints: + var current = waypoint + while current != point.get_index(): + if not path.has(current): + path.append(current) + current = came_from[current] + + path.append(point.get_index()) + for index in path: + terrain.get_point(index).set_data("river", true) + # Point func point_find_elevation(point): @@ -110,6 +150,12 @@ func point_is_coast(point): return true return false +func point_is_river(point): + if point.get_data("mountain") and not point.get_data("river"): + var random = rng.randi_range(1, river_proba) + if random == 1: + return true + return false # Triangle func triangle_find_elevation(triangle): @@ -130,3 +176,8 @@ func edge_is_coast(edge): if edge.start().get_data("coast") and edge.end().get_data("coast") and edge.triangle().get_data("ocean"): return true return false + +func edge_is_river(edge): + if edge.start().get_data("river") and edge.end().get_data("river"): + return true + return false -- 2.36.2 From d9269616dd3baf39ecf6b9f88dde493ae0a12a25 Mon Sep 17 00:00:00 2001 From: Valentin Stark Date: Wed, 17 Aug 2022 18:51:14 +0200 Subject: [PATCH 12/12] cleaning uo --- world/game.gd | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/world/game.gd b/world/game.gd index 5124aaa..790a8d5 100644 --- a/world/game.gd +++ b/world/game.gd @@ -11,7 +11,7 @@ export(int) var border_width = 200 export(int) var terraces = 24 export(int) var terrace_height = 5 export(float) var mountain_height = 6.0 / 24.0 -export(int) var river_proba = 50 +export(int) var river_proba = 100 var rng = RandomNumberGenerator.new() var noise = OpenSimplexNoise.new() @@ -32,16 +32,7 @@ func init_data(): point.set_data("water", point_is_water(point)) point.set_data("mountain", point_is_mountain(point)) point.set_data("river", point_is_river(point)) - -# points_data.append({ -# "elevation": 0, -# "used": false, -# "water": false, -# "ocean": false, -# "coast": false, -# "mountain": false, -# "river": false -# }) + fill_oceans() for point in terrain.get_points(): @@ -74,6 +65,7 @@ func fill_oceans(): break func set_river_path(point): + #TODO #2 fix rivers var start_elevation = point.get_elevation() var waypoints = [] var stack = [] @@ -91,7 +83,6 @@ func set_river_path(point): if terrain.get_point(current_point_id).get_data("ocean"): break for neighbour in terrain.get_point(current_point_id).points_around(): -# if points_data[neighbour].elevation <= start_elevation: if not came_from.has(neighbour.get_index()): stack.append(neighbour.get_index()) came_from[neighbour.get_index()] = current_point_id @@ -156,6 +147,7 @@ func point_is_river(point): if random == 1: return true return false + # Triangle func triangle_find_elevation(triangle): -- 2.36.2