117 lines
4.1 KiB
GDScript
117 lines
4.1 KiB
GDScript
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):
|
|
match anim_name:
|
|
"results":
|
|
if Game.marathon_mode:
|
|
Game.current_level += 1
|
|
if Game.current_level > LevelData.marathon_end:
|
|
yield(get_tree().create_timer(6.0), "timeout")
|
|
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)
|
|
elif Game.final_score > Game.old_high_score:
|
|
animation_player.play("high_score")
|
|
else:
|
|
yield(get_tree().create_timer(6.0), "timeout")
|
|
Fade.fade_out(Options.transition_speed_secs)
|
|
yield(Fade, "fade_finished")
|
|
SceneManager.change_scene(LevelSelect.instance())
|
|
"high_score":
|
|
if not Debug.is_cheating and not ScoreBoard.server_host.empty():
|
|
animation_player.play("submit_score_popup")
|
|
else:
|
|
yield(get_tree().create_timer(5.0), "timeout")
|
|
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())
|