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