70 lines
1.8 KiB
GDScript
70 lines
1.8 KiB
GDScript
extends Node2D
|
|
|
|
signal water_reached_max_height
|
|
|
|
var radius : float:
|
|
set(new_radius):
|
|
radius = new_radius
|
|
var mesh = get_node_or_null("WaterMesh")
|
|
if !is_instance_valid(mesh):
|
|
return
|
|
update_scale(mesh)
|
|
mesh.material.set_shader_parameter("radius", radius)
|
|
|
|
@export var amplitude : float:
|
|
set(new_amplitude):
|
|
amplitude = new_amplitude
|
|
var mesh = get_node_or_null("WaterMesh")
|
|
if !is_instance_valid(mesh):
|
|
return
|
|
update_scale(mesh)
|
|
mesh.material.set_shader_parameter("amplitude", amplitude)
|
|
|
|
var tsunami_size : float:
|
|
set(new_size):
|
|
tsunami_size = new_size
|
|
var mesh = get_node_or_null("WaterMesh")
|
|
if !is_instance_valid(mesh):
|
|
return
|
|
update_scale(mesh)
|
|
mesh.material.set_shader_parameter("tsunami_size", tsunami_size)
|
|
|
|
var tsunami_angle : float:
|
|
set(new_angle):
|
|
tsunami_angle = new_angle
|
|
var mesh = get_node_or_null("WaterMesh")
|
|
if !is_instance_valid(mesh):
|
|
return
|
|
update_scale(mesh)
|
|
mesh.material.set_shader_parameter("tsunami_angle", tsunami_angle)
|
|
|
|
@export var rise_from : float = 2500;
|
|
@export var rise_to : float = 3500;
|
|
@export var rise_time : float = 120; # in seconds
|
|
var auto_rise : bool = true;
|
|
|
|
@onready var start_unix_time : float = Time.get_unix_time_from_system()
|
|
|
|
func update_scale(mesh):
|
|
mesh.scale = 2 * (radius + amplitude * 2.1 + tsunami_size) * Vector2.ONE
|
|
|
|
func update_shader():
|
|
radius = radius
|
|
amplitude = amplitude
|
|
tsunami_angle = tsunami_angle
|
|
tsunami_size = tsunami_size
|
|
|
|
func _ready() -> void:
|
|
update_shader()
|
|
radius = rise_from
|
|
|
|
|
|
func _process(_delta: float) -> void:
|
|
if auto_rise:
|
|
var time: float = Time.get_unix_time_from_system()
|
|
if time - start_unix_time > rise_time:
|
|
auto_rise = false
|
|
radius = rise_to
|
|
water_reached_max_height.emit()
|
|
else:
|
|
radius = lerpf(rise_from, rise_to, (time - start_unix_time) / rise_time)
|