class_name ChargeThrowComponent extends Node @export var min_power: float = 0.5 @export var max_power: float = 2.0 @export var max_charge_time: float = 1.5 var charge_start_time: float = 0.0 var is_charging: bool = false signal charge_started signal charge_updated(charge_ratio: float) signal charge_stopped func _process(_delta: float) -> void: if not is_charging: return var charge_ratio := get_charge_ratio() charge_updated.emit(charge_ratio) func start_charging() -> void: is_charging = true charge_start_time = Time.get_ticks_msec() / 1000.0 charge_started.emit() func get_charge_ratio() -> float: if not is_charging: return 0.0 var held_time := (Time.get_ticks_msec() / 1000.0) - charge_start_time var t = clamp(held_time / max_charge_time, 0.0, 1.0) return lerp(min_power, max_power, t) func stop_charging() -> float: is_charging = false var held_time := (Time.get_ticks_msec() / 1000.0) - charge_start_time var t = clamp(held_time / max_charge_time, 0.0, 1.0) charge_start_time = 0.0 charge_stopped.emit() return lerp(min_power, max_power, t)