initial work on level select statistics popup

This commit is contained in:
Haze Weathers 2023-10-11 13:27:34 -04:00
parent cf54fd2eca
commit a5cea08767
2 changed files with 341 additions and 12 deletions

View file

@ -3,6 +3,8 @@ extends Node
export var travel_time: float = 1.0
var selected_level: int = 0
var made_selection: bool = false
var selected_shard: int = 0
var tween: SceneTreeTween = null
var hop_tween: SceneTreeTween = null
@ -14,6 +16,14 @@ onready var level_title: Label = $"%LevelTitle"
onready var forward_arrow: TextureRect = $"%ForwardArrow"
onready var in_cave: PathFollow2D = $"%InCave"
onready var out_cave: PathFollow2D = $"%OutCave"
onready var score_any: Label = $"%ScoreAny"
onready var time_any: Label = $"%TimeAny"
onready var score_100: Label = $"%Score100"
onready var time_100: Label = $"%Time100"
onready var filled_shards: Node2D = $"%FilledShards"
onready var shard_title: Label = $"%ShardTitle"
onready var shard_arrow: Sprite = $"%ShardArrow"
onready var animation_player: AnimationPlayer = $AnimationPlayer
func _ready() -> void:
Fade.fade_in(0.4)
@ -35,22 +45,49 @@ func _ready() -> void:
# elif Input.is_action_just_pressed("ui_left"):
# _select_level(int(clamp(selected_level - 1, 0, LevelData.levels.size() - 1)))
#func _process(delta: float) -> void:
# # load selected map
# if Input.is_action_just_pressed("ui_accept"):
# Game.current_level = selected_level
# Game.change_map(LevelData.levels[selected_level].scene)
# elif Input.is_action_just_pressed("ui_right"):
# _select_level(int(clamp(selected_level + 1, 0, LevelData.levels.size() - 1)))
# elif Input.is_action_just_pressed("ui_left"):
# _select_level(int(clamp(selected_level - 1, 0, LevelData.levels.size() - 1)))
func _process(delta: float) -> void:
# load selected map
if Input.is_action_just_pressed("ui_accept"):
Game.current_level = selected_level
Game.change_map(LevelData.levels[selected_level].scene)
elif Input.is_action_just_pressed("ui_right"):
_select_level(int(clamp(selected_level + 1, 0, LevelData.levels.size() - 1)))
elif Input.is_action_just_pressed("ui_left"):
_select_level(int(clamp(selected_level - 1, 0, LevelData.levels.size() - 1)))
# make SG disappear inside of cave
if player_position.offset >= in_cave.offset and player_position.offset <= out_cave.offset:
player_sprite.visible = false
else:
player_sprite.visible = true
func _input(event: InputEvent) -> void:
if not made_selection: # player is walking around
if event.is_action_pressed("ui_accept"):
_update_stats()
animation_player.play("show_stats")
made_selection = true
elif event.is_action_pressed("ui_right"):
_select_level(int(clamp(selected_level + 1, 0, LevelData.levels.size() - 1)))
elif event.is_action_pressed("ui_left"):
_select_level(int(clamp(selected_level - 1, 0, LevelData.levels.size() - 1)))
else: # player has selected level
if event.is_action_pressed("ui_accept"):
Game.current_level = selected_level
Game.change_map(LevelData.levels[selected_level].scene)
elif event.is_action_pressed("ui_cancel"):
animation_player.play("hide_stats")
made_selection = false
elif event.is_action_pressed("ui_right"):
selected_shard = posmod(selected_shard + 1, 8)
shard_title.text = LevelData.levels[selected_level].shard_titles[selected_shard]
shard_arrow.position.x = filled_shards.get_child(selected_shard).position.x
elif event.is_action_pressed("ui_left"):
selected_shard = posmod(selected_shard - 1, 8)
shard_title.text = LevelData.levels[selected_level].shard_titles[selected_shard]
shard_arrow.position.x = filled_shards.get_child(selected_shard).position.x
func _select_level(level_id: int) -> void:
var level = LevelData.levels[level_id]
selected_level = level_id
@ -97,3 +134,19 @@ func _travel_to_level(level_name: String) -> void:
# kill other animation
tween.tween_callback(hop_tween, "kill")
tween.tween_property(player_sprite, "position:y", -2.0, 0.0)
func _update_stats() -> void:
# fill in level panel information
var save_id = LevelData.levels[selected_level].save_id
var save_data: Save.LevelSaveData = Save.current_file.levels[save_id]
score_any.text = "%05d" % save_data.score_any
time_any.text = Game.format_time(save_data.time_any)
score_100.text = "%05d" % save_data.score_100
time_100.text = Game.format_time(save_data.time_100)
var shards = filled_shards.get_children()
print(save_data.shards_collected)
for i in 8:
shards[i].visible = save_data.shards_collected[i]
selected_shard = 0
shard_title.text = LevelData.levels[selected_level].shard_titles[selected_shard]
shard_arrow.position.x = filled_shards.get_child(selected_shard).position.x