diff --git a/utils/camera/CameraController.gd b/utils/camera/CameraController.gd index fda1053..52597ef 100644 --- a/utils/camera/CameraController.gd +++ b/utils/camera/CameraController.gd @@ -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.0, 10.0) var height = 5.0 + var pitch : float var yaw : float var current_action = CAMERA_ACTIONS.MOVING @@ -78,7 +79,7 @@ func move(_velocity : Vector2): y_offset = result.position.y else: 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) diff --git a/utils/terrain/Terrain.gd b/utils/terrain/Terrain.gd index 1225386..4fe0e50 100644 --- a/utils/terrain/Terrain.gd +++ b/utils/terrain/Terrain.gd @@ -73,7 +73,7 @@ class Triangle: if opposite._idx >= 0: list_triangles.append(opposite.triangle()) return list_triangles - + func center2d(): var points = points() return (points[0].point2d() + points[1].point2d() + points[2].point2d()) / 3.0 @@ -247,6 +247,9 @@ class Edge: func triangle(): return Triangle.new(floor(_idx / 3), _terrain) + + func opposite_triangle(): + return opposite().triangle() func start(): return Point.new(_terrain._triangles[_idx], _terrain) diff --git a/world/World.gd b/world/World.gd deleted file mode 100644 index 73d9bb3..0000000 --- a/world/World.gd +++ /dev/null @@ -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() - diff --git a/world/World3d.gd b/world/World3d.gd new file mode 100644 index 0000000..5626a04 --- /dev/null +++ b/world/World3d.gd @@ -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() + diff --git a/world/game.gd b/world/game.gd index 133185c..e524a7c 100644 --- a/world/game.gd +++ b/world/game.gd @@ -8,7 +8,7 @@ export(int) var spacing = 20 export(int, 1, 9) var octaves = 5 export(int, 1, 30) var wavelength = 8 export(int) var border_width = 200 -export(int) var terraces = 12 +export(int) var terraces = 10 export(int) var terrace_height = 5 export(float) var mountain_height = 6.0 / 24.0 export(int) var river_proba = 200 @@ -43,21 +43,21 @@ func _ready(): Global.print_debug("Pas de palais ..., pas de palais.") func init_data(): - for point in terrain.get_points(): - point.set_elevation(point_find_elevation(point.point2d())) - point.set_data("water", point_is_water(point)) - point.set_data("mountain", point_is_mountain(point)) + # for point in terrain.get_points(): + # point.set_elevation(point_find_elevation(point.point2d())) + # point.set_data("water", point_is_water(point)) + # point.set_data("mountain", point_is_mountain(point)) # point.set_data("river", point_is_river(point)) - fill_oceans() + # fill_oceans() - for point in terrain.get_points(): - if point.get_data("water") and not point.get_data("ocean"): - point.set_elevation(0.1) - point.set_data("water", false) - point.set_data("coast", point_is_coast(point)) - if point.get_data("river"): - set_river_path(point) + # for point in terrain.get_points(): + # if point.get_data("water") and not point.get_data("ocean"): + # point.set_elevation(0.1) + # point.set_data("water", false) + # point.set_data("coast", point_is_coast(point)) + # if point.get_data("river"): + # set_river_path(point) for triangle in terrain.get_triangles(): triangle.set_elevation(point_find_elevation(triangle.center2d())) # triangle.set_data("elevation", triangle_find_elevation(triangle)) @@ -202,5 +202,5 @@ func add_trees(): var num = rng.randi_range(0, 5) if num == 1: 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) diff --git a/world/game.tscn b/world/game.tscn index 30a9446..e8a7107 100644 --- a/world/game.tscn +++ b/world/game.tscn @@ -3,7 +3,7 @@ [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/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] [sub_resource type="PlaneMesh" id=1] @@ -24,36 +24,36 @@ scale = Vector2( 0.25, 0.25 ) scale = Vector2( 4, 4 ) z_index = 3 -[node name="World" type="Spatial" parent="."] +[node name="World3d" type="Spatial" parent="."] script = ExtResource( 4 ) -[node name="Water" type="MeshInstance" parent="World"] -transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 1000, -0.1, 1000 ) +[node name="Water" type="MeshInstance" parent="World3d"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 1000, -0.5, 1000 ) mesh = SubResource( 1 ) material/0 = SubResource( 2 ) -[node name="WorldEnvironment" type="WorldEnvironment" parent="World"] +[node name="WorldEnvironment" type="WorldEnvironment" parent="World3d"] 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 ) movement_speed = 48.076 min_zoom = 10.0 zoom_sensibility = 1.436 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 ) light_energy = 0.1 shadow_enabled = true [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="map_clicked" from="UI/Map" to="World/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="world_loaded" from="." to="World3d" method="_on_Game_world_loaded"] +[connection signal="map_clicked" from="UI/Map" to="World3d/CamBase/Camera" method="_on_Map_map_clicked"] +[connection signal="camera_moved" from="World3d/CamBase/Camera" to="UI/Map/Cursor" method="_on_Camera_camera_moved"] [editable path="UI"] [editable path="UI/Map"] -[editable path="World/CamBase"] +[editable path="World3d/CamBase"]