remplacement des triangles par des voronoi

pull/35/head
Valentin Stark 3 years ago
parent b2c4073dd6
commit f3d3190415
  1. 4
      menu/MainMenu.tscn
  2. 4
      ui/map/map.gd
  3. 144
      utils/world_generation/WorldGeneration.gd
  4. 2
      world/game.tscn

@ -47,6 +47,10 @@ margin_right = 316.0
margin_bottom = 266.0 margin_bottom = 266.0
text = "Quitter" text = "Quitter"
[node name="Viewport" type="Viewport" parent="."]
size = Vector2( 2048, 2048 )
own_world = true
[connection signal="pressed" from="VBoxContainer/NewButton" to="." method="_on_NewButton_pressed"] [connection signal="pressed" from="VBoxContainer/NewButton" to="." method="_on_NewButton_pressed"]
[connection signal="pressed" from="VBoxContainer/LoadButton" to="." method="_on_LoadButton_pressed"] [connection signal="pressed" from="VBoxContainer/LoadButton" to="." method="_on_LoadButton_pressed"]
[connection signal="pressed" from="VBoxContainer/QuitButton" to="." method="_on_QuitButton_pressed"] [connection signal="pressed" from="VBoxContainer/QuitButton" to="." method="_on_QuitButton_pressed"]

@ -4,7 +4,7 @@ signal map_clicked
func heightmap(): func heightmap():
print (Global.terrain) print (Global.terrain)
for triangle in Global.terrain.get_triangles(): for triangle in Global.terrain.get_centers():
var colors = Gradient.new() var colors = Gradient.new()
colors.add_point(0.999, Color("#9e0142")) # red colors.add_point(0.999, Color("#9e0142")) # red
colors.add_point(0.5, Color("#dc865d")) # orange colors.add_point(0.5, Color("#dc865d")) # orange
@ -13,7 +13,7 @@ func heightmap():
colors.add_point(-0.999, Color("#5e4fa2")) # blue colors.add_point(-0.999, Color("#5e4fa2")) # blue
var color = colors.interpolate(min(triangle.get_elevation() + 0.001, 0.999)) var color = colors.interpolate(min(triangle.get_elevation() + 0.001, 0.999))
# color = Color.green # color = Color.green
if triangle.is_water(): if triangle.get_data("water"):
# var factor = pow((triangle.get_elevation()+1.001), 10) / 5.0 # var factor = pow((triangle.get_elevation()+1.001), 10) / 5.0
color = Color("#5e4fa2") color = Color("#5e4fa2")
if triangle.polygon().size() > 2: if triangle.polygon().size() > 2:

@ -8,7 +8,7 @@ export(int) var spacing = 20
export(int, 1, 9) var octaves = 5 export(int, 1, 9) var octaves = 5
export(int, 1, 30) var wavelength = 8 export(int, 1, 30) var wavelength = 8
export(int) var border_width = 200 export(int) var border_width = 200
export(int) var terraces = 10 export(int) var terraces = 30
export(int) var terrace_height = 5 export(int) var terrace_height = 5
export(float) var mountain_height = 6.0 / 24.0 export(float) var mountain_height = 6.0 / 24.0
export(int) var river_proba = 200 export(int) var river_proba = 200
@ -28,13 +28,13 @@ func _init():
Global.terrain.create(width,height,spacing,Global.terrain_name) Global.terrain.create(width,height,spacing,Global.terrain_name)
var max_step = ( var max_step = (
Global.terrain.get_triangles().size() # Global.terrain.get_triangles().size()
# + height Global.terrain.get_points().size()
) )
if Global.terrain.is_created(): if Global.terrain.is_created():
max_step += Global.terrain.get_points().size() max_step += Global.terrain.get_points().size()
max_step += Global.terrain.get_triangles().size() max_step += Global.terrain.get_centers().size()
Global.loading.set_step(Global.terrain.get_points().size()) Global.loading.set_step(Global.terrain.get_points().size())
Global.loading.set_max_step(max_step) Global.loading.set_max_step(max_step)
@ -44,8 +44,8 @@ func _init():
Global.terrain.save() Global.terrain.save()
if Global.terrain.is_created() or Global.terrain.is_loaded(): if Global.terrain.is_created() or Global.terrain.is_loaded():
Global.terrain.set_data("mesh", create_mesh())
# create_map() # create_map()
Global.terrain.set_data("mesh", create_mesh())
# add_trees() # add_trees()
# get_tree().change_scene("res://world/game.tscn") # get_tree().change_scene("res://world/game.tscn")
else: else:
@ -71,16 +71,31 @@ func init_data():
# point.set_data("coast", point_is_coast(point)) # point.set_data("coast", point_is_coast(point))
# if point.get_data("river"): # if point.get_data("river"):
# set_river_path(point) # set_river_path(point)
for triangle in Global.terrain.get_triangles(): # print("a")
triangle.set_elevation(find_elevation(triangle.center2d())) for center in Global.terrain.get_centers():
# triangle.set_data("elevation", triangle_find_elevation(triangle)) center.set_elevation(find_elevation(center.point2d()))
triangle.set_data("water", triangle_is_water(triangle)) if center.get_elevation() <= 0:
if not triangle.get_data("water"): center.set_data("water", true)
if triangle.get_elevation() < 0: # print(center.get_elevation())
print(triangle.get_elevation())
if triangle.is_water():
triangle.set_elevation(0)
Global.loading.increment_step() Global.loading.increment_step()
# print(Global.terrain.get_centers().size())
print("first center : %f" % Global.terrain.get_centers()[0])
# for center in Global.terrain.get_centers():
# print("z")
# center.set_elevation(find_elevation(center.point2d))
# Global.loading.increment_step()
# print(center.get_elevation())
# for triangle in Global.terrain.get_triangles():
# triangle.set_elevation(find_elevation(triangle.center2d()))
# # triangle.set_data("elevation", triangle_find_elevation(triangle))
# triangle.set_data("water", triangle_is_water(triangle))
# if not triangle.get_data("water"):
# if triangle.get_elevation() < 0:
# print(triangle.get_elevation())
# if triangle.is_water():
# triangle.set_elevation(0)
# Global.loading.increment_step()
# triangle.set_data("ocean", false) # triangle.set_data("ocean", false)
# for point in triangle.points(): # for point in triangle.points():
# if point.get_data("ocean"): # if point.get_data("ocean"):
@ -228,27 +243,53 @@ func create_mesh():
var st = SurfaceTool.new() var st = SurfaceTool.new()
st.begin(Mesh.PRIMITIVE_TRIANGLES) st.begin(Mesh.PRIMITIVE_TRIANGLES)
for triangle in Global.terrain.get_triangles(): # for triangle in Global.terrain.get_triangles():
if not triangle.is_water(): # if not triangle.is_water():
if triangle.get_elevation() < 0: # if triangle.get_elevation() < 0:
print(triangle.get_elevation()) # print(triangle.get_elevation())
var factor = Vector3(1, 120, 1) # var factor = Vector3(1, 120, 1)
for edge in triangle.edges(): # for edge in triangle.edges():
if triangle.get_elevation() > edge.opposite_triangle().get_elevation(): # if triangle.get_elevation() > edge.opposite_triangle().get_elevation():
st.add_vertex(Vector3(edge.start().point3d().x, triangle.get_elevation(), edge.start().point3d().z) * factor) # st.add_vertex(Vector3(edge.start().point3d().x, triangle.get_elevation(), edge.start().point3d().z) * factor)
st.add_vertex(Vector3(edge.end().point3d().x, triangle.get_elevation(), edge.end().point3d().z) * factor) # st.add_vertex(Vector3(edge.end().point3d().x, triangle.get_elevation(), edge.end().point3d().z) * factor)
st.add_vertex(Vector3(edge.start().point3d().x, edge.opposite_triangle().get_elevation(), edge.start().point3d().z) * factor) # st.add_vertex(Vector3(edge.start().point3d().x, edge.opposite_triangle().get_elevation(), edge.start().point3d().z) * factor)
st.add_vertex(Vector3(edge.end().point3d().x, triangle.get_elevation(), edge.end().point3d().z) * factor) # st.add_vertex(Vector3(edge.end().point3d().x, triangle.get_elevation(), edge.end().point3d().z) * factor)
st.add_vertex(Vector3(edge.end().point3d().x, edge.opposite_triangle().get_elevation(), edge.end().point3d().z) * factor) # st.add_vertex(Vector3(edge.end().point3d().x, edge.opposite_triangle().get_elevation(), edge.end().point3d().z) * factor)
st.add_vertex(Vector3(edge.start().point3d().x, edge.opposite_triangle().get_elevation(), edge.start().point3d().z) * factor) # st.add_vertex(Vector3(edge.start().point3d().x, edge.opposite_triangle().get_elevation(), edge.start().point3d().z) * factor)
for point in triangle.points(): # for point in triangle.points():
st.add_vertex(Vector3(point.point3d().x, triangle.get_elevation(), point.point3d().z) * factor) # st.add_vertex(Vector3(point.point3d().x, triangle.get_elevation(), point.point3d().z) * factor)
# Global.loading.increment_step()
var factor = Vector3(1, 120, 1)
for center in Global.terrain.get_centers():
if not center.get_data("water"):
for edge in center.borders():
if edge.end_center().get_elevation() < edge.start_center().get_elevation():
st.add_vertex(Vector3(edge.start_corner().point3d().x, edge.end_center().get_elevation(), edge.start_corner().point3d().z) * factor)
st.add_vertex(Vector3(edge.end_corner().point3d().x, edge.start_center().get_elevation(), edge.end_corner().point3d().z) * factor)
st.add_vertex(Vector3(edge.start_corner().point3d().x, edge.start_center().get_elevation(), edge.start_corner().point3d().z) * factor)
st.add_vertex(Vector3(edge.start_corner().point3d().x, edge.end_center().get_elevation(), edge.start_corner().point3d().z) * factor)
st.add_vertex(Vector3(edge.end_corner().point3d().x, edge.end_center().get_elevation(), edge.end_corner().point3d().z) * factor)
st.add_vertex(Vector3(edge.end_corner().point3d().x, edge.start_center().get_elevation(), 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_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() Global.loading.increment_step()
st.generate_normals() st.generate_normals()
st.generate_tangents()
st.index() st.index()
var mi = MeshInstance.new() var mi = MeshInstance.new()
@ -261,14 +302,31 @@ func create_mesh():
# Enregistrement de la map + intégration dans la génération du monde #32 # Enregistrement de la map + intégration dans la génération du monde #32
func create_map(): # func create_map():
var img = Image.new() # print("oui")
img.create(width, height, false, Image.FORMAT_RGBA8) # var viewport = Viewport.new()
img.lock() # viewport.size = Vector2(width, height)
# var canvas = Node2D.new()
for y in height: # viewport.add_child(canvas)
Global.loading.increment_step() # canvas.draw_line(Vector2(0.0, 0.0), Vector2(1000.0, 1000.0), [Color("#5e4fa2"))
for x in width: # for center in Global.terrain.get_centers():
img.set_pixel(x,y,Color(randf(), randf(), randf())) # var colors = Gradient.new()
# colors.add_point(0.999, Color("#9e0142")) # red
img.unlock() # colors.add_point(0.5, Color("#dc865d")) # orange
# colors.add_point(0.25, Color("#fbf8b0")) # yellow
# colors.add_point(0.0, Color("#89cfa5")) # green
# colors.add_point(-0.999, Color("#5e4fa2")) # blue
# var color = colors.interpolate(min(center.get_elevation() + 0.001, 0.999))
# # color = Color.green
# if center.get_data("water"):
# # var factor = pow((center.get_elevation()+1.001), 10) / 5.0
# color = Color("#5e4fa2")
# if center.polygon().size() > 2:
# canvas.draw_polygon(center.polygon(), PoolColorArray([color]))
# Global.loading.increment_step()
# var img = viewport.get_texture().get_data()
# img.flip_y()
# var err = img.save_png("user://terrain/heightmap.png")
# print(err)
# # print("non")

@ -38,7 +38,7 @@ environment = ExtResource( 3 )
[node name="Camera" parent="World3d/CamBase" index="0"] [node name="Camera" parent="World3d/CamBase" index="0"]
transform = Transform( 1, 0, 0, 0, 0.659983, -0.75128, 0, 0.75128, 0.659983, 0, -1.90735e-06, 6.618 ) transform = Transform( 1, 0, 0, 0, 0.659983, -0.75128, 0, 0.75128, 0.659983, 0, -1.90735e-06, 6.618 )
fov = 55.0 fov = 55.0
depth_multiplier = 99.0 depth_multiplier = 9999.0
zoom_sensibility = 1.436 zoom_sensibility = 1.436
[node name="DirectionalLight" type="DirectionalLight" parent="World3d"] [node name="DirectionalLight" type="DirectionalLight" parent="World3d"]

Loading…
Cancel
Save