extends Node const Text3D = preload("res://objects/hud/3d_text.tscn") const LevelSelect := preload("res://menus/level_select_scholar.tscn") onready var shards: Node2D = $ShardsAndBonuses/Shards onready var score = $Score onready var time = $Time onready var animation_player = $AnimationPlayer #Score bonuses onready var collection_bonus_score = $ShardsAndBonuses/Bonuses/CollectionBonus/CollectionBonusScore onready var time_bonus_score = $ShardsAndBonuses/Bonuses/TimeBonus/TimeBonusScore onready var life_bonus_score = $ShardsAndBonuses/Bonuses/LifeBonus/LifeBonusScore onready var arrow_bonus_score = $ShardsAndBonuses/Bonuses/ArrowBonus/ArrowBonusScore onready var perfect_bonus_score = $ShardsAndBonuses/Bonuses/PerfectBonus/PerfectBonusScore var text_3d = null func _notification(what: int) -> void: match what: NOTIFICATION_WM_FOCUS_OUT: $AnimationPlayer.playback_active = false NOTIFICATION_WM_FOCUS_IN: $AnimationPlayer.playback_active = true func _ready() -> void: var palette = load("res://graphics/player/palettes/%s.tex" % Game.current_palette) $"%ArrowBonus".material.set_shader_param("palette", palette) # easy indicator if Game.difficulty == Game.Difficulty.SWEET: $EasyIndicator.visible = true else: $EasyIndicator.visible = false #preload final score text_3d = Text3D.instance() text_3d.anim = "final score" yield(get_tree(), "idle_frame") self.add_child(text_3d) text_3d.animation_player.set_speed_scale(0) Fade.fade_in(Options.transition_speed_secs) # fill in shard names var level: LevelEntry = LevelData.levels[Game.current_level] for i in 5: var shard = shards.get_child(i) shard.get_node("Title").text = level.shard_titles[i] score.text = str("SCORE:") + "%05d" % Game.score time.text = str("TIME: ") + Game.format_time(Game.time) #Determine score bonuses collection_bonus_score.text = str("+") + str(Game.collection_bonus) time_bonus_score.text = str("+") + str(Game.time_bonus) life_bonus_score.text = str("+") + str(Game.life_bonus) arrow_bonus_score.text = str("+") + str(Game.arrows_bonus) perfect_bonus_score.text = str("+") + str(Game.perfect_bonus) func _physics_process(delta: float) -> void: if Input.is_action_just_released("ui_accept"): animation_player.set_speed_scale(4) func show_final_score(): animation_player.set_speed_scale(2) text_3d.animation_player.set_speed_scale(1) func _on_AnimationPlayer_animation_finished(anim_name): if anim_name != "results": return if Game.marathon_mode: Game.current_level += 1 if Game.current_level > LevelData.marathon_end: Fade.fade_out(Options.transition_speed_secs) yield(Fade, "fade_finished") SceneManager.change_scene(load("res://menus/marathon_results.tscn").instance()) else: Game.change_map(LevelData.levels[Game.current_level].scene) return if Game.final_score > Game.old_high_score and not Debug.is_cheating and not ScoreBoard.server_host.empty(): animation_player.play("submit_score_popup") else: Fade.fade_out(Options.transition_speed_secs) yield(Fade, "fade_finished") SceneManager.change_scene(LevelSelect.instance()) func _on_YesSubmit_button_down() -> void: $"%YesSubmit".release_focus() animation_player.play("submit") var save_id = LevelData.levels[Game.current_level].save_id var entry = ScoreBoard.ScoreEntry.new(Game.final_score, int(Game.time * 1000.0), Game.difficulty) var submitted = yield(ScoreBoard.submit_score(save_id, entry), "completed") if ScoreBoard.errored or not submitted: animation_player.play("try_again") else: animation_player.play("success") func _on_NoSubmit_button_down() -> void: $"%NoSubmit".release_focus() _next_screen() func _next_screen() -> void: Fade.fade_out(Options.transition_speed_secs) yield(Fade, "fade_finished") SceneManager.change_scene(LevelSelect.instance())