Rework Ocean generator
This commit is contained in:
parent
05512c0da2
commit
3f558a4fbb
9 changed files with 140 additions and 70 deletions
|
@ -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
|
1
Boats/boat.gd.uid
Normal file
1
Boats/boat.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://cjo6l2ykgvn4e
|
|
@ -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"
|
||||
|
|
80
Ocean/ocean.gd
Normal file
80
Ocean/ocean.gd
Normal file
|
@ -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)
|
|
@ -1 +0,0 @@
|
|||
uid://62f04keairkf
|
36
OpenWorld.tscn
Normal file
36
OpenWorld.tscn
Normal file
|
@ -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"
|
24
ocean.gd
24
ocean.gd
|
@ -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)
|
58
world.tscn
58
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")
|
||||
|
|
Loading…
Reference in a new issue