Ajout d'un temps de chargement

pull/34/head
Valentin Stark 3 years ago
parent b4180e66ca
commit 2be7a434f7
  1. 20
      menu/LoadingScreen.gd
  2. 2
      project.godot
  3. 2
      ui/map/map.gd
  4. 55
      utils/Global.gd
  5. 7
      utils/terrain/Terrain.gd
  6. 82
      utils/world_generation/WorldGeneration.gd
  7. BIN
      world.mesh
  8. 43
      world/World3d.gd

@ -2,24 +2,20 @@ extends Control
var thread var thread
var world = {} var world = {}
var old_step = 0
func _ready(): func _ready():
thread = Thread.new() thread = Thread.new()
thread.start(self, "_generate_world") thread.start(self, "_generate_world")
set_process(true) set_process(true)
# Global.loading.set_start_time()
# while true:
# if "step" in world:
# if world.step >= world.max_step:
# break
# print(world.step)
# $ProgressBar.value = world.step / world.max_step * 100
func _process(delta): func _process(_delta):
if "step" in world: $ProgressBar.value = Global.loading.get_percentage()
print(world.step) if (Global.loading.get_percentage() >= 100):
if world.step >= 2: Global.loading.set_end_time()
get_tree().change_scene("res://world/game.tscn") print(Global.loading.get_elapsed_time("s"))
get_tree().change_scene("res://world/game.tscn")
func _exit_tree(): func _exit_tree():
thread.wait_to_finish() thread.wait_to_finish()

@ -34,7 +34,7 @@ _global_script_classes=[ {
"language": "GDScript", "language": "GDScript",
"path": "res://utils/terrain/Terrain.gd" "path": "res://utils/terrain/Terrain.gd"
}, { }, {
"base": "Control", "base": "Reference",
"class": "WorldGeneration", "class": "WorldGeneration",
"language": "GDScript", "language": "GDScript",
"path": "res://utils/world_generation/WorldGeneration.gd" "path": "res://utils/world_generation/WorldGeneration.gd"

@ -87,7 +87,7 @@ func draw_voronoi_cells_convex_hull():
func _draw(): func _draw():
print("before drawing") print("before drawing")
heightmap() # heightmap()
# draw_voronoi_cells() # draw_voronoi_cells()
# draw_triangles_edges() # draw_triangles_edges()
# draw_voronoi_cells_convex_hull() # draw_voronoi_cells_convex_hull()

@ -2,10 +2,65 @@ extends Node
var debug = true var debug = true
var terrain_name = "" var terrain_name = ""
var terrain_mesh: Mesh
var terrain = Terrain.new() var terrain = Terrain.new()
var loading = loading_helper.new()
# Debuging messages # Debuging messages
func print_debug(message): func print_debug(message):
if debug: if debug:
print(message) print(message)
class loading_helper:
var _step = 0
var _max_step = 0
var _start_time = 0
var _end_time = 0
func _init():
pass
func reset():
_step = 0
_max_step = 0
_start_time = 0
_end_time = 0
func set_step(number: int):
_step = number
func get_step():
return _step
func increment_step():
_step += 1
func set_max_step(number: int):
_max_step = number
func get_max_step():
return _max_step
func set_start_time():
_start_time = OS.get_ticks_msec()
func get_start_time():
return _start_time
func set_end_time():
_end_time = OS.get_ticks_msec()
func get_end_time():
return _end_time
func get_elapsed_time(unit):
var elapsed_time = _end_time - _start_time
if unit == "s":
elapsed_time = float(elapsed_time) / 1000.0
return elapsed_time
func get_percentage():
if get_max_step() > 0:
return float(get_step()) / float(get_max_step()) * 100
return 0

@ -392,6 +392,13 @@ func _create_points():
_points[point_idx].z = points2d[point_idx].y _points[point_idx].z = points2d[point_idx].y
# Terrain methodes # Terrain methodes
func set_data(key,value):
_data[key] = value
func get_data(key):
if _data.has(key):
return _data[key]
func get_triangles(): func get_triangles():
var triangles = Triangles.new(self) var triangles = Triangles.new(self)
return triangles return triangles

@ -1,4 +1,4 @@
extends Control extends Reference
class_name WorldGeneration class_name WorldGeneration
@ -16,10 +16,8 @@ export(int) var river_proba = 200
var rng = RandomNumberGenerator.new() var rng = RandomNumberGenerator.new()
var noise = OpenSimplexNoise.new() var noise = OpenSimplexNoise.new()
var step = 0
var max_step = 5
func _init(): func _init():
Global.loading.reset()
rng.randomize() rng.randomize()
noise.seed = rng.randi() noise.seed = rng.randi()
noise.octaves = octaves noise.octaves = octaves
@ -29,15 +27,16 @@ func _init():
else: else:
Global.terrain.create(width,height,spacing,Global.terrain_name) Global.terrain.create(width,height,spacing,Global.terrain_name)
step += 1 Global.loading.set_max_step(Global.terrain.get_triangles().size() + height)
if Global.terrain.is_created(): if Global.terrain.is_created():
init_data() init_data()
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():
add_trees() Global.terrain.set_data("mesh", create_mesh())
step += 1 create_map()
# add_trees()
# get_tree().change_scene("res://world/game.tscn") # get_tree().change_scene("res://world/game.tscn")
else: else:
Global.print_debug("Pas de Global.terrain, pas de construction ...") Global.print_debug("Pas de Global.terrain, pas de construction ...")
@ -201,13 +200,64 @@ func edge_is_river(edge):
return true return true
return false return false
func add_trees(): # func add_trees():
rng.randomize() # rng.randomize()
var treescene = load("res://entities/environment/birchtree/birchtree.tscn") # var treescene = load("res://entities/environment/birchtree/birchtree.tscn")
# for triangle in Global.terrain.get_triangles():
# if not triangle.get_data("water"):
# var num = rng.randi_range(0, 5)
# if num == 1:
# var tree = treescene.instance()
# tree.translation = Vector3(triangle.center3d() * Vector3(1, 12*10, 1))
# add_child(tree)
func create_mesh():
var st = SurfaceTool.new()
st.begin(Mesh.PRIMITIVE_TRIANGLES)
for triangle in Global.terrain.get_triangles(): for triangle in Global.terrain.get_triangles():
if not triangle.get_data("water"): if not triangle.is_water():
var num = rng.randi_range(0, 5) if triangle.get_elevation() < 0:
if num == 1: print(triangle.get_elevation())
var tree = treescene.instance() var factor = Vector3(1, 120, 1)
tree.translation = Vector3(triangle.center3d() * Vector3(1, 12*10, 1)) for edge in triangle.edges():
add_child(tree) 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.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.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.start().point3d().x, edge.opposite_triangle().get_elevation(), edge.start().point3d().z) * factor)
for point in triangle.points():
st.add_vertex(Vector3(point.point3d().x, triangle.get_elevation(), point.point3d().z) * factor)
Global.loading.increment_step()
st.generate_normals()
st.generate_tangents()
st.index()
var mi = MeshInstance.new()
mi.mesh = st.commit()
var material = load("res://world/world.material")
mi.set_surface_material(0, material)
mi.create_convex_collision()
mi.cast_shadow = GeometryInstance.SHADOW_CASTING_SETTING_ON
return mi
func create_map():
var img = Image.new()
img.create(width, height, false, Image.FORMAT_RGBA8)
img.lock()
for y in height:
# print(y)
Global.loading.increment_step()
for x in width:
img.set_pixel(x,y,Color(randf(), randf(), randf()))
img.unlock()
pass

Binary file not shown.

@ -1,46 +1,5 @@
extends Spatial extends Spatial
func _ready(): func _ready():
draw_world() var mi = Global.terrain.get_data("mesh")
func draw_world():
# for i in range(0, 1, 1):
# print(i)
var st = SurfaceTool.new()
st.begin(Mesh.PRIMITIVE_TRIANGLES)
# st.add_smooth_group(true)
for triangle in Global.terrain.get_triangles():
if not triangle.is_water():
if triangle.get_elevation() < 0:
print(triangle.get_elevation())
var factor = Vector3(1, 120, 1)
for edge in triangle.edges():
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.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.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.start().point3d().x, edge.opposite_triangle().get_elevation(), edge.start().point3d().z) * factor)
for point in triangle.points():
st.add_vertex(Vector3(point.point3d().x, triangle.get_elevation(), point.point3d().z) * factor)
st.generate_normals()
# st.generate_tangents()
st.index()
# Commit to a mesh.
var mesh = st.commit()
var file_name = "user://terrain/%s/world.mesh" % (Global.terrain_name)
ResourceSaver.save(file_name, mesh)
var mi = MeshInstance.new()
mi.mesh = mesh
var material = load("res://world/world.material")
mi.set_surface_material(0, material)
mi.create_trimesh_collision()
mi.cast_shadow = GeometryInstance.SHADOW_CASTING_SETTING_ON
add_child(mi) add_child(mi)

Loading…
Cancel
Save