Compare commits
2 commits
3f558a4fbb
...
c63ead5e9d
Author | SHA1 | Date | |
---|---|---|---|
c63ead5e9d | |||
19956d3f2a |
15 changed files with 969 additions and 180 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"
|
||||
}
|
||||
]
|
|
@ -8,5 +8,5 @@ func _ready() -> void:
|
|||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
func _process(_delta: float) -> void:
|
||||
pass
|
||||
|
|
66
Boats/buyancy_probe.gd
Normal file
66
Boats/buyancy_probe.gd
Normal file
|
@ -0,0 +1,66 @@
|
|||
extends Marker3D
|
||||
class_name BuyancyProbe
|
||||
|
||||
## How much force is applied upward
|
||||
@export var float_strength: float = 10.0
|
||||
var currentdepth:float
|
||||
|
||||
@export_category("Debug")
|
||||
@export var show_probe :bool = false
|
||||
var sphere_preview:MeshInstance3D
|
||||
@onready var debug_sphere:SphereMesh = SphereMesh.new()
|
||||
|
||||
@export_category("Wave")
|
||||
var noise: Image
|
||||
var wave_speed: float = 1.0
|
||||
var noise_scale: float
|
||||
var height_scale: float
|
||||
@onready var ocean_mat: ShaderMaterial = preload("uid://cf3lxmfb2d7c8")
|
||||
@onready var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity")
|
||||
@onready var OceanNode:Ocean = get_tree().get_first_node_in_group("Ocean")
|
||||
var Oceantime:float
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
if ocean_mat != null:
|
||||
update_param()
|
||||
if show_probe:
|
||||
sphere_preview = MeshInstance3D.new()
|
||||
sphere_preview.set_name("Sphere")
|
||||
add_child(sphere_preview)
|
||||
debug_sphere.radius = 0.1
|
||||
debug_sphere.height = 0.2
|
||||
sphere_preview.mesh = debug_sphere
|
||||
|
||||
func _physics_process(_delta: float) -> void:
|
||||
var depth = get_wave_height(global_position,Oceantime) - global_position.y
|
||||
print(depth)
|
||||
if depth > 0.0:
|
||||
var float_force = get_parent().mass
|
||||
get_parent().apply_force(Vector3.UP * gravity * depth * float_force ,global_position-get_parent().global_position)
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
if OceanNode != null:
|
||||
Oceantime = OceanNode.wave_time
|
||||
if show_probe && sphere_preview != null:
|
||||
sphere_preview.global_position = global_position
|
||||
sphere_preview.global_position.y = get_wave_height(global_position,Oceantime)
|
||||
|
||||
|
||||
|
||||
|
||||
# Calculate the wave height using a sine function.
|
||||
func get_wave_height(world_position: Vector3, time: float) -> float:
|
||||
var uv_x = wrapf(world_position.x / noise_scale + time * wave_speed, 0, 1)
|
||||
var uv_y = wrapf(world_position.z / noise_scale + time * wave_speed, 0, 1)
|
||||
|
||||
var pixel_pos = Vector2(uv_x * noise.get_width(), uv_y * noise.get_height())
|
||||
return OceanNode.global_position.y + noise.get_pixelv(pixel_pos).r * height_scale;
|
||||
|
||||
func update_param():
|
||||
if ocean_mat != null:
|
||||
wave_speed = ocean_mat.get_shader_parameter("wave_speed")
|
||||
noise = ocean_mat.get_shader_parameter("wave").noise.get_seamless_image(512, 512)
|
||||
noise_scale = ocean_mat.get_shader_parameter("noise_scale")
|
||||
wave_speed = ocean_mat.get_shader_parameter("wave_speed")
|
||||
height_scale = ocean_mat.get_shader_parameter("height_scale")
|
67
Ocean/OceanShaderl.tres
Normal file
67
Ocean/OceanShaderl.tres
Normal file
|
@ -0,0 +1,67 @@
|
|||
[gd_resource type="ShaderMaterial" load_steps=8 format=3 uid="uid://cf3lxmfb2d7c8"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://ts0b536y5vcd" path="res://Ocean/OceanTile.gdshader" id="1_sqira"]
|
||||
|
||||
[sub_resource type="FastNoiseLite" id="FastNoiseLite_sqira"]
|
||||
noise_type = 3
|
||||
frequency = 0.035
|
||||
|
||||
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_d50os"]
|
||||
seamless = true
|
||||
as_normal_map = true
|
||||
bump_strength = 2.0
|
||||
noise = SubResource("FastNoiseLite_sqira")
|
||||
|
||||
[sub_resource type="FastNoiseLite" id="FastNoiseLite_d50os"]
|
||||
noise_type = 0
|
||||
seed = 22
|
||||
frequency = 0.0072
|
||||
fractal_lacunarity = 1.6
|
||||
fractal_gain = 0.45
|
||||
fractal_weighted_strength = 0.55
|
||||
|
||||
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_ca8p6"]
|
||||
seamless = true
|
||||
seamless_blend_skirt = 0.532
|
||||
as_normal_map = true
|
||||
bump_strength = 21.0
|
||||
noise = SubResource("FastNoiseLite_d50os")
|
||||
|
||||
[sub_resource type="FastNoiseLite" id="FastNoiseLite_ca8p6"]
|
||||
noise_type = 2
|
||||
fractal_type = 2
|
||||
fractal_gain = 0.34
|
||||
fractal_weighted_strength = 0.6
|
||||
|
||||
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_cuet1"]
|
||||
seamless = true
|
||||
noise = SubResource("FastNoiseLite_ca8p6")
|
||||
|
||||
[resource]
|
||||
resource_name = "OceanTileShader"
|
||||
render_priority = 0
|
||||
shader = ExtResource("1_sqira")
|
||||
shader_parameter/albedo = Color(0, 0.32, 0.43, 1)
|
||||
shader_parameter/albedo2 = Color(0, 0.47, 0.76, 1)
|
||||
shader_parameter/color_deep = Color(0.11, 0.29, 0.33, 1)
|
||||
shader_parameter/color_shallow = Color(1, 1, 1, 1)
|
||||
shader_parameter/shore_fade = 0.165
|
||||
shader_parameter/shore_intensity = 0.7
|
||||
shader_parameter/metallic = 0.0
|
||||
shader_parameter/roughness = 0.02
|
||||
shader_parameter/texture_normal = SubResource("NoiseTexture2D_d50os")
|
||||
shader_parameter/texture_normal2 = SubResource("NoiseTexture2D_ca8p6")
|
||||
shader_parameter/wave = SubResource("NoiseTexture2D_cuet1")
|
||||
shader_parameter/wave_time = 21.1359
|
||||
shader_parameter/wave_direction = Vector2(2, 0)
|
||||
shader_parameter/wave_2_direction = Vector2(0, 0.9)
|
||||
shader_parameter/time_scale = 0.02
|
||||
shader_parameter/wave_speed = 0.05
|
||||
shader_parameter/noise_scale = 15.0
|
||||
shader_parameter/height_scale = 0.5
|
||||
shader_parameter/beers_law = 2.0
|
||||
shader_parameter/depth_offset = -0.75
|
||||
shader_parameter/edge_scale = 0.1
|
||||
shader_parameter/near = 0.5
|
||||
shader_parameter/far = 100.0
|
||||
shader_parameter/edge_color = Color(0, 0, 0, 1)
|
|
@ -1,50 +1,89 @@
|
|||
shader_type spatial;
|
||||
render_mode unshaded, cull_back, depth_draw_opaque;
|
||||
render_mode depth_draw_always;
|
||||
|
||||
// Wave parameters: wave.xy is direction, wave.z is steepness, wave.w is wavelength.
|
||||
uniform vec4 color:source_color = vec4(0.13, 0.31, 0.53, 0.95);
|
||||
uniform vec4 wave = vec4(1.0, 0.0, 0.5, 10.0);
|
||||
uniform float wave_speed : hint_range(0.0, 5.0) = 1.0;
|
||||
uniform float gravity : hint_range(0.0, 20.0) = 9.8;
|
||||
uniform float wave_time;
|
||||
uniform sampler2D SCREEN_TEXTURE: hint_screen_texture, filter_linear_mipmap;
|
||||
uniform sampler2D DEPTH_TEXTURE: hint_depth_texture, filter_linear_mipmap;
|
||||
|
||||
uniform vec3 albedo : source_color = vec3(0.0,0.32,0.43);
|
||||
uniform vec3 albedo2 : source_color= vec3(0.0,0.47,0.76);
|
||||
uniform vec4 color_deep : source_color= vec4(0.11,0.29,0.33,1.0);
|
||||
uniform vec4 color_shallow : source_color= vec4(0.0,0.47,0.76,1.0);
|
||||
uniform float shore_fade = 1.0;
|
||||
uniform float shore_intensity = 1.0;
|
||||
uniform float metallic : hint_range(0.0, 1.0) = 0;
|
||||
uniform float roughness : hint_range(0.0, 1.0) = 0.02;
|
||||
|
||||
vec3 gerstnerWave(vec3 p, out vec3 tangent, out vec3 binormal) {
|
||||
float steepness = wave.z;
|
||||
float wavelength = wave.w;
|
||||
float k = 2.0 * PI / wavelength;
|
||||
float c = sqrt(gravity / k);
|
||||
vec2 d = normalize(wave.xy);
|
||||
float f = k * ( dot(d, p.xz) - c * wave_time * wave_speed );
|
||||
float a = steepness / k;
|
||||
|
||||
// Update tangent and binormal for lighting or other effects.
|
||||
tangent = vec3(
|
||||
-d.x * d.x * (steepness * sin(f)),
|
||||
d.x * (steepness * cos(f)),
|
||||
-d.x * d.y * (steepness * sin(f))
|
||||
);
|
||||
binormal = vec3(
|
||||
-d.x * d.y * (steepness * sin(f)),
|
||||
d.y * (steepness * cos(f)),
|
||||
-d.y * d.y * (steepness * sin(f))
|
||||
);
|
||||
|
||||
return vec3(
|
||||
d.x * (a * cos(f)),
|
||||
a * sin(f),
|
||||
d.y * (a * cos(f))
|
||||
);
|
||||
uniform sampler2D texture_normal;
|
||||
uniform sampler2D texture_normal2;
|
||||
uniform sampler2D wave;
|
||||
|
||||
uniform float wave_time = 0;
|
||||
uniform vec2 wave_direction = vec2(2.0,0.0);
|
||||
uniform vec2 wave_2_direction = vec2(0.0,1.0);
|
||||
uniform float time_scale : hint_range(0.0, 0.2, 0.005) = 0.025;
|
||||
uniform float wave_speed = 2.0;
|
||||
uniform float noise_scale = 10.0;
|
||||
uniform float height_scale = 0.15;
|
||||
uniform float beers_law = 2.0;
|
||||
uniform float depth_offset = -0.75;
|
||||
|
||||
varying float height;
|
||||
varying vec3 world_pos;
|
||||
|
||||
uniform float edge_scale = 0.1;
|
||||
uniform float near = 0.5;
|
||||
uniform float far = 100.0;
|
||||
uniform vec3 edge_color : source_color;
|
||||
|
||||
float fresnel(float amount, vec3 normal, vec3 view)
|
||||
{
|
||||
return pow((1.0 - clamp(dot(normalize(normal), normalize(view)), 0.0, 1.0 )), amount);
|
||||
}
|
||||
|
||||
float edge(float depth) {
|
||||
return near * far / (far + depth * (near - far));
|
||||
}
|
||||
|
||||
void vertex() {
|
||||
vec3 tangent;
|
||||
vec3 binormal;
|
||||
vec3 disp = gerstnerWave(VERTEX, tangent, binormal);
|
||||
VERTEX.xyz += disp;
|
||||
world_pos = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz;
|
||||
height = texture(wave, world_pos.xz / noise_scale + wave_time * wave_speed).r;
|
||||
VERTEX.y += height * height_scale;
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
ALBEDO = color.rgb;
|
||||
ALPHA = color.a;
|
||||
float depth_texture = texture(DEPTH_TEXTURE, SCREEN_UV).r;
|
||||
float depth = PROJECTION_MATRIX[3][2] / (depth_texture + PROJECTION_MATRIX[2][2]);
|
||||
depth = depth + VERTEX.z;
|
||||
float depth_blend = exp((depth + depth_offset) * -beers_law);
|
||||
depth_blend = clamp(1.0 - depth_blend, 0.0, 1.0);
|
||||
|
||||
float depth_tex = texture(DEPTH_TEXTURE, SCREEN_UV).r;
|
||||
vec4 depth_world_pos = INV_PROJECTION_MATRIX * vec4(SCREEN_UV * 2.0 - 1.0, depth_tex, 1.0);
|
||||
depth_world_pos.xyz /= depth_world_pos.w;
|
||||
|
||||
float shore_line = clamp(1.0 - smoothstep(depth_world_pos.z + shore_fade, depth_world_pos.z, VERTEX.z), 0.0, 1.0);
|
||||
vec3 shore_color = mix(color_shallow.rgb, edge_color, shore_line);
|
||||
|
||||
vec3 screen_color = textureLod(SCREEN_TEXTURE, SCREEN_UV, depth_blend * 2.5).rgb;
|
||||
vec3 depth_color = mix(color_shallow.rgb, color_deep.rgb, depth_blend);
|
||||
vec3 color = mix(screen_color * depth_color, depth_color * 0.25, depth_blend * 0.5);
|
||||
|
||||
float z_depth = edge(texture(DEPTH_TEXTURE, SCREEN_UV).x);
|
||||
float z_pos = edge(FRAGCOORD.z);
|
||||
float z_dif = z_depth - z_pos;
|
||||
|
||||
vec2 time = (TIME * wave_direction) * time_scale;
|
||||
vec2 time2 = (TIME * wave_2_direction) * time_scale;
|
||||
|
||||
vec3 normal_blend = mix(texture(texture_normal, world_pos.xz / noise_scale + time).rgb, texture(texture_normal2, world_pos.xz / noise_scale + time2).rgb, 0.5);
|
||||
|
||||
float fresnel = fresnel(5.0, NORMAL, VIEW);
|
||||
vec3 surface_color = mix(albedo, albedo2, fresnel);
|
||||
vec3 depth_color_adj = mix(edge_color, color, step(edge_scale, z_dif));
|
||||
|
||||
ALBEDO = clamp(surface_color + depth_color_adj + shore_color * shore_intensity,vec3(0),vec3(1.0));
|
||||
ALPHA = 1.0;
|
||||
METALLIC = metallic;
|
||||
ROUGHNESS = roughness;
|
||||
NORMAL_MAP = normal_blend;
|
||||
}
|
|
@ -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
|
|
@ -2,10 +2,16 @@
|
|||
extends Node3D
|
||||
class_name Ocean
|
||||
|
||||
@export_category("Gameplay")
|
||||
@export var follow_player:bool = true
|
||||
|
||||
@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]
|
||||
|
||||
|
@ -14,31 +20,29 @@ var wave_time:float = 0.0
|
|||
@onready var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity")
|
||||
|
||||
var boats:Array[Boat]
|
||||
|
||||
var PlayerBoat: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)
|
||||
position = Vector3(0.0,0.0,0.0)
|
||||
add_to_group("Ocean",true)
|
||||
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)
|
||||
if follow_player && PlayerBoat != null:
|
||||
global_position.x = PlayerBoat.global_position.x
|
||||
global_position.z = PlayerBoat.global_position.z
|
||||
|
||||
########################
|
||||
### 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)
|
||||
]
|
||||
var _layer_number = 3
|
||||
|
||||
func remove_tile():
|
||||
# Supprimer toutes les tuiles existantes
|
||||
|
@ -50,31 +54,36 @@ 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 tile_position = Vector3(
|
||||
x * tile_size,
|
||||
0.0,
|
||||
z * tile_size
|
||||
)
|
||||
if tile_position.x == 0.0 && tile_position.z ==0.0:
|
||||
create_new_tile(tile_position, OceanTileType.MAIN)
|
||||
elif abs(tile_position.x) <= tile_size && abs(tile_position.z) <= tile_size:
|
||||
create_new_tile(tile_position, OceanTileType.NEAR)
|
||||
else:
|
||||
create_new_tile(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(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
|
||||
NewTile.add_to_group("OceanTiles",true)
|
||||
NewTile.global_position = tile_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)
|
||||
|
|
651
OpenWorld.tscn
651
OpenWorld.tscn
|
@ -1,6 +1,10 @@
|
|||
[gd_scene load_steps=5 format=3 uid="uid://bhwuawppmqk4"]
|
||||
[gd_scene load_steps=13 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"]
|
||||
[ext_resource type="Script" uid="uid://cnfkxclrq0i0s" path="res://Boats/buyancy_probe.gd" id="5_spien"]
|
||||
|
||||
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_xncsh"]
|
||||
sky_top_color = Color(0.191699, 0.357914, 1, 1)
|
||||
|
@ -21,6 +25,18 @@ glow_enabled = true
|
|||
fog_enabled = true
|
||||
fog_sky_affect = 0.699
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_spien"]
|
||||
size = Vector3(5, 0.2, 5)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_kisq7"]
|
||||
size = Vector3(5, 0.2, 5)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_kisq7"]
|
||||
size = Vector3(0.3, 0.8, 0.3)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_0g14k"]
|
||||
size = Vector3(0.3, 0.8, 0.3)
|
||||
|
||||
[node name="OpenWorld" type="Node3D"]
|
||||
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||
|
@ -31,6 +47,637 @@ transform = Transform3D(-0.149535, -0.420992, 0.894653, 0, 0.904827, 0.425779, -
|
|||
light_color = Color(0.969986, 0.876638, 0.798898, 1)
|
||||
shadow_enabled = true
|
||||
|
||||
[node name="Ocean" type="Node3D" parent="."]
|
||||
[node name="Ocean" type="Node3D" parent="." groups=["Ocean"]]
|
||||
script = ExtResource("1_xncsh")
|
||||
metadata/_custom_type_script = "uid://cdnrxp6nu1wor"
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile25" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0, -30)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile26" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0, -20)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile27" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0, -10)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile28" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0, 0)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile29" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0, 10)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile30" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0, 20)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile31" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0, 30)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile32" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 0, -30)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile33" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 0, -20)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile34" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 0, -10)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile35" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 0, 0)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile36" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 0, 10)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile37" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 0, 20)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile38" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 0, 30)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile39" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, -30)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile40" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, -20)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile41" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, -10)
|
||||
mesh = ExtResource("2_ydaaq")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile42" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, 0)
|
||||
mesh = ExtResource("2_ydaaq")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile43" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, 10)
|
||||
mesh = ExtResource("2_ydaaq")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile44" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, 20)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile45" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, 30)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile46" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -30)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile47" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -20)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile48" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -10)
|
||||
mesh = ExtResource("2_ydaaq")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile49" type="MeshInstance3D" parent="Ocean"]
|
||||
mesh = ExtResource("2_7sjql")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile50" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 10)
|
||||
mesh = ExtResource("2_ydaaq")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile51" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 20)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile52" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile53" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, -30)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile54" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, -20)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile55" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, -10)
|
||||
mesh = ExtResource("2_ydaaq")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile56" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, 0)
|
||||
mesh = ExtResource("2_ydaaq")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile57" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, 10)
|
||||
mesh = ExtResource("2_ydaaq")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile58" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, 20)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile59" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, 30)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile60" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20, 0, -30)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile61" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20, 0, -20)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile62" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20, 0, -10)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile63" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20, 0, 0)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile64" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20, 0, 10)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile65" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20, 0, 20)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile66" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20, 0, 30)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile67" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 0, -30)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile68" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 0, -20)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile69" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 0, -10)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile70" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 0, 0)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile71" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 0, 10)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile72" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 0, 20)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OceanTile73" type="MeshInstance3D" parent="Ocean"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 0, 30)
|
||||
mesh = ExtResource("3_spien")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="Boat" type="RigidBody3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.331476, 2.65347)
|
||||
mass = 10.0
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Boat"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0588136, 0)
|
||||
mesh = SubResource("BoxMesh_spien")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Boat"]
|
||||
shape = SubResource("BoxShape3D_kisq7")
|
||||
|
||||
[node name="BuyancyProbe" type="Marker3D" parent="Boat"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, -0.5, 2)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe2" type="Marker3D" parent="Boat"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, -0.5, -2)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe3" type="Marker3D" parent="Boat"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, -0.5, 2)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe4" type="Marker3D" parent="Boat"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, -0.5, -2)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="Boat2" type="RigidBody3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 11.6813, 0.331476, 0.403838)
|
||||
mass = 10.0
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Boat2"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0588136, 0)
|
||||
mesh = SubResource("BoxMesh_spien")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Boat2"]
|
||||
shape = SubResource("BoxShape3D_kisq7")
|
||||
|
||||
[node name="BuyancyProbe" type="Marker3D" parent="Boat2"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, -0.5, 2)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe2" type="Marker3D" parent="Boat2"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, -0.5, -2)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe3" type="Marker3D" parent="Boat2"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, -0.5, 2)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe4" type="Marker3D" parent="Boat2"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, -0.5, -2)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="Boat3" type="RigidBody3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.0411781, -0.999152, 0, 0.999152, 0.0411781, 0.938181, 0.543982, -10.4465)
|
||||
mass = 2.0
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Boat3"]
|
||||
mesh = SubResource("BoxMesh_kisq7")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Boat3"]
|
||||
shape = SubResource("BoxShape3D_0g14k")
|
||||
|
||||
[node name="BuyancyProbe" type="Marker3D" parent="Boat3"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.4, -0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe2" type="Marker3D" parent="Boat3"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.4, -0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe3" type="Marker3D" parent="Boat3"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.4, 0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe4" type="Marker3D" parent="Boat3"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.4, 0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="Boat4" type="RigidBody3D" parent="."]
|
||||
transform = Transform3D(0.676837, -0.735508, -0.0303125, 0, 0.0411781, -0.999152, 0.736133, 0.676263, 0.0278709, 3.69887, 0.543982, -9.62207)
|
||||
mass = 2.0
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Boat4"]
|
||||
mesh = SubResource("BoxMesh_kisq7")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Boat4"]
|
||||
shape = SubResource("BoxShape3D_0g14k")
|
||||
|
||||
[node name="BuyancyProbe" type="Marker3D" parent="Boat4"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.4, -0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe2" type="Marker3D" parent="Boat4"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.4, -0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe3" type="Marker3D" parent="Boat4"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.4, 0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe4" type="Marker3D" parent="Boat4"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.4, 0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="Boat5" type="RigidBody3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.0411781, -0.999152, 0, 0.999152, 0.0411781, 4.62591, 0.543982, 2.98498)
|
||||
mass = 2.0
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Boat5"]
|
||||
mesh = SubResource("BoxMesh_kisq7")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Boat5"]
|
||||
shape = SubResource("BoxShape3D_0g14k")
|
||||
|
||||
[node name="BuyancyProbe" type="Marker3D" parent="Boat5"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.4, -0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe2" type="Marker3D" parent="Boat5"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.4, -0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe3" type="Marker3D" parent="Boat5"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.4, 0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe4" type="Marker3D" parent="Boat5"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.4, 0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="Boat6" type="RigidBody3D" parent="."]
|
||||
transform = Transform3D(0.676837, -0.735508, -0.0303125, 0, 0.0411781, -0.999152, 0.736133, 0.676263, 0.0278709, 7.3866, 0.543982, 3.8094)
|
||||
mass = 2.0
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Boat6"]
|
||||
mesh = SubResource("BoxMesh_kisq7")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Boat6"]
|
||||
shape = SubResource("BoxShape3D_0g14k")
|
||||
|
||||
[node name="BuyancyProbe" type="Marker3D" parent="Boat6"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.4, -0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe2" type="Marker3D" parent="Boat6"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.4, -0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe3" type="Marker3D" parent="Boat6"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.4, 0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe4" type="Marker3D" parent="Boat6"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.4, 0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="Boat7" type="RigidBody3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.0411781, -0.999152, 0, 0.999152, 0.0411781, 4.62591, 0.543982, -13.9738)
|
||||
mass = 2.0
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Boat7"]
|
||||
mesh = SubResource("BoxMesh_kisq7")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Boat7"]
|
||||
shape = SubResource("BoxShape3D_0g14k")
|
||||
|
||||
[node name="BuyancyProbe" type="Marker3D" parent="Boat7"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.4, -0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe2" type="Marker3D" parent="Boat7"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.4, -0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe3" type="Marker3D" parent="Boat7"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.4, 0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe4" type="Marker3D" parent="Boat7"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.4, 0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="Boat8" type="RigidBody3D" parent="."]
|
||||
transform = Transform3D(0.676837, -0.735508, -0.0303125, 0, 0.0411781, -0.999152, 0.736133, 0.676263, 0.0278709, 7.3866, 0.543982, -13.1494)
|
||||
mass = 2.0
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Boat8"]
|
||||
mesh = SubResource("BoxMesh_kisq7")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Boat8"]
|
||||
shape = SubResource("BoxShape3D_0g14k")
|
||||
|
||||
[node name="BuyancyProbe" type="Marker3D" parent="Boat8"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.4, -0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe2" type="Marker3D" parent="Boat8"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.4, -0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe3" type="Marker3D" parent="Boat8"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.4, 0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe4" type="Marker3D" parent="Boat8"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.4, 0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="Boat9" type="RigidBody3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.0411781, -0.999152, 0, 0.999152, 0.0411781, -24.7833, 0.543982, 20.1903)
|
||||
mass = 2.0
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Boat9"]
|
||||
mesh = SubResource("BoxMesh_kisq7")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Boat9"]
|
||||
shape = SubResource("BoxShape3D_0g14k")
|
||||
|
||||
[node name="BuyancyProbe" type="Marker3D" parent="Boat9"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.4, -0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe2" type="Marker3D" parent="Boat9"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.4, -0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe3" type="Marker3D" parent="Boat9"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.4, 0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe4" type="Marker3D" parent="Boat9"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.4, 0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="Boat10" type="RigidBody3D" parent="."]
|
||||
transform = Transform3D(0.676837, -0.735508, -0.0303125, 0, 0.0411781, -0.999152, 0.736133, 0.676263, 0.0278709, -22.0226, 0.543982, 21.0147)
|
||||
mass = 2.0
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Boat10"]
|
||||
mesh = SubResource("BoxMesh_kisq7")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Boat10"]
|
||||
shape = SubResource("BoxShape3D_0g14k")
|
||||
|
||||
[node name="BuyancyProbe" type="Marker3D" parent="Boat10"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.4, -0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe2" type="Marker3D" parent="Boat10"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.4, -0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe3" type="Marker3D" parent="Boat10"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.4, 0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="BuyancyProbe4" type="Marker3D" parent="Boat10"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.4, 0.5, 0)
|
||||
script = ExtResource("5_spien")
|
||||
float_strength = 5.0
|
||||
show_probe = true
|
||||
metadata/_custom_type_script = "uid://cnfkxclrq0i0s"
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="."]
|
||||
transform = Transform3D(0.817859, -0.4492, 0.35962, 0, 0.62497, 0.780649, -0.575419, -0.63846, 0.511137, 8.74584, 11.0902, 11.4458)
|
||||
current = true
|
||||
|
|
|
@ -1,82 +0,0 @@
|
|||
extends Node3D
|
||||
class_name BuyancyProbe
|
||||
|
||||
## How much force is applied upward
|
||||
@export var float_strenght: float = 10.0
|
||||
|
||||
@export_category("Debug")
|
||||
@export var show_probe :bool = false
|
||||
var sphere_preview:MeshInstance3D
|
||||
@onready var debug_sphere:SphereMesh = SphereMesh.new()
|
||||
|
||||
@export_category("Wave")
|
||||
# Wave parameters (should match the shader).
|
||||
# For a single wave, we used these parameters.
|
||||
@export var wave_amplitude: float = 1.0
|
||||
@export var wave_length: float = 10.0
|
||||
@export var wave_speed: float = 1.0
|
||||
@export var wave_direction: Vector2 = Vector2(1.0, 0.0)
|
||||
@export var wave:Vector4
|
||||
@onready var ocean_mat: ShaderMaterial = preload("uid://wes0mbjy8mno").surface_get_material(0)
|
||||
@onready var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity")
|
||||
@onready var OceanNode:Ocean = get_tree().get_first_node_in_group("Ocean")
|
||||
# For multiple waves, define an array of waves.
|
||||
@export var waves: Array[Vector4] = [
|
||||
Vector4(1.0, 0.0, 0.5, 10.0),
|
||||
Vector4(0.0, 1.0, 0.25, 20.0),
|
||||
Vector4(1.0, 1.0, 0.15, 10.0)
|
||||
]
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
if ocean_mat != null:
|
||||
wave = ocean_mat.get_shader_parameter("wave")
|
||||
wave_speed = ocean_mat.get_shader_parameter("wave_speed")
|
||||
|
||||
if show_probe:
|
||||
sphere_preview = MeshInstance3D.new()
|
||||
sphere_preview.set_name("Sphere")
|
||||
add_child(sphere_preview)
|
||||
debug_sphere.radius = 0.1
|
||||
debug_sphere.height = 0.2
|
||||
sphere_preview.mesh = debug_sphere
|
||||
|
||||
|
||||
var Oceantime:float
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
if OceanNode != null:
|
||||
Oceantime = OceanNode.time
|
||||
if show_probe && sphere_preview != null:
|
||||
sphere_preview.global_position.y = get_gerstner_wave(global_position,wave,Oceantime).y
|
||||
#print(get_gerstner_wave(global_position,wave,Oceantime).y)
|
||||
|
||||
# Calculate the wave height using a sine function.
|
||||
func get_wave_height(position: Vector3, time: float) -> float:
|
||||
var frequency = (2.0 * PI) / wave_length
|
||||
var phase = frequency * (wave_direction.dot(Vector2(position.x, position.z))) + time * wave_speed
|
||||
return wave_amplitude * sin(phase)
|
||||
|
||||
# Approximate the wave's normal based on the derivative of the wave function.
|
||||
func get_wave_normal(position: Vector3, time: float) -> Vector3:
|
||||
var frequency = (2.0 * PI) / wave_length
|
||||
var phase = frequency * (wave_direction.dot(Vector2(global_position.x, global_position.z))) + time * wave_speed
|
||||
var dHeight_dx = wave_amplitude * cos(phase) * frequency * wave_direction.x
|
||||
var dHeight_dz = wave_amplitude * cos(phase) * frequency * wave_direction.y
|
||||
var normal = Vector3(-dHeight_dx, 1.0, -dHeight_dz).normalized()
|
||||
return normal
|
||||
|
||||
func get_gerstner_wave(p: Vector3, wave: Vector4, time: float) -> Vector3:
|
||||
var steepness = wave.z
|
||||
var wavelength = wave.w
|
||||
var k = 2 * PI / wavelength
|
||||
var c = sqrt(gravity / k) # Wave speed factor (gravity-based)
|
||||
var d = Vector2(wave.x, wave.y).normalized()
|
||||
var f = k * ( d.dot(Vector2(p.x, p.z)) - c * time * wave_speed )
|
||||
var a = steepness / k
|
||||
# Return the displacement vector.
|
||||
return Vector3(
|
||||
d.x * (a * cos(f)),
|
||||
a * sin(f),
|
||||
d.y * (a * cos(f))
|
||||
)
|
|
@ -11,6 +11,24 @@ config_version=5
|
|||
[application]
|
||||
|
||||
config/name="ChatBoat"
|
||||
run/main_scene="uid://bwdtb8qfox3nq"
|
||||
run/main_scene="uid://bhwuawppmqk4"
|
||||
config/features=PackedStringArray("4.4", "Forward Plus")
|
||||
config/icon="res://icon.svg"
|
||||
|
||||
[display]
|
||||
|
||||
window/size/viewport_width=572
|
||||
window/size/viewport_height=324
|
||||
window/stretch/mode="viewport"
|
||||
window/stretch/aspect="expand"
|
||||
window/per_pixel_transparency/allowed=true
|
||||
window/vsync/vsync_mode=0
|
||||
|
||||
[global_group]
|
||||
|
||||
Ocean="Oceans"
|
||||
|
||||
[rendering]
|
||||
|
||||
global_illumination/gi/use_half_resolution=true
|
||||
shading/overrides/force_vertex_shading=true
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
[gd_scene load_steps=11 format=3 uid="uid://bwdtb8qfox3nq"]
|
||||
|
||||
[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="Script" uid="uid://cnfkxclrq0i0s" path="res://Boats/buyancy_probe.gd" id="2_fj7yv"]
|
||||
|
||||
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_aqk2v"]
|
||||
sky_top_color = Color(0.191699, 0.357914, 1, 1)
|
||||
|
|
Loading…
Reference in a new issue