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)