Game : set water + some debug

pull/3/head
Valentin Stark 3 years ago
parent 02a857ed55
commit ff55c96dfc
  1. 24
      ui/map/map.gd
  2. 4
      utils/terrain/Terrain.gd
  3. 49
      world/game.gd
  4. 3
      world/game.tscn

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

@ -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

@ -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

@ -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"]

Loading…
Cancel
Save