From 19956d3f2a9083eaa5ba9df46cb066ec4fe99310 Mon Sep 17 00:00:00 2001 From: LUCASTUCIOUS Date: Mon, 24 Mar 2025 22:00:51 +0100 Subject: [PATCH] Working Ocean tile generation --- .fork/custom-commands.json | 15 ++++ Ocean/OceanShaderl.tres | 13 ++++ Ocean/OceanTile_PlaneMesh.tres | 20 ------ Ocean/OceanTile_PlaneMesh_Far.tres | 10 +++ Ocean/OceanTile_PlaneMesh_Main.tres | 10 +++ Ocean/OceanTile_PlaneMesh_Near.tres | 10 +++ Ocean/ocean.gd | 59 ++++++++-------- OpenWorld.tscn | 104 +++++++++++++++++++++++++++- 8 files changed, 191 insertions(+), 50 deletions(-) create mode 100644 .fork/custom-commands.json create mode 100644 Ocean/OceanShaderl.tres delete mode 100644 Ocean/OceanTile_PlaneMesh.tres create mode 100644 Ocean/OceanTile_PlaneMesh_Far.tres create mode 100644 Ocean/OceanTile_PlaneMesh_Main.tres create mode 100644 Ocean/OceanTile_PlaneMesh_Near.tres diff --git a/.fork/custom-commands.json b/.fork/custom-commands.json new file mode 100644 index 0000000..32e041f --- /dev/null +++ b/.fork/custom-commands.json @@ -0,0 +1,15 @@ +[ + { + "version" : 2 + }, + { + "action" : { + "script" : "start project.godot", + "showOutput" : false, + "type" : "sh", + "waitForExit" : false + }, + "name" : "Open Project", + "target" : "repository" + } +] \ No newline at end of file diff --git a/Ocean/OceanShaderl.tres b/Ocean/OceanShaderl.tres new file mode 100644 index 0000000..6feb5c8 --- /dev/null +++ b/Ocean/OceanShaderl.tres @@ -0,0 +1,13 @@ +[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://cf3lxmfb2d7c8"] + +[ext_resource type="Shader" uid="uid://ts0b536y5vcd" path="res://Ocean/OceanTile.gdshader" id="1_sqira"] + +[resource] +resource_name = "OceanTileShader" +render_priority = 0 +shader = ExtResource("1_sqira") +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 = 162.092 diff --git a/Ocean/OceanTile_PlaneMesh.tres b/Ocean/OceanTile_PlaneMesh.tres deleted file mode 100644 index a68af36..0000000 --- a/Ocean/OceanTile_PlaneMesh.tres +++ /dev/null @@ -1,20 +0,0 @@ -[gd_resource type="PlaneMesh" load_steps=3 format=3 uid="uid://wes0mbjy8mno"] - -[ext_resource type="Shader" uid="uid://ts0b536y5vcd" path="res://Ocean/OceanTile.gdshader" id="1_52gxv"] - -[sub_resource type="ShaderMaterial" id="ShaderMaterial_fj7yv"] -resource_name = "OceanTileShader" -render_priority = 0 -shader = ExtResource("1_52gxv") -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 = 212.196 - -[resource] -resource_name = "OceanTile_Main" -material = SubResource("ShaderMaterial_fj7yv") -size = Vector2(10.5, 10.5) -subdivide_width = 201 -subdivide_depth = 201 diff --git a/Ocean/OceanTile_PlaneMesh_Far.tres b/Ocean/OceanTile_PlaneMesh_Far.tres new file mode 100644 index 0000000..eeccc9b --- /dev/null +++ b/Ocean/OceanTile_PlaneMesh_Far.tres @@ -0,0 +1,10 @@ +[gd_resource type="PlaneMesh" load_steps=2 format=3 uid="uid://c82xwqk7ljku0"] + +[ext_resource type="Material" uid="uid://cf3lxmfb2d7c8" path="res://Ocean/OceanShaderl.tres" id="1_vta1j"] + +[resource] +resource_name = "OceanTile_Main" +material = ExtResource("1_vta1j") +size = Vector2(10.5, 10.5) +subdivide_width = 10 +subdivide_depth = 10 diff --git a/Ocean/OceanTile_PlaneMesh_Main.tres b/Ocean/OceanTile_PlaneMesh_Main.tres new file mode 100644 index 0000000..8048eff --- /dev/null +++ b/Ocean/OceanTile_PlaneMesh_Main.tres @@ -0,0 +1,10 @@ +[gd_resource type="PlaneMesh" load_steps=2 format=3 uid="uid://wes0mbjy8mno"] + +[ext_resource type="Material" uid="uid://cf3lxmfb2d7c8" path="res://Ocean/OceanShaderl.tres" id="1_0jqxu"] + +[resource] +resource_name = "OceanTile_Main" +material = ExtResource("1_0jqxu") +size = Vector2(10.5, 10.5) +subdivide_width = 201 +subdivide_depth = 201 diff --git a/Ocean/OceanTile_PlaneMesh_Near.tres b/Ocean/OceanTile_PlaneMesh_Near.tres new file mode 100644 index 0000000..546b01a --- /dev/null +++ b/Ocean/OceanTile_PlaneMesh_Near.tres @@ -0,0 +1,10 @@ +[gd_resource type="PlaneMesh" load_steps=2 format=3 uid="uid://coql6l6v4cybp"] + +[ext_resource type="Material" uid="uid://cf3lxmfb2d7c8" path="res://Ocean/OceanShaderl.tres" id="1_4jiw1"] + +[resource] +resource_name = "OceanTile_Main" +material = ExtResource("1_4jiw1") +size = Vector2(10.5, 10.5) +subdivide_width = 101 +subdivide_depth = 101 diff --git a/Ocean/ocean.gd b/Ocean/ocean.gd index f4ddc2e..683ff35 100644 --- a/Ocean/ocean.gd +++ b/Ocean/ocean.gd @@ -5,7 +5,10 @@ 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") +@onready var OceanTileMesh_Main:PlaneMesh = preload("uid://wes0mbjy8mno") +@onready var OceanTileMesh_Near:PlaneMesh = preload("uid://coql6l6v4cybp") +@onready var OceanTileMesh_Far:PlaneMesh = preload("uid://c82xwqk7ljku0") +@onready var OceanShader:ShaderMaterial = preload("uid://cf3lxmfb2d7c8") enum OceanTileType {MAIN, NEAR, FAR, HORIZON} var tiles:Array[MeshInstance3D] @@ -20,13 +23,13 @@ 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) + if OceanShader != null: + OceanShader.set_shader_parameter("wave_time",0.0) func _process(delta:float) : - if OceanTileMesh != null: + if OceanShader != null: wave_time += delta - OceanTileMesh.surface_get_material(0).set_shader_parameter("wave_time",wave_time) + OceanShader.set_shader_parameter("wave_time",wave_time) ######################## ### EDITOR FUNCTIONS ### @@ -34,12 +37,6 @@ func _process(delta:float) : 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(): @@ -50,31 +47,35 @@ func generate_tile(_full: bool = true): 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)) +# Generate a square grid of tiles + for x in range(-_layer_number, _layer_number + 1): + for z in range(-_layer_number, _layer_number + 1): + var position = Vector3( + x * tile_size, + 0.0, + z * tile_size + ) + if position.x == 0.0 && position.z ==0.0: + create_new_tile(position, OceanTileType.MAIN) + elif abs(position.x) <= tile_size && abs(position.z) <= tile_size: + create_new_tile(position, OceanTileType.NEAR) + else: + create_new_tile(position, OceanTileType.FAR) - # 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): +func create_new_tile(position: Vector3, Type: OceanTileType): # 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 + match Type: + OceanTileType.MAIN: + NewTile.mesh = OceanTileMesh_Main + OceanTileType.NEAR: + NewTile.mesh = OceanTileMesh_Near + OceanTileType.FAR: + NewTile.mesh = OceanTileMesh_Far # Ajouter la tuile à la liste tiles.append(NewTile) diff --git a/OpenWorld.tscn b/OpenWorld.tscn index d853b4a..82d4a83 100644 --- a/OpenWorld.tscn +++ b/OpenWorld.tscn @@ -1,6 +1,9 @@ -[gd_scene load_steps=5 format=3 uid="uid://bhwuawppmqk4"] +[gd_scene load_steps=8 format=3 uid="uid://bhwuawppmqk4"] [ext_resource type="Script" uid="uid://cdnrxp6nu1wor" path="res://Ocean/ocean.gd" id="1_xncsh"] +[ext_resource type="PlaneMesh" uid="uid://wes0mbjy8mno" path="res://Ocean/OceanTile_PlaneMesh_Main.tres" id="2_7sjql"] +[ext_resource type="PlaneMesh" uid="uid://coql6l6v4cybp" path="res://Ocean/OceanTile_PlaneMesh_Near.tres" id="2_ydaaq"] +[ext_resource type="PlaneMesh" uid="uid://c82xwqk7ljku0" path="res://Ocean/OceanTile_PlaneMesh_Far.tres" id="3_spien"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_xncsh"] sky_top_color = Color(0.191699, 0.357914, 1, 1) @@ -34,3 +37,102 @@ shadow_enabled = true [node name="Ocean" type="Node3D" parent="."] script = ExtResource("1_xncsh") metadata/_custom_type_script = "uid://cdnrxp6nu1wor" + +[node name="OceanTile00" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 0, -20) +mesh = ExtResource("3_spien") + +[node name="OceanTile01" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 0, -10) +mesh = ExtResource("3_spien") + +[node name="OceanTile02" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 0, 0) +mesh = ExtResource("3_spien") + +[node name="OceanTile03" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 0, 10) +mesh = ExtResource("3_spien") + +[node name="OceanTile04" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 0, 20) +mesh = ExtResource("3_spien") + +[node name="OceanTile05" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, -20) +mesh = ExtResource("3_spien") + +[node name="OceanTile06" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, -10) +mesh = ExtResource("2_ydaaq") + +[node name="OceanTile07" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, 0) +mesh = ExtResource("2_ydaaq") + +[node name="OceanTile08" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, 10) +mesh = ExtResource("2_ydaaq") + +[node name="OceanTile09" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, 20) +mesh = ExtResource("3_spien") + +[node name="OceanTile10" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -20) +mesh = ExtResource("3_spien") + +[node name="OceanTile11" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -10) +mesh = ExtResource("2_ydaaq") + +[node name="OceanTile12" type="MeshInstance3D" parent="Ocean"] +mesh = ExtResource("2_7sjql") + +[node name="OceanTile13" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 10) +mesh = ExtResource("2_ydaaq") + +[node name="OceanTile14" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 20) +mesh = ExtResource("3_spien") + +[node name="OceanTile15" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, -20) +mesh = ExtResource("3_spien") + +[node name="OceanTile16" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, -10) +mesh = ExtResource("2_ydaaq") + +[node name="OceanTile17" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, 0) +mesh = ExtResource("2_ydaaq") + +[node name="OceanTile18" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, 10) +mesh = ExtResource("2_ydaaq") + +[node name="OceanTile19" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, 20) +mesh = ExtResource("3_spien") + +[node name="OceanTile20" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20, 0, -20) +mesh = ExtResource("3_spien") + +[node name="OceanTile21" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20, 0, -10) +mesh = ExtResource("3_spien") + +[node name="OceanTile22" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20, 0, 0) +mesh = ExtResource("3_spien") + +[node name="OceanTile23" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20, 0, 10) +mesh = ExtResource("3_spien") + +[node name="OceanTile24" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20, 0, 20) +mesh = ExtResource("3_spien")