initial work on level select statistics popup
This commit is contained in:
parent
cf54fd2eca
commit
a5cea08767
2 changed files with 341 additions and 12 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue