You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
societer/ui/map/map.gd

138 lines
3.7 KiB

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():
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.green) # 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"):
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)
func draw_voronoi_edges(color=Color("#000000")):
for line in terrain.get_voronoi_edges_as_line():
draw_line(line[0], line[1], color)
func draw_voronoi_cells_old():
var seen = []
for edge_idx in terrain.edges():
var triangles = []
var vertices = []
var p = terrain._triangles[terrain.next_half_edge(edge_idx)]
if not seen.has(p):
seen.append(p)
var edges = terrain.edges_around_point(edge_idx)
for edge_around_idx in edges:
triangles.append(terrain.triangle_of_edge(edge_around_idx))
for triangle in triangles:
vertices.append(terrain.triangle_center(triangle))
if triangles.size() > 2:
var color = Color(randf(), randf(), randf(), 1)
var voronoi_cell = PoolVector2Array()
for vertice in vertices:
voronoi_cell.append(Vector2(vertice.x, vertice.z))
draw_polygon(voronoi_cell, PoolColorArray([color]))
func draw_voronoi_cells():
for polygon in terrain.get_voronoi_cells_as_polygon():
var color = Color(randf(), randf(), randf(), 1)
if polygon.size() > 2:
draw_polygon(polygon, PoolColorArray([color]))
func draw_voronoi_cells_convex_hull():
for point_idx in terrain.points():
var triangles = []
var vertices = []
var incoming = terrain._points_to_half_edges.get(point_idx)
if incoming == null:
triangles.append(0)
else:
var edges = terrain.edges_around_point(incoming)
for edge_idx in edges:
triangles.append(terrain.triangle_of_edge(edge_idx))
for triangle_idx in triangles:
vertices.append(terrain.triangle_center(triangle_idx))
if triangles.size() > 2:
var color = Color(randf(), randf(), randf(), 1)
var voronoi_cell = PoolVector2Array()
for vertice in vertices:
voronoi_cell.append(Vector2(vertice[0], vertice[1]))
draw_polygon(voronoi_cell, PoolColorArray([color]))
func _draw():
print("before drawing")
draw_triangles()
# draw_voronoi_cells()
# draw_triangles_edges()
# draw_voronoi_cells_convex_hull()
# draw_voronoi_edges(Color("#ff0000"))
func _on_Game_world_loaded(game_terrain):
terrain = game_terrain
update()