Nouvelle création du mesh

pull/18/head
Valentin Stark 3 years ago
parent 1de23642e2
commit 15b6772fd7
  1. 3
      utils/camera/CameraController.gd
  2. 3
      utils/terrain/Terrain.gd
  3. 43
      world/World.gd
  4. 49
      world/World3d.gd
  5. 28
      world/game.gd
  6. 24
      world/game.tscn

@ -25,6 +25,7 @@ export(float, 1,3) var zoom_sensibility = 2.5
export(float, 1,3) var rotation_sensibility = 2.3 export(float, 1,3) var rotation_sensibility = 2.3
export(float, 1.0, 10.0) var height = 5.0 export(float, 1.0, 10.0) var height = 5.0
var pitch : float var pitch : float
var yaw : float var yaw : float
var current_action = CAMERA_ACTIONS.MOVING var current_action = CAMERA_ACTIONS.MOVING
@ -78,7 +79,7 @@ func move(_velocity : Vector2):
y_offset = result.position.y y_offset = result.position.y
else: else:
y_offset = 0 y_offset = 0
global_transform.origin.y = max(5 + y_offset * 1.3, 10) global_transform.origin.y = max(15 + y_offset * 1.3, 10)
emit_signal("camera_moved", global_transform.origin) emit_signal("camera_moved", global_transform.origin)

@ -248,6 +248,9 @@ class Edge:
func triangle(): func triangle():
return Triangle.new(floor(_idx / 3), _terrain) return Triangle.new(floor(_idx / 3), _terrain)
func opposite_triangle():
return opposite().triangle()
func start(): func start():
return Point.new(_terrain._triangles[_idx], _terrain) return Point.new(_terrain._triangles[_idx], _terrain)

@ -1,43 +0,0 @@
extends Spatial
var terrain
func _ready():
pass
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 terrain.get_triangles():
# for point in triangle.points():
var factor = Vector3(1, 24*5, 1)
# if point.get_data("river") and i == 0:
# factor.y -= 0
# if i == 1:
# factor.y -= 2.0
st.add_vertex(triangle.center3d() * factor)
st.generate_normals()
# st.generate_tangents()
st.index()
# Commit to a mesh.
var mesh = st.commit()
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
print(mi)
add_child(mi)
func _on_Game_world_loaded(game_terrain):
terrain = game_terrain
draw_world()

@ -0,0 +1,49 @@
extends Spatial
var terrain
func _ready():
pass
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 terrain.get_triangles():
var factor = Vector3(1, 12*10, 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 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
print(mi)
add_child(mi)
func _on_Game_world_loaded(game_terrain):
terrain = game_terrain
draw_world()

@ -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 = 12 export(int) var terraces = 10
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
@ -43,21 +43,21 @@ func _ready():
Global.print_debug("Pas de palais ..., pas de palais.") Global.print_debug("Pas de palais ..., pas de palais.")
func init_data(): func init_data():
for point in terrain.get_points(): # for point in terrain.get_points():
point.set_elevation(point_find_elevation(point.point2d())) # point.set_elevation(point_find_elevation(point.point2d()))
point.set_data("water", point_is_water(point)) # point.set_data("water", point_is_water(point))
point.set_data("mountain", point_is_mountain(point)) # point.set_data("mountain", point_is_mountain(point))
# point.set_data("river", point_is_river(point)) # point.set_data("river", point_is_river(point))
fill_oceans() # fill_oceans()
for point in terrain.get_points(): # for point in terrain.get_points():
if point.get_data("water") and not point.get_data("ocean"): # if point.get_data("water") and not point.get_data("ocean"):
point.set_elevation(0.1) # point.set_elevation(0.1)
point.set_data("water", false) # point.set_data("water", false)
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 terrain.get_triangles(): for triangle in terrain.get_triangles():
triangle.set_elevation(point_find_elevation(triangle.center2d())) triangle.set_elevation(point_find_elevation(triangle.center2d()))
# triangle.set_data("elevation", triangle_find_elevation(triangle)) # triangle.set_data("elevation", triangle_find_elevation(triangle))
@ -202,5 +202,5 @@ func add_trees():
var num = rng.randi_range(0, 5) var num = rng.randi_range(0, 5)
if num == 1: if num == 1:
var tree = treescene.instance() var tree = treescene.instance()
tree.translation = Vector3(point.point3d() * Vector3(1, 24*5, 1)) tree.translation = Vector3(point.point3d() * Vector3(1, 12*10, 1))
add_child(tree) add_child(tree)

@ -3,7 +3,7 @@
[ext_resource path="res://ui/ui.tscn" type="PackedScene" id=1] [ext_resource path="res://ui/ui.tscn" type="PackedScene" id=1]
[ext_resource path="res://world/game.gd" type="Script" id=2] [ext_resource path="res://world/game.gd" type="Script" id=2]
[ext_resource path="res://world/default_env.tres" type="Environment" id=3] [ext_resource path="res://world/default_env.tres" type="Environment" id=3]
[ext_resource path="res://world/World.gd" type="Script" id=4] [ext_resource path="res://world/World3d.gd" type="Script" id=4]
[ext_resource path="res://utils/camera/CamBase.tscn" type="PackedScene" id=5] [ext_resource path="res://utils/camera/CamBase.tscn" type="PackedScene" id=5]
[sub_resource type="PlaneMesh" id=1] [sub_resource type="PlaneMesh" id=1]
@ -24,36 +24,36 @@ scale = Vector2( 0.25, 0.25 )
scale = Vector2( 4, 4 ) scale = Vector2( 4, 4 )
z_index = 3 z_index = 3
[node name="World" type="Spatial" parent="."] [node name="World3d" type="Spatial" parent="."]
script = ExtResource( 4 ) script = ExtResource( 4 )
[node name="Water" type="MeshInstance" parent="World"] [node name="Water" type="MeshInstance" parent="World3d"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 1000, -0.1, 1000 ) transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 1000, -0.5, 1000 )
mesh = SubResource( 1 ) mesh = SubResource( 1 )
material/0 = SubResource( 2 ) material/0 = SubResource( 2 )
[node name="WorldEnvironment" type="WorldEnvironment" parent="World"] [node name="WorldEnvironment" type="WorldEnvironment" parent="World3d"]
environment = ExtResource( 3 ) environment = ExtResource( 3 )
[node name="CamBase" parent="World" instance=ExtResource( 5 )] [node name="CamBase" parent="World3d" instance=ExtResource( 5 )]
[node name="Camera" parent="World/CamBase" index="0"] [node name="Camera" parent="World3d/CamBase" index="0"]
transform = Transform( 1, 0, 0, 0, 0.910272, -0.41401, 0, 0.41401, 0.910272, 0, -1.90735e-06, 6.618 ) transform = Transform( 1, 0, 0, 0, 0.910272, -0.41401, 0, 0.41401, 0.910272, 0, -1.90735e-06, 6.618 )
movement_speed = 48.076 movement_speed = 48.076
min_zoom = 10.0 min_zoom = 10.0
zoom_sensibility = 1.436 zoom_sensibility = 1.436
rotation_sensibility = 3.0 rotation_sensibility = 3.0
[node name="DirectionalLight" type="DirectionalLight" parent="World"] [node name="DirectionalLight" type="DirectionalLight" parent="World3d"]
transform = Transform( 1, 0, 0, 0, 0.512597, 0.858629, 0, -0.858629, 0.512597, 0, 1.41623, 0 ) transform = Transform( 1, 0, 0, 0, 0.512597, 0.858629, 0, -0.858629, 0.512597, 0, 1.41623, 0 )
light_energy = 0.1 light_energy = 0.1
shadow_enabled = true shadow_enabled = true
[connection signal="world_loaded" from="." to="UI/Map" method="_on_Game_world_loaded"] [connection signal="world_loaded" from="." to="UI/Map" method="_on_Game_world_loaded"]
[connection signal="world_loaded" from="." to="World" method="_on_Game_world_loaded"] [connection signal="world_loaded" from="." to="World3d" method="_on_Game_world_loaded"]
[connection signal="map_clicked" from="UI/Map" to="World/CamBase/Camera" method="_on_Map_map_clicked"] [connection signal="map_clicked" from="UI/Map" to="World3d/CamBase/Camera" method="_on_Map_map_clicked"]
[connection signal="camera_moved" from="World/CamBase/Camera" to="UI/Map/Cursor" method="_on_Camera_camera_moved"] [connection signal="camera_moved" from="World3d/CamBase/Camera" to="UI/Map/Cursor" method="_on_Camera_camera_moved"]
[editable path="UI"] [editable path="UI"]
[editable path="UI/Map"] [editable path="UI/Map"]
[editable path="World/CamBase"] [editable path="World3d/CamBase"]

Loading…
Cancel
Save