FLOATING BOAT §§§!!!

This commit is contained in:
Lucas 2025-03-22 22:55:11 +01:00
parent c365d9d680
commit 90dd897a09
9 changed files with 128 additions and 95 deletions

View file

@ -2,7 +2,7 @@
extends RigidBody3D extends RigidBody3D
class_name BoatBody3D class_name BoatBody3D
@export var float_force := 1.0 @export var float_force := 20.0
@export var water_drag := 0.05 @export var water_drag := 0.05
@export var water_angular_drag := 0.05 @export var water_angular_drag := 0.05
@ -14,37 +14,46 @@ var submerged := false
var is_docked: bool = false var is_docked: bool = false
@onready var ocean : Ocean = get_tree().get_nodes_in_group("ocean")[0] @export var ocean : Ocean #= get_tree().get_nodes_in_group("ocean")[0]
@export var max_thrust_force: float = 1024 @export var max_thrust_force: float = 2048
@export var max_steering: float = 128 @export var max_steering: float = 128
var steering: float = 0 # steering rudder angle in radians var steering: float = 0 # steering rudder angle in radians
var thrust_force: float = 0 # forward thrust force in Newtons var thrust_force: float = 0 # forward thrust force in Newtons
func _process(_delta):
if Input.get_action_strength("move_forward") > 0.0:
thrust()
if Input.get_action_strength("turn_right") > 0.0:
steer_right()
if Input.get_action_strength("turn_left") > 0.0:
steer_left()
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready(): func _ready():
add_to_group("boats") add_to_group("boats",true)
func _physics_process(delta): func _physics_process(delta):
submerged = false submerged = false
for p in probes: for p in probes:
if p.visible == true:
var depth = ocean.get_water_level(p.global_position) - p.global_position.y var depth = ocean.get_water_level(p.global_position) - p.global_position.y
if depth > 0: if depth > 0:
submerged = true submerged = true
apply_force(Vector3.UP * float_force * gravity * depth, p.global_position - global_position) apply_force(Vector3.UP * float_force * gravity * depth, p.global_position - global_position)
#print("Applying force: "+str(Vector3.UP * float_force * gravity * depth)+" at "+ str(p.position) +"("+str(p)+")")
apply_central_force(-self.global_transform.basis.z.normalized() * Vector3(1, 0, 1) * thrust_force) ## Code for user-input movement
apply_torque(Vector3.UP * steering) apply_central_force(self.global_transform.basis.x.normalized() * Vector3(1, 0, 1) * thrust_force * delta)
#apply_torque(Vector3.UP * steering * delta)
apply_torque(global_transform.basis.y.normalized() * steering * 0.05) # for sideways motion
##apply_torque(-global_transform.basis.z.normalized() * steering * 0.05) # for sideways motion
print("Submerged" + str(submerged))
reset_forces() reset_forces()
func _integrate_forces(state: PhysicsDirectBodyState3D): func _integrate_forces(state: PhysicsDirectBodyState3D):

View file

@ -1,35 +1,58 @@
[gd_scene load_steps=4 format=3 uid="uid://babgqvkugifk1"] [gd_scene load_steps=5 format=3 uid="uid://babgqvkugifk1"]
[ext_resource type="Script" uid="uid://du135dtrpwm7o" path="res://boat/WalkableBoat.gd" id="1_ml88t"] [ext_resource type="Script" uid="uid://du135dtrpwm7o" path="res://boat/WalkableBoat.gd" id="1_ml88t"]
[ext_resource type="PackedScene" uid="uid://bcdjvsj0la72h" path="res://boat/source/untitled.fbx" id="2_enlnh"] [ext_resource type="PackedScene" uid="uid://bcdjvsj0la72h" path="res://boat/source/untitled.fbx" id="2_enlnh"]
[sub_resource type="GDScript" id="GDScript_enlnh"]
resource_name = "NoRotation"
script/source = "extends Node3D
func _process(_delta):
global_rotation = Vector3()
"
[sub_resource type="BoxShape3D" id="BoxShape3D_enlnh"] [sub_resource type="BoxShape3D" id="BoxShape3D_enlnh"]
size = Vector3(1.3, 1, 1) size = Vector3(1.5252, 0.507935, 1)
[node name="Boat" type="RigidBody3D"] [node name="Boat" type="RigidBody3D"]
mass = 10.0 mass = 10.0
script = ExtResource("1_ml88t") script = ExtResource("1_ml88t")
[node name="SpringArm3D" type="SpringArm3D" parent="."] [node name="Node3D" type="Node3D" parent="."]
script = SubResource("GDScript_enlnh")
[node name="SpringArm3D" type="SpringArm3D" parent="Node3D"]
transform = Transform3D(1, 0, 0, 0, 0.893285, 0.449491, 0, -0.449491, 0.893285, 0, 0.350159, 0) transform = Transform3D(1, 0, 0, 0, 0.893285, 0.449491, 0, -0.449491, 0.893285, 0, 0.350159, 0)
spring_length = 2.255 spring_length = 2.255
[node name="Camera3D" type="Camera3D" parent="SpringArm3D"] [node name="Camera3D" type="Camera3D" parent="Node3D/SpringArm3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.107117, 0.323316, 2.70191) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.107117, 0.323316, 2.70191)
[node name="untitled" parent="." instance=ExtResource("2_enlnh")] [node name="untitled" parent="." instance=ExtResource("2_enlnh")]
transform = Transform3D(-0.1, 0, -1.50996e-08, 0, 0.1, 0, 1.50996e-08, 0, -0.1, 0, -0.169637, 0) transform = Transform3D(-0.1, 0, -1.50996e-08, 0, 0.1, 0, 1.50996e-08, 0, -0.1, 0, -0.169637, 0)
[node name="ProbeContainer" type="Node3D" parent="."] [node name="ProbeContainer" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.105972, 0)
[node name="Proue" type="Marker3D" parent="ProbeContainer"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.696, 0, 0)
[node name="Poupe" type="Marker3D" parent="ProbeContainer"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.604, 0, 0)
[node name="Cale2" type="Marker3D" parent="ProbeContainer"] [node name="Cale2" type="Marker3D" parent="ProbeContainer"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.25)
[node name="Cale7" type="Marker3D" parent="ProbeContainer"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.25)
[node name="Cale3" type="Marker3D" parent="ProbeContainer"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.507, 0, -0.2)
[node name="Cale5" type="Marker3D" parent="ProbeContainer"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.507, 0, 0.2)
[node name="Cale4" type="Marker3D" parent="ProbeContainer"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.568, 0, 0.25)
[node name="Cale6" type="Marker3D" parent="ProbeContainer"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.568, 0, -0.25)
[node name="CollisionShape3D" type="CollisionShape3D" parent="."] [node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.64117, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00595701, 0.251318, 0)
shape = SubResource("BoxShape3D_enlnh") shape = SubResource("BoxShape3D_enlnh")

View file

@ -1,9 +1,8 @@
[gd_resource type="VisualShader" load_steps=74 format=3 uid="uid://dju4bgl0vd6f5"] [gd_resource type="VisualShader" load_steps=72 format=3 uid="uid://dju4bgl0vd6f5"]
[ext_resource type="Texture2D" uid="uid://dn01vy45t0mnc" path="res://mat/wavenoise.tres" id="1_vh75p"] [ext_resource type="Texture2D" uid="uid://dn01vy45t0mnc" path="res://mat/wavenoise.tres" id="1_vh75p"]
[sub_resource type="VisualShaderNodeUVFunc" id="VisualShaderNodeUVFunc_obdjg"] [sub_resource type="VisualShaderNodeUVFunc" id="VisualShaderNodeUVFunc_obdjg"]
linked_parent_graph_frame = 49
[sub_resource type="FastNoiseLite" id="FastNoiseLite_vh75p"] [sub_resource type="FastNoiseLite" id="FastNoiseLite_vh75p"]
noise_type = 2 noise_type = 2
@ -17,25 +16,21 @@ seamless = true
noise = SubResource("FastNoiseLite_vh75p") noise = SubResource("FastNoiseLite_vh75p")
[sub_resource type="VisualShaderNodeTexture" id="VisualShaderNodeTexture_004we"] [sub_resource type="VisualShaderNodeTexture" id="VisualShaderNodeTexture_004we"]
linked_parent_graph_frame = 49
texture = SubResource("NoiseTexture2D_eafem") texture = SubResource("NoiseTexture2D_eafem")
texture_type = 1 texture_type = 1
[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_0o2nh"] [sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_0o2nh"]
default_input_values = [0, Vector2(0, 0), 1, Vector2(-1, -1)] default_input_values = [0, Vector2(0, 0), 1, Vector2(-1, -1)]
linked_parent_graph_frame = 49
op_type = 0 op_type = 0
operator = 2 operator = 2
[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_jwewd"] [sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_jwewd"]
default_input_values = [0, Quaternion(0, 0, 0, 0), 1, Quaternion(0, 0, 0, 0)] default_input_values = [0, Quaternion(0, 0, 0, 0), 1, Quaternion(0, 0, 0, 0)]
linked_parent_graph_frame = 49
op_type = 2 op_type = 2
operator = 2 operator = 2
[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_dt65u"] [sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_dt65u"]
default_input_values = [0, 0.0, 1, 1.5] default_input_values = [0, 0.0, 1, 1.5]
linked_parent_graph_frame = 49
operator = 5 operator = 5
[sub_resource type="VisualShaderNodeFloatParameter" id="VisualShaderNodeFloatParameter_274gg"] [sub_resource type="VisualShaderNodeFloatParameter" id="VisualShaderNodeFloatParameter_274gg"]
@ -56,45 +51,31 @@ default_value_enabled = true
default_value = Color(1.4728e-05, 0.392619, 0.763696, 1) default_value = Color(1.4728e-05, 0.392619, 0.763696, 1)
[sub_resource type="VisualShaderNodeVaryingGetter" id="VisualShaderNodeVaryingGetter_obdjg"] [sub_resource type="VisualShaderNodeVaryingGetter" id="VisualShaderNodeVaryingGetter_obdjg"]
linked_parent_graph_frame = 49
varying_name = "Noise" varying_name = "Noise"
varying_type = 3 varying_type = 3
[sub_resource type="VisualShaderNodeProximityFade" id="VisualShaderNodeProximityFade_obdjg"] [sub_resource type="VisualShaderNodeProximityFade" id="VisualShaderNodeProximityFade_obdjg"]
linked_parent_graph_frame = 31
[sub_resource type="VisualShaderNodeFloatFunc" id="VisualShaderNodeFloatFunc_vh75p"] [sub_resource type="VisualShaderNodeFloatFunc" id="VisualShaderNodeFloatFunc_vh75p"]
linked_parent_graph_frame = 31
function = 31 function = 31
[sub_resource type="VisualShaderNodeFloatFunc" id="VisualShaderNodeFloatFunc_eafem"] [sub_resource type="VisualShaderNodeFloatFunc" id="VisualShaderNodeFloatFunc_eafem"]
linked_parent_graph_frame = 31
function = 0 function = 0
[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_004we"] [sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_004we"]
linked_parent_graph_frame = 31
input_name = "time" input_name = "time"
[sub_resource type="VisualShaderNodeFloatFunc" id="VisualShaderNodeFloatFunc_0o2nh"] [sub_resource type="VisualShaderNodeFloatFunc" id="VisualShaderNodeFloatFunc_0o2nh"]
linked_parent_graph_frame = 31
function = 12 function = 12
[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_jwewd"] [sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_jwewd"]
linked_parent_graph_frame = 31
operator = 2 operator = 2
[sub_resource type="VisualShaderNodeFrame" id="VisualShaderNodeFrame_dt65u"]
size = Vector2(2524, 1182)
title = "Foam"
attached_nodes = PackedInt32Array(27, 30, 24, 29, 26, 38, 23, 34, 33, 32, 35, 36, 37, 50, 53, 54, 60, 61, 58, 59, 57, 51, 52)
[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_274gg"] [sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_274gg"]
default_input_values = [0, 0.0, 1, 40.0] default_input_values = [0, 0.0, 1, 40.0]
linked_parent_graph_frame = 31
operator = 5 operator = 5
[sub_resource type="VisualShaderNodeFloatParameter" id="VisualShaderNodeFloatParameter_qysla"] [sub_resource type="VisualShaderNodeFloatParameter" id="VisualShaderNodeFloatParameter_qysla"]
linked_parent_graph_frame = 31
parameter_name = "FoamMin" parameter_name = "FoamMin"
hint = 1 hint = 1
max = 100.0 max = 100.0
@ -102,15 +83,12 @@ default_value_enabled = true
default_value = 40.0 default_value = 40.0
[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_ycrm4"] [sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_ycrm4"]
linked_parent_graph_frame = 31
[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_bt44v"] [sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_bt44v"]
default_input_values = [0, 0.0, 1, 1.0] default_input_values = [0, 0.0, 1, 1.0]
linked_parent_graph_frame = 31
operator = 2 operator = 2
[sub_resource type="VisualShaderNodeFloatParameter" id="VisualShaderNodeFloatParameter_gokfr"] [sub_resource type="VisualShaderNodeFloatParameter" id="VisualShaderNodeFloatParameter_gokfr"]
linked_parent_graph_frame = 31
parameter_name = "RippleNumber" parameter_name = "RippleNumber"
hint = 1 hint = 1
min = 1.0 min = 1.0
@ -119,37 +97,31 @@ default_value_enabled = true
default_value = 6.0 default_value = 6.0
[sub_resource type="VisualShaderNodeFloatParameter" id="VisualShaderNodeFloatParameter_5fl1t"] [sub_resource type="VisualShaderNodeFloatParameter" id="VisualShaderNodeFloatParameter_5fl1t"]
linked_parent_graph_frame = 31
parameter_name = "RippleSpeed" parameter_name = "RippleSpeed"
hint = 1 hint = 1
default_value_enabled = true default_value_enabled = true
default_value = 0.5 default_value = 0.5
[sub_resource type="VisualShaderNodeMultiplyAdd" id="VisualShaderNodeMultiplyAdd_tk76b"] [sub_resource type="VisualShaderNodeMultiplyAdd" id="VisualShaderNodeMultiplyAdd_tk76b"]
linked_parent_graph_frame = 31
[sub_resource type="VisualShaderNodeMix" id="VisualShaderNodeMix_y7ycs"] [sub_resource type="VisualShaderNodeMix" id="VisualShaderNodeMix_y7ycs"]
default_input_values = [0, Vector3(0, 0, 0), 1, Vector3(1, 1, 1), 2, Vector3(0.5, 0.5, 0.5)] default_input_values = [0, Vector3(0, 0, 0), 1, Vector3(1, 1, 1), 2, Vector3(0.5, 0.5, 0.5)]
op_type = 3 op_type = 3
[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_6r64g"] [sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_6r64g"]
linked_parent_graph_frame = 49
input_name = "uv" input_name = "uv"
[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_5wtf6"] [sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_5wtf6"]
default_input_values = [0, Vector2(0, 0), 1, Vector2(0, 0)] default_input_values = [0, Vector2(0, 0), 1, Vector2(0, 0)]
linked_parent_graph_frame = 49
op_type = 0 op_type = 0
operator = 2 operator = 2
[sub_resource type="VisualShaderNodeVaryingGetter" id="VisualShaderNodeVaryingGetter_cgaqp"] [sub_resource type="VisualShaderNodeVaryingGetter" id="VisualShaderNodeVaryingGetter_cgaqp"]
linked_parent_graph_frame = 49
varying_name = "Cells" varying_name = "Cells"
varying_type = 3 varying_type = 3
[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_wsoe0"] [sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_wsoe0"]
default_input_values = [0, Quaternion(0, 0, 0, 0), 1, Quaternion(0, 0, 0, 0)] default_input_values = [0, Quaternion(0, 0, 0, 0), 1, Quaternion(0, 0, 0, 0)]
linked_parent_graph_frame = 49
op_type = 2 op_type = 2
operator = 2 operator = 2
@ -165,35 +137,24 @@ seamless = true
noise = SubResource("FastNoiseLite_c8snt") noise = SubResource("FastNoiseLite_c8snt")
[sub_resource type="VisualShaderNodeTexture" id="VisualShaderNodeTexture_hcimu"] [sub_resource type="VisualShaderNodeTexture" id="VisualShaderNodeTexture_hcimu"]
linked_parent_graph_frame = 49
texture = SubResource("NoiseTexture2D_7x758") texture = SubResource("NoiseTexture2D_7x758")
texture_type = 1 texture_type = 1
[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_qfu83"] [sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_qfu83"]
default_input_values = [0, Vector2(0, 0), 1, Vector2(-1, -1)] default_input_values = [0, Vector2(0, 0), 1, Vector2(-1, -1)]
linked_parent_graph_frame = 49
op_type = 0 op_type = 0
operator = 2 operator = 2
[sub_resource type="VisualShaderNodeUVFunc" id="VisualShaderNodeUVFunc_osjwj"] [sub_resource type="VisualShaderNodeUVFunc" id="VisualShaderNodeUVFunc_osjwj"]
linked_parent_graph_frame = 49
[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_ft6xr"] [sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_ft6xr"]
linked_parent_graph_frame = 49
input_name = "time" input_name = "time"
[sub_resource type="VisualShaderNodeFrame" id="VisualShaderNodeFrame_obdjg"]
size = Vector2(2124, 1182)
title = "Noise"
attached_nodes = PackedInt32Array(15, 17, 10, 42, 44, 45, 48, 47, 46, 8, 16, 43, 41, 22, 11, 7, 5, 62)
[sub_resource type="VisualShaderNodeTexture" id="VisualShaderNodeTexture_tk76b"] [sub_resource type="VisualShaderNodeTexture" id="VisualShaderNodeTexture_tk76b"]
linked_parent_graph_frame = 49
texture = ExtResource("1_vh75p") texture = ExtResource("1_vh75p")
texture_type = 1 texture_type = 1
[sub_resource type="VisualShaderNodeFloatParameter" id="VisualShaderNodeFloatParameter_obdjg"] [sub_resource type="VisualShaderNodeFloatParameter" id="VisualShaderNodeFloatParameter_obdjg"]
linked_parent_graph_frame = 31
parameter_name = "DistanceFade" parameter_name = "DistanceFade"
hint = 1 hint = 1
max = 5.0 max = 5.0
@ -201,17 +162,14 @@ default_value_enabled = true
default_value = 0.5 default_value = 0.5
[sub_resource type="VisualShaderNodeSwitch" id="VisualShaderNodeSwitch_vh75p"] [sub_resource type="VisualShaderNodeSwitch" id="VisualShaderNodeSwitch_vh75p"]
linked_parent_graph_frame = 31
[sub_resource type="VisualShaderNodeBooleanParameter" id="VisualShaderNodeBooleanParameter_eafem"] [sub_resource type="VisualShaderNodeBooleanParameter" id="VisualShaderNodeBooleanParameter_eafem"]
linked_parent_graph_frame = 31
parameter_name = "FoamNoise" parameter_name = "FoamNoise"
default_value_enabled = true default_value_enabled = true
default_value = true default_value = true
[sub_resource type="VisualShaderNodeMix" id="VisualShaderNodeMix_004we"] [sub_resource type="VisualShaderNodeMix" id="VisualShaderNodeMix_004we"]
default_input_values = [0, 0.0, 1, 0.0, 2, 0.5] default_input_values = [0, 0.0, 1, 0.0, 2, 0.5]
linked_parent_graph_frame = 31
[sub_resource type="FastNoiseLite" id="FastNoiseLite_obdjg"] [sub_resource type="FastNoiseLite" id="FastNoiseLite_obdjg"]
noise_type = 0 noise_type = 0
@ -224,7 +182,6 @@ resource_name = "RippleNoise"
noise = SubResource("FastNoiseLite_obdjg") noise = SubResource("FastNoiseLite_obdjg")
[sub_resource type="VisualShaderNodeTexture" id="VisualShaderNodeTexture_jwewd"] [sub_resource type="VisualShaderNodeTexture" id="VisualShaderNodeTexture_jwewd"]
linked_parent_graph_frame = 31
texture = SubResource("NoiseTexture2D_0o2nh") texture = SubResource("NoiseTexture2D_0o2nh")
texture_type = 1 texture_type = 1
@ -235,15 +192,12 @@ default_value_enabled = true
default_value = 0.969 default_value = 0.969
[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_vh75p"] [sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_vh75p"]
linked_parent_graph_frame = 31
input_name = "time" input_name = "time"
[sub_resource type="VisualShaderNodeUVFunc" id="VisualShaderNodeUVFunc_eafem"] [sub_resource type="VisualShaderNodeUVFunc" id="VisualShaderNodeUVFunc_eafem"]
linked_parent_graph_frame = 31
[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_004we"] [sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_004we"]
default_input_values = [0, 0.0, 1, 0.1] default_input_values = [0, 0.0, 1, 0.1]
linked_parent_graph_frame = 31
operator = 2 operator = 2
[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_y7ycs"] [sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_y7ycs"]
@ -253,16 +207,13 @@ op_type = 2
[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_0o2nh"] [sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_0o2nh"]
default_input_values = [0, 0.0, 1, 2.0] default_input_values = [0, 0.0, 1, 2.0]
linked_parent_graph_frame = 31
operator = 5 operator = 5
[sub_resource type="VisualShaderNodeVaryingGetter" id="VisualShaderNodeVaryingGetter_jwewd"] [sub_resource type="VisualShaderNodeVaryingGetter" id="VisualShaderNodeVaryingGetter_jwewd"]
linked_parent_graph_frame = 31
varying_name = "Noise" varying_name = "Noise"
varying_type = 3 varying_type = 3
[sub_resource type="VisualShaderNodeFloatParameter" id="VisualShaderNodeFloatParameter_eafem"] [sub_resource type="VisualShaderNodeFloatParameter" id="VisualShaderNodeFloatParameter_eafem"]
linked_parent_graph_frame = 49
parameter_name = "FoamScale" parameter_name = "FoamScale"
hint = 1 hint = 1
max = 5.0 max = 5.0
@ -270,10 +221,8 @@ default_value_enabled = true
default_value = 2.0 default_value = 2.0
[sub_resource type="VisualShaderNodeUVFunc" id="VisualShaderNodeUVFunc_6r64g"] [sub_resource type="VisualShaderNodeUVFunc" id="VisualShaderNodeUVFunc_6r64g"]
linked_parent_graph_frame = 49
[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_5wtf6"] [sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_5wtf6"]
linked_parent_graph_frame = 49
input_name = "time" input_name = "time"
[sub_resource type="VisualShaderNodeVec2Parameter" id="VisualShaderNodeVec2Parameter_vh75p"] [sub_resource type="VisualShaderNodeVec2Parameter" id="VisualShaderNodeVec2Parameter_vh75p"]
@ -745,8 +694,6 @@ nodes/fragment/29/node = SubResource("VisualShaderNodeFloatFunc_0o2nh")
nodes/fragment/29/position = Vector2(560, -40) nodes/fragment/29/position = Vector2(560, -40)
nodes/fragment/30/node = SubResource("VisualShaderNodeFloatOp_jwewd") nodes/fragment/30/node = SubResource("VisualShaderNodeFloatOp_jwewd")
nodes/fragment/30/position = Vector2(780, 20) nodes/fragment/30/position = Vector2(780, 20)
nodes/fragment/31/node = SubResource("VisualShaderNodeFrame_dt65u")
nodes/fragment/31/position = Vector2(-1000, -440)
nodes/fragment/32/node = SubResource("VisualShaderNodeFloatOp_274gg") nodes/fragment/32/node = SubResource("VisualShaderNodeFloatOp_274gg")
nodes/fragment/32/position = Vector2(420, 180) nodes/fragment/32/position = Vector2(420, 180)
nodes/fragment/33/node = SubResource("VisualShaderNodeFloatParameter_qysla") nodes/fragment/33/node = SubResource("VisualShaderNodeFloatParameter_qysla")
@ -779,8 +726,6 @@ nodes/fragment/47/node = SubResource("VisualShaderNodeUVFunc_osjwj")
nodes/fragment/47/position = Vector2(-720, 2160) nodes/fragment/47/position = Vector2(-720, 2160)
nodes/fragment/48/node = SubResource("VisualShaderNodeInput_ft6xr") nodes/fragment/48/node = SubResource("VisualShaderNodeInput_ft6xr")
nodes/fragment/48/position = Vector2(-1040, 2420) nodes/fragment/48/position = Vector2(-1040, 2420)
nodes/fragment/49/node = SubResource("VisualShaderNodeFrame_obdjg")
nodes/fragment/49/position = Vector2(-1640, 1319)
nodes/fragment/50/node = SubResource("VisualShaderNodeFloatParameter_obdjg") nodes/fragment/50/node = SubResource("VisualShaderNodeFloatParameter_obdjg")
nodes/fragment/50/position = Vector2(-960, 80) nodes/fragment/50/position = Vector2(-960, 80)
nodes/fragment/51/node = SubResource("VisualShaderNodeSwitch_vh75p") nodes/fragment/51/node = SubResource("VisualShaderNodeSwitch_vh75p")

View file

@ -53,9 +53,9 @@ shader_parameter/wave_time = 7.905
shader_parameter/wave_direction = Vector2(2, 0) shader_parameter/wave_direction = Vector2(2, 0)
shader_parameter/wave_2_direction = Vector2(0, 1) shader_parameter/wave_2_direction = Vector2(0, 1)
shader_parameter/time_scale = 0.025 shader_parameter/time_scale = 0.025
shader_parameter/wave_speed = 0.06 shader_parameter/wave_speed = 0.02
shader_parameter/noise_scale = 5.005 shader_parameter/noise_scale = 8.23
shader_parameter/height_scale = 0.16 shader_parameter/height_scale = 0.34
shader_parameter/beers_law = 2.0 shader_parameter/beers_law = 2.0
shader_parameter/depth_offset = -0.75 shader_parameter/depth_offset = -0.75
shader_parameter/edge_scale = 0.1 shader_parameter/edge_scale = 0.1

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=8 format=3 uid="uid://hs3a438it6j6"] [gd_scene load_steps=11 format=3 uid="uid://hs3a438it6j6"]
[ext_resource type="Material" uid="uid://djvstk5qjvdan" path="res://ocean/Ocean2.tres" id="1_kiaws"] [ext_resource type="Material" uid="uid://djvstk5qjvdan" path="res://ocean/Ocean2.tres" id="1_kiaws"]
[ext_resource type="Script" uid="uid://c12fpc7inp27s" path="res://ocean/ocean.gd" id="2_ap626"] [ext_resource type="Script" uid="uid://c12fpc7inp27s" path="res://ocean/ocean.gd" id="2_ap626"]
@ -23,21 +23,73 @@ size = Vector2(10, 10)
subdivide_width = 100 subdivide_width = 100
subdivide_depth = 100 subdivide_depth = 100
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ap626"]
transparency = 1
blend_mode = 3
shading_mode = 0
diffuse_mode = 3
disable_fog = true
albedo_color = Color(0, 0.754224, 0.124756, 1)
[sub_resource type="SphereMesh" id="SphereMesh_2qsx7"]
material = SubResource("StandardMaterial3D_ap626")
radius = 0.2
height = 0.4
[sub_resource type="GDScript" id="GDScript_ap626"]
script/source = "extends MeshInstance3D
@export var ocean : Ocean #= get_tree().get_nodes_in_group(\"ocean\")[0]
func _process(_delta):
var depthwater = ocean.get_water_level(Vector3.ZERO)
global_position = Vector3(0.0,depthwater,0.0)
"
[node name="Node3D" type="Node3D"] [node name="Node3D" type="Node3D"]
[node name="WorldEnvironment" type="WorldEnvironment" parent="."] [node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_2qsx7") environment = SubResource("Environment_2qsx7")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(-0.866025, -0.433013, 0.25, 0, 0.5, 0.866025, -0.5, 0.75, -0.433013, 0, 0, 0) transform = Transform3D(-0.866025, -0.433013, 0.25, 0, 0.5, 0.866025, -0.5, 0.75, -0.433013, 0, 3.48773, 0)
shadow_enabled = true shadow_enabled = true
[node name="Ocean" type="Node3D" parent="."] [node name="Ocean" type="Node3D" parent="."]
[node name="Water_Tile_01" type="MeshInstance3D" parent="Ocean"] [node name="Water_Tile_00" type="MeshInstance3D" parent="Ocean"]
mesh = SubResource("PlaneMesh_mf4pf") mesh = SubResource("PlaneMesh_mf4pf")
skeleton = NodePath("../..") skeleton = NodePath("../..")
script = ExtResource("2_ap626") script = ExtResource("2_ap626")
[node name="Boat" parent="." instance=ExtResource("3_ap626")] [node name="Water_Tile_02" type="MeshInstance3D" parent="Ocean"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.236798, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, 0)
mesh = SubResource("PlaneMesh_mf4pf")
skeleton = NodePath("../..")
script = ExtResource("2_ap626")
[node name="Water_Tile_01" type="MeshInstance3D" parent="Ocean"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 10)
mesh = SubResource("PlaneMesh_mf4pf")
skeleton = NodePath("../..")
script = ExtResource("2_ap626")
[node name="Water_Tile_03" type="MeshInstance3D" parent="Ocean"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -10)
mesh = SubResource("PlaneMesh_mf4pf")
skeleton = NodePath("../..")
script = ExtResource("2_ap626")
[node name="Water_Tile_04" type="MeshInstance3D" parent="Ocean"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, 0)
mesh = SubResource("PlaneMesh_mf4pf")
skeleton = NodePath("../..")
script = ExtResource("2_ap626")
[node name="Boat" parent="." node_paths=PackedStringArray("ocean") instance=ExtResource("3_ap626")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.461916, 0)
ocean = NodePath("../Ocean/Water_Tile_00")
[node name="MeshInstance3D" type="MeshInstance3D" parent="." node_paths=PackedStringArray("ocean")]
mesh = SubResource("SphereMesh_2qsx7")
script = SubResource("GDScript_ap626")
ocean = NodePath("../Ocean/Water_Tile_00")

0
ocean/debug.gd Normal file
View file

1
ocean/debug.gd.uid Normal file
View file

@ -0,0 +1 @@
uid://rgck5h3xer7n

View file

@ -13,13 +13,9 @@ var time: float
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready(): func _ready():
add_to_group("ocean") add_to_group("ocean",true)
material = mesh.surface_get_material(0) material = mesh.surface_get_material(0)
if material != null: update()
noise = material.get_shader_parameter("wave").noise.get_seamless_image(512, 512)
noise_scale = material.get_shader_parameter("noise_scale")
wave_speed = material.get_shader_parameter("wave_speed")
height_scale = material.get_shader_parameter("height_scale")
# Called every frame. 'delta' is the elapsed time since the previous frame. # Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta): func _process(delta):
@ -32,3 +28,10 @@ func get_water_level(world_position: Vector3) -> float:
var pixel_pos = Vector2(uv_x * noise.get_width(), uv_y * noise.get_height()) var pixel_pos = Vector2(uv_x * noise.get_width(), uv_y * noise.get_height())
return global_position.y + noise.get_pixelv(pixel_pos).r * height_scale; return global_position.y + noise.get_pixelv(pixel_pos).r * height_scale;
func update():
if material != null:
noise = material.get_shader_parameter("wave").noise.get_seamless_image(512, 512)
noise_scale = material.get_shader_parameter("noise_scale")
wave_speed = material.get_shader_parameter("wave_speed")
height_scale = material.get_shader_parameter("height_scale")

View file

@ -12,7 +12,7 @@ config_version=5
config/name="SpilledClone" config/name="SpilledClone"
config/version="0.01" config/version="0.01"
run/main_scene="uid://cjjrdfywoxwgr" run/main_scene="uid://hs3a438it6j6"
config/features=PackedStringArray("4.4", "Forward Plus") config/features=PackedStringArray("4.4", "Forward Plus")
boot_splash/bg_color=Color(0, 0, 0, 1) boot_splash/bg_color=Color(0, 0, 0, 1)
config/icon="res://icon.svg" config/icon="res://icon.svg"