extends CanvasLayer class_name GameGui const SCORE_ICON : Texture = preload("res://common/icons/growth.svg") var score_mirror : set(v): score_mirror = v score_update(true) func _ready(): GameInfo.game_data.current_region_data.updated.connect(_on_region_updated) GameInfo.game_data.current_region_data.plant_changing_score.connect(_on_plant_changing_score) GameInfo.game_data.player_data.updated.connect(_on_player_updated) GameInfo.game_data.current_region_data.pass_day_ended.connect(_on_region_pass_day_ended) score_mirror = GameInfo.game_data.current_region_data.get_score() charge_update(GameInfo.game_data.current_region_data) player_update(GameInfo.game_data.player_data, false) %EnergyInfo.reset_size() func _on_player_updated(player_data : PlayerData): player_update(player_data) func player_update(player_data : PlayerData, with_animation = true): %EnergyInfo.update( player_data.energy, player_data.max_energy, with_animation ) func _on_region_updated(region_data : RegionData): charge_update(region_data) func charge_update(_region_data : RegionData): pass # %ChargeCount.text = tr("%d_CHARGE_LEFT") % (region_data.charges) func score_update(with_animation = true): var objective_progression : float if GameInfo.game_data.current_region_data.state == RegionData.State.SUCCEEDED: objective_progression = 1. %ObjectiveProgressBar.text = tr("FILLED") else: var objective = GameInfo.game_data.current_region_data.objective objective_progression = (float(score_mirror) / max(float(objective), 1)) %ObjectiveProgressBar.text = "%d/%d" % [score_mirror, objective] if with_animation: get_tree().create_tween().tween_property( %ObjectiveProgressBar, "progress", objective_progression, 0.5, ) else: %ObjectiveProgressBar.set_progress(objective_progression) func _on_plant_changing_score(plant_data: PlantData, amount : int): if GameInfo.game_data.current_region_data.in_passing_day_animation: await GameInfo.game_data.current_region_data.pass_day_ended if amount <= 0: score_mirror += amount else : for i in range(amount): var camera = get_viewport().get_camera_2d() var screen_size = get_viewport().get_visible_rect().size spawn_score_particle( plant_data.position - camera.global_position + screen_size / 2, %ObjectiveProgressBar.global_position + %ObjectiveProgressBar.size / 2, 0.8 ) await get_tree().create_timer(0.5 / max(1.,i)).timeout func spawn_score_particle( from_position, to_position, duration ): var sprite_particle = Sprite2D.new() sprite_particle.texture = SCORE_ICON %ScoreParticles.add_child(sprite_particle) sprite_particle.position = from_position var tween = get_tree().create_tween() tween.set_trans(Tween.TransitionType.TRANS_SPRING) tween.tween_property( sprite_particle, "position", to_position, duration ) await tween.finished score_mirror += 1 sprite_particle.queue_free() func _on_player_action_tried_without_energy(): $AnimationPlayer.play("no_energy_left") func _on_player_upgraded(): $EffectAnimation.play("upgrade") func _on_region_pass_day_ended(region:Region): if region.data.charges == 1: %Announce.announce( tr("LAST_RECHARGE"), tr("%d_GARDEN_SCORE_LEFT") % [region.data.objective - region.garden.get_score()], Announce.RED_COLOR )