revo-jailbreak/maps/level_select.gd
Haze Weathers 076a91b43b level select and save improvments
- level select starts on the stage you just came from
- default time from save file is INF, so any actual time will get saved
- INF renders as "-:--:--" to indicate a time has not been set
2023-01-27 11:17:31 -05:00

86 lines
2.6 KiB
GDScript

extends Node2D
##Onreadys
#onready var levels = preload("res://maps/leveldata/levels.tres")
onready var title = $Title
onready var shard_title = $ShardTitle
onready var shard_arrow = $ShardArrow
onready var high_score_any = $HighScoreAny
onready var high_score_100 = $HighScore100
onready var levelarrow_up = $LevelArrowUp
onready var levelarrow_down = $LevelArrowDown
#Shards
onready var shards = [
$ShardGraphics/Shard,
$ShardGraphics/Shard2,
$ShardGraphics/Shard3,
$ShardGraphics/Shard4,
$ShardGraphics/Shard5,
$ShardGraphics/Shard6,
$ShardGraphics/Shard7,
$ShardGraphics/Shard8
]
##Runtime
var save = 0
var current_level = 0
var current_shard = 0
# Called when the node enters the scene tree for the first time.
func _ready():
change_current_level(Game.current_level)
Game.ac_music.stop()
func _physics_process(delta):
if Input.is_action_just_pressed("ui_up"): change_current_level(-1)
if Input.is_action_just_pressed("ui_down"): change_current_level(1)
if Input.is_action_just_pressed("ui_left"): change_current_shard(-1)
if Input.is_action_just_pressed("ui_right"): change_current_shard(1)
# get current level's data
var level = LevelData.levels[current_level]
#Draw level title
title.text = level.title
#Draw Shard Title
shard_title.text = level.shard_titles[current_shard]
#Select level
if Input.is_action_just_pressed("jump"):
Game.current_level = current_level
Game.change_map(level.scene)
func change_current_shard(amount):
if current_shard + amount != -1 && current_shard + amount != 8: #Check if in range
current_shard += amount
shard_arrow.position.x += 15 * amount
func change_current_level(amount):
#Change level
if current_level + amount >= 0 && current_level + amount < LevelData.levels.size(): #Check if in range
current_level += amount
#Show arrows or don't
if current_level == 0:
levelarrow_up.visible = false
levelarrow_down.visible = true
elif current_level == LevelData.levels.size() - 1:
levelarrow_up.visible = true
levelarrow_down.visible = false
else:
levelarrow_down.visible = true
levelarrow_up.visible = true
#Return Shard select
current_shard = 0
shard_arrow.position.x = 76
#Load new data
var save_id = LevelData.levels[current_level].save_id
var save_data = Save.get_level_data(save_id)
# set any% scores
high_score_any.text = "Any%%\n%05d\n%s" % [
save_data.score_any,
Game.timeify(save_data.time_any)
]
# set 100% scores
high_score_100.text = "100%%\n%05d\n%s" % [
save_data.score_100,
Game.timeify(save_data.time_100)
]
# set collected shards
for i in 8:
shards[i].visible = save_data.shards[i]