diff --git a/Ocean/oceanTile.gd b/Boats/boat.gd similarity index 58% rename from Ocean/oceanTile.gd rename to Boats/boat.gd index fb274a1..0e08eb9 100644 --- a/Ocean/oceanTile.gd +++ b/Boats/boat.gd @@ -1,7 +1,6 @@ -extends MeshInstance3D -class_name OceanTile +extends RigidBody3D +class_name Boat -var time:float # Called when the node enters the scene tree for the first time. func _ready() -> void: @@ -10,7 +9,4 @@ func _ready() -> void: # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: - time += delta - var mat : ShaderMaterial = mesh.surface_get_material(0) - mat.set_shader_parameter("wave_time",time) pass diff --git a/Boats/boat.gd.uid b/Boats/boat.gd.uid new file mode 100644 index 0000000..bf1c330 --- /dev/null +++ b/Boats/boat.gd.uid @@ -0,0 +1 @@ +uid://cjo6l2ykgvn4e diff --git a/Ocean/OceanTile_PlaneMesh.tres b/Ocean/OceanTile_PlaneMesh.tres index 3759887..a68af36 100644 --- a/Ocean/OceanTile_PlaneMesh.tres +++ b/Ocean/OceanTile_PlaneMesh.tres @@ -10,7 +10,7 @@ shader_parameter/color = Color(0.13, 0.31, 0.53, 0.73) shader_parameter/wave = Vector4(1, 0, 0.5, 10) shader_parameter/wave_speed = 1.0 shader_parameter/gravity = 9.8 -shader_parameter/wave_time = 12.115 +shader_parameter/wave_time = 212.196 [resource] resource_name = "OceanTile_Main" diff --git a/Ocean/ocean.gd b/Ocean/ocean.gd new file mode 100644 index 0000000..f4ddc2e --- /dev/null +++ b/Ocean/ocean.gd @@ -0,0 +1,80 @@ +@tool +extends Node3D +class_name Ocean + +@export_category("Tiles") +@export_tool_button("Generate Tiles","Ocean") var generate_tile_action = generate_tile +@export_tool_button("Remove Tiles","Ocean") var remove_tile_action = remove_tile +@onready var OceanTileMesh:PlaneMesh = preload("uid://wes0mbjy8mno") +enum OceanTileType {MAIN, NEAR, FAR, HORIZON} +var tiles:Array[MeshInstance3D] + +@export_category("Waves") +var wave_time:float = 0.0 +@onready var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity") + +var boats:Array[Boat] + + + +func _ready() -> void: + if not Engine.is_editor_hint(): + add_to_group("Ocean") + if OceanTileMesh != null: + OceanTileMesh.surface_get_material(0).set_shader_parameter("wave_time",0.0) + +func _process(delta:float) : + if OceanTileMesh != null: + wave_time += delta + OceanTileMesh.surface_get_material(0).set_shader_parameter("wave_time",wave_time) + +######################## +### EDITOR FUNCTIONS ### + +var tile_size = 10.0 +var _layer_number = 2 + +var tiles_pos_vector = [ + Vector3(0.0, 0.0, 1.0), # Haut + Vector3(1.0, 0.0, 0.0), # Droite + Vector3(1.0, 0.0, 1.0) # Diagonale (haut-droite) +] + +func remove_tile(): + # Supprimer toutes les tuiles existantes + for child in get_children(): + child.queue_free() + +func generate_tile(_full: bool = true): + # Si _full est vrai, on enlève toutes les tuiles existantes + if _full: + remove_tile() + + # Générer la tuile à la position centrale (0, 0, 0) + create_new_tile(Vector3(0.0, 0.0, 0.0)) + + # Générer les autres tuiles + for vector in tiles_pos_vector: + for n in range(1, _layer_number + 1): # n correspond à la couche + for direction_x in [-1, 1]: # Prend en compte les valeurs positives et négatives pour x + for direction_z in [-1, 1]: # Prend en compte les valeurs positives et négatives pour z + # Appliquer les directions après avoir multiplié par n et tile_size + var new_pos = Vector3( + vector.x * n * tile_size * direction_x, + vector.y * n * tile_size, # L'axe Y n'est pas affecté par la direction + vector.z * n * tile_size * direction_z + ) + print(new_pos) # Affiche toutes les positions générées + create_new_tile(new_pos) + +func create_new_tile(position: Vector3): + # Créer une nouvelle tuile + var NewTile = MeshInstance3D.new() + add_child(NewTile) + NewTile.set_owner(get_tree().edited_scene_root) + NewTile.set_name("OceanTile00") + NewTile.mesh = OceanTileMesh + NewTile.global_position = position + + # Ajouter la tuile à la liste + tiles.append(NewTile) diff --git a/ocean.gd.uid b/Ocean/ocean.gd.uid similarity index 100% rename from ocean.gd.uid rename to Ocean/ocean.gd.uid diff --git a/Ocean/oceanTile.gd.uid b/Ocean/oceanTile.gd.uid deleted file mode 100644 index f5c7a87..0000000 --- a/Ocean/oceanTile.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://62f04keairkf diff --git a/OpenWorld.tscn b/OpenWorld.tscn new file mode 100644 index 0000000..d853b4a --- /dev/null +++ b/OpenWorld.tscn @@ -0,0 +1,36 @@ +[gd_scene load_steps=5 format=3 uid="uid://bhwuawppmqk4"] + +[ext_resource type="Script" uid="uid://cdnrxp6nu1wor" path="res://Ocean/ocean.gd" id="1_xncsh"] + +[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_xncsh"] +sky_top_color = Color(0.191699, 0.357914, 1, 1) +sky_horizon_color = Color(0.874994, 0.991665, 1.25854, 1) +ground_bottom_color = Color(0.274101, 0.574573, 1, 1) +ground_horizon_color = Color(0.874994, 0.991665, 1.25854, 1) + +[sub_resource type="Sky" id="Sky_7sjql"] +sky_material = SubResource("ProceduralSkyMaterial_xncsh") + +[sub_resource type="Environment" id="Environment_q57bq"] +background_mode = 2 +sky = SubResource("Sky_7sjql") +tonemap_mode = 2 +ssao_enabled = true +sdfgi_enabled = true +glow_enabled = true +fog_enabled = true +fog_sky_affect = 0.699 + +[node name="OpenWorld" type="Node3D"] + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_q57bq") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(-0.149535, -0.420992, 0.894653, 0, 0.904827, 0.425779, -0.988756, 0.0636691, -0.135304, 0, 1.45796, 0) +light_color = Color(0.969986, 0.876638, 0.798898, 1) +shadow_enabled = true + +[node name="Ocean" type="Node3D" parent="."] +script = ExtResource("1_xncsh") +metadata/_custom_type_script = "uid://cdnrxp6nu1wor" diff --git a/ocean.gd b/ocean.gd deleted file mode 100644 index 5bfc681..0000000 --- a/ocean.gd +++ /dev/null @@ -1,24 +0,0 @@ -@tool -extends Node3D -class_name Ocean - -@onready var OceanTileMesh:PlaneMesh = preload("uid://wes0mbjy8mno") -@onready var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity") -var time:float -@export_tool_button("Generate Tiles","Ocean") var generate_tile_action = generate_tile - -func generate_tile(): - for i in range(8): - var NewTile = OceanTile.new() - add_child(NewTile) - -func _ready() -> void: - if not Engine.is_editor_hint(): - add_to_group("Ocean") - if OceanTileMesh != null: - OceanTileMesh.surface_get_material(0).set_shader_parameter("wave_time",0.0) - -func _process(delta): - if OceanTileMesh != null: - time += delta - OceanTileMesh.surface_get_material(0).set_shader_parameter("wave_time",time) diff --git a/world.tscn b/world.tscn index b130c89..32e9607 100644 --- a/world.tscn +++ b/world.tscn @@ -1,24 +1,32 @@ [gd_scene load_steps=11 format=3 uid="uid://bwdtb8qfox3nq"] -[ext_resource type="Script" uid="uid://cdnrxp6nu1wor" path="res://ocean.gd" id="1_aqk2v"] +[ext_resource type="Script" uid="uid://cdnrxp6nu1wor" path="res://Ocean/ocean.gd" id="1_aqk2v"] [ext_resource type="Script" uid="uid://cnfkxclrq0i0s" path="res://buyancy_probe.gd" id="2_fj7yv"] -[ext_resource type="PlaneMesh" uid="uid://wes0mbjy8mno" path="res://Ocean/OceanTile_PlaneMesh.tres" id="2_tlwt5"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_aqk2v"] sky_top_color = Color(0.191699, 0.357914, 1, 1) sky_horizon_color = Color(0.549485, 0.583289, 0.73481, 1) +ground_bottom_color = Color(0.196971, 0.32493, 0.588228, 1) ground_horizon_color = Color(0.549485, 0.583289, 0.73481, 1) +ground_energy_multiplier = 0.5 [sub_resource type="Sky" id="Sky_036b0"] sky_material = SubResource("ProceduralSkyMaterial_aqk2v") +radiance_size = 0 [sub_resource type="Environment" id="Environment_dwbse"] background_mode = 2 sky = SubResource("Sky_036b0") +ambient_light_source = 3 +ambient_light_color = Color(0.408507, 0.421831, 0.473046, 1) +reflected_light_source = 2 tonemap_mode = 2 ssao_enabled = true sdfgi_enabled = true glow_enabled = true +fog_light_color = Color(0.187177, 0.206743, 0.237501, 1) +volumetric_fog_enabled = true +volumetric_fog_density = 0.0038 [sub_resource type="BoxShape3D" id="BoxShape3D_f3sb7"] resource_name = "BoatShape" @@ -33,53 +41,22 @@ size = Vector3(0.5, 0.5, 0.5) [sub_resource type="BoxMesh" id="BoxMesh_aqk2v"] size = Vector3(0.5, 0.5, 0.5) +[sub_resource type="FogMaterial" id="FogMaterial_fj7yv"] +density = 0.03 +albedo = Color(0.636369, 0.709149, 0.427976, 1) + [node name="World" type="Node3D"] [node name="WorldEnvironment" type="WorldEnvironment" parent="."] environment = SubResource("Environment_dwbse") [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] -transform = Transform3D(-0.866023, -0.433016, 0.250001, 0, 0.499998, 0.866027, -0.500003, 0.749999, -0.43301, 0, 0, 0) +transform = Transform3D(-0.866024, -0.433016, 0.250001, 0, 0.499998, 0.866026, -0.500003, 0.749999, -0.43301, 0, 1.5328, 0) shadow_enabled = true [node name="Ocean" type="Node3D" parent="."] script = ExtResource("1_aqk2v") -[node name="OceanTile00" type="MeshInstance3D" parent="Ocean"] -mesh = ExtResource("2_tlwt5") - -[node name="OceanTile01" type="MeshInstance3D" parent="Ocean"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, 0) -mesh = ExtResource("2_tlwt5") - -[node name="OceanTile02" type="MeshInstance3D" parent="Ocean"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, 0) -mesh = ExtResource("2_tlwt5") - -[node name="OceanTile03" type="MeshInstance3D" parent="Ocean"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 10) -mesh = ExtResource("2_tlwt5") - -[node name="OceanTile04" type="MeshInstance3D" parent="Ocean"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -10) -mesh = ExtResource("2_tlwt5") - -[node name="OceanTile05" type="MeshInstance3D" parent="Ocean"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, -10) -mesh = ExtResource("2_tlwt5") - -[node name="OceanTile06" type="MeshInstance3D" parent="Ocean"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, -10) -mesh = ExtResource("2_tlwt5") - -[node name="OceanTile07" type="MeshInstance3D" parent="Ocean"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, 10) -mesh = ExtResource("2_tlwt5") - -[node name="OceanTile08" type="MeshInstance3D" parent="Ocean"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, 10) -mesh = ExtResource("2_tlwt5") - [node name="Boat" type="RigidBody3D" parent="."] mass = 5.0 @@ -645,3 +622,8 @@ skeleton = NodePath("../../Boat") transform = Transform3D(0.992158, 0, -0.124987, 0, 1, 0, 0.124987, 0, 0.992158, -1.45113, -3.57628e-07, 4.84515) script = ExtResource("2_fj7yv") show_probe = true + +[node name="FogVolume" type="FogVolume" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.04025, 0) +shape = 4 +material = SubResource("FogMaterial_fj7yv")