aboutsummaryrefslogtreecommitdiff
path: root/game/testing/Buoyancy-in-Godot-4-master/Water.gd
diff options
context:
space:
mode:
Diffstat (limited to 'game/testing/Buoyancy-in-Godot-4-master/Water.gd')
-rw-r--r--game/testing/Buoyancy-in-Godot-4-master/Water.gd32
1 files changed, 32 insertions, 0 deletions
diff --git a/game/testing/Buoyancy-in-Godot-4-master/Water.gd b/game/testing/Buoyancy-in-Godot-4-master/Water.gd
new file mode 100644
index 0000000..b5e2fe7
--- /dev/null
+++ b/game/testing/Buoyancy-in-Godot-4-master/Water.gd
@@ -0,0 +1,32 @@
+extends MeshInstance3D
+
+var material: ShaderMaterial
+var noise: Image
+
+var noise_scale: float
+var wave_speed: float
+var height_scale: float
+
+var time: float
+
+# Called when the node enters the scene tree for the first time.
+func _ready():
+ material = mesh.surface_get_material(0)
+ 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.
+func _process(delta):
+ time += delta
+ material.set_shader_parameter("wave_time", time)
+
+func get_height(world_position: Vector3) -> 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 global_position.y + noise.get_pixelv(pixel_pos).r * height_scale;