Working Ocean tile generation
This commit is contained in:
parent
3f558a4fbb
commit
19956d3f2a
8 changed files with 191 additions and 50 deletions
15
.fork/custom-commands.json
Normal file
15
.fork/custom-commands.json
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"version" : 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"action" : {
|
||||||
|
"script" : "start project.godot",
|
||||||
|
"showOutput" : false,
|
||||||
|
"type" : "sh",
|
||||||
|
"waitForExit" : false
|
||||||
|
},
|
||||||
|
"name" : "Open Project",
|
||||||
|
"target" : "repository"
|
||||||
|
}
|
||||||
|
]
|
13
Ocean/OceanShaderl.tres
Normal file
13
Ocean/OceanShaderl.tres
Normal file
|
@ -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
|
|
@ -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
|
|
10
Ocean/OceanTile_PlaneMesh_Far.tres
Normal file
10
Ocean/OceanTile_PlaneMesh_Far.tres
Normal file
|
@ -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
|
10
Ocean/OceanTile_PlaneMesh_Main.tres
Normal file
10
Ocean/OceanTile_PlaneMesh_Main.tres
Normal file
|
@ -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
|
10
Ocean/OceanTile_PlaneMesh_Near.tres
Normal file
10
Ocean/OceanTile_PlaneMesh_Near.tres
Normal file
|
@ -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
|
|
@ -5,7 +5,10 @@ class_name Ocean
|
||||||
@export_category("Tiles")
|
@export_category("Tiles")
|
||||||
@export_tool_button("Generate Tiles","Ocean") var generate_tile_action = generate_tile
|
@export_tool_button("Generate Tiles","Ocean") var generate_tile_action = generate_tile
|
||||||
@export_tool_button("Remove Tiles","Ocean") var remove_tile_action = remove_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}
|
enum OceanTileType {MAIN, NEAR, FAR, HORIZON}
|
||||||
var tiles:Array[MeshInstance3D]
|
var tiles:Array[MeshInstance3D]
|
||||||
|
|
||||||
|
@ -20,13 +23,13 @@ var boats:Array[Boat]
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
if not Engine.is_editor_hint():
|
if not Engine.is_editor_hint():
|
||||||
add_to_group("Ocean")
|
add_to_group("Ocean")
|
||||||
if OceanTileMesh != null:
|
if OceanShader != null:
|
||||||
OceanTileMesh.surface_get_material(0).set_shader_parameter("wave_time",0.0)
|
OceanShader.set_shader_parameter("wave_time",0.0)
|
||||||
|
|
||||||
func _process(delta:float) :
|
func _process(delta:float) :
|
||||||
if OceanTileMesh != null:
|
if OceanShader != null:
|
||||||
wave_time += delta
|
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 ###
|
### EDITOR FUNCTIONS ###
|
||||||
|
@ -34,12 +37,6 @@ func _process(delta:float) :
|
||||||
var tile_size = 10.0
|
var tile_size = 10.0
|
||||||
var _layer_number = 2
|
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():
|
func remove_tile():
|
||||||
# Supprimer toutes les tuiles existantes
|
# Supprimer toutes les tuiles existantes
|
||||||
for child in get_children():
|
for child in get_children():
|
||||||
|
@ -50,31 +47,35 @@ func generate_tile(_full: bool = true):
|
||||||
if _full:
|
if _full:
|
||||||
remove_tile()
|
remove_tile()
|
||||||
|
|
||||||
# Générer la tuile à la position centrale (0, 0, 0)
|
# Generate a square grid of tiles
|
||||||
create_new_tile(Vector3(0.0, 0.0, 0.0))
|
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
|
func create_new_tile(position: Vector3, Type: OceanTileType):
|
||||||
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
|
# Créer une nouvelle tuile
|
||||||
var NewTile = MeshInstance3D.new()
|
var NewTile = MeshInstance3D.new()
|
||||||
add_child(NewTile)
|
add_child(NewTile)
|
||||||
NewTile.set_owner(get_tree().edited_scene_root)
|
NewTile.set_owner(get_tree().edited_scene_root)
|
||||||
NewTile.set_name("OceanTile00")
|
NewTile.set_name("OceanTile00")
|
||||||
NewTile.mesh = OceanTileMesh
|
|
||||||
NewTile.global_position = position
|
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
|
# Ajouter la tuile à la liste
|
||||||
tiles.append(NewTile)
|
tiles.append(NewTile)
|
||||||
|
|
104
OpenWorld.tscn
104
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="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"]
|
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_xncsh"]
|
||||||
sky_top_color = Color(0.191699, 0.357914, 1, 1)
|
sky_top_color = Color(0.191699, 0.357914, 1, 1)
|
||||||
|
@ -34,3 +37,102 @@ shadow_enabled = true
|
||||||
[node name="Ocean" type="Node3D" parent="."]
|
[node name="Ocean" type="Node3D" parent="."]
|
||||||
script = ExtResource("1_xncsh")
|
script = ExtResource("1_xncsh")
|
||||||
metadata/_custom_type_script = "uid://cdnrxp6nu1wor"
|
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")
|
||||||
|
|
Loading…
Reference in a new issue