hero-mark-2/menus/results.gd

105 lines
3.6 KiB
GDScript

extends Node
const Text3D = preload("res://objects/hud/3d_text.tscn")
const SubmitScore = preload("res://menus/submit_score.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)
#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:
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())