@tool extends CanvasLayer class_name PassDay const BLUR_STRENGTH = 10 const BLUR_MIX_PERCENTAGE = 0.8 const TIME_BY_ENERGY = 0.3 const TIME_MARGIN = 0.2 signal max_energy_reached() signal animation_appeared signal animation_disappeared @export_tool_button("Pass Day", "Callable") var pass_day_action = pass_day_animation @export_tool_button("Appear", "Callable") var appear_action = appear @export var from_energy = 0 @export var max_energy = 3 var current_energy = 0 var time_since_recharging = 0. var recharging = false var is_animation_appeared := false var is_animation_disappeared := false func _ready(): hide() setup_energy_values() %Blur.show() %PassDayInfo.hide() func _process(delta): if recharging: time_since_recharging += delta var new_current_energy = from_energy + roundi(time_since_recharging/TIME_BY_ENERGY) if new_current_energy > max_energy: max_energy_reached.emit() elif (new_current_energy != current_energy): AudioManager.play_sfx("Recharge%d" % new_current_energy) %EnergyPassDayInfo.update(new_current_energy, max_energy, true) current_energy = new_current_energy func setup_energy_values(): if not Engine.is_editor_hint(): from_energy = GameInfo.game_data.player_data.energy max_energy = GameInfo.game_data.player_data.max_energy current_energy = from_energy func pass_day_animation(): setup_energy_values() %ChargeCount.text = tr('%d_CHARGE_LEFT') % GameInfo.game_data.current_region_data.charges is_animation_appeared=false is_animation_disappeared=false %EnergyPassDayInfo.update(from_energy, max_energy, false) await appear() is_animation_appeared = true animation_appeared.emit() await get_tree().create_timer(TIME_MARGIN).timeout recharging = true time_since_recharging = 0. await max_energy_reached await get_tree().create_timer(TIME_MARGIN).timeout await disappear() is_animation_disappeared=true animation_disappeared.emit() recharging = false func appear(): show() add_tween( "blur_mix_percentage", %Blur, BLUR_MIX_PERCENTAGE, 0.5 ) await add_tween( "blur_strength", %Blur, BLUR_STRENGTH, 0.5 ).finished await %PassDayInfoAnimationPlayer.appear() func disappear(): await %PassDayInfoAnimationPlayer.disappear() add_tween( "blur_mix_percentage", %Blur, 0.0, 0.5 ) await add_tween( "blur_strength", %Blur, 0.1, 0.5 ).finished hide() func add_tween( property : String, target: Node, value : Variant, seconds: float = 1., transition_type: Tween.TransitionType = Tween.TransitionType.TRANS_LINEAR ) -> Tween: var tween : Tween = get_tree().create_tween() tween.set_trans(transition_type) tween.tween_property(target, property, value, seconds) tween.set_pause_mode(Tween.TWEEN_PAUSE_PROCESS) return tween