enforce level progression

This commit is contained in:
Haze Weathers 2024-02-12 01:00:08 -05:00
parent 21181a24c8
commit c28e105e78
3 changed files with 80 additions and 10 deletions

View file

@ -24,6 +24,9 @@ onready var filled_shards: Node2D = $"%FilledShards"
onready var shard_title: Label = $"%ShardTitle"
onready var shard_arrow: Sprite = $"%ShardArrow"
onready var animation_player: AnimationPlayer = $AnimationPlayer
onready var boss_block: TextureRect = $"%BossBlock"
onready var shards_block: HBoxContainer = $"%ShardsBlock"
onready var shards_needed: Label = $"%ShardsNeeded"
func _ready() -> void:
Fade.fade_in(0.4)
@ -56,6 +59,22 @@ func _ready() -> void:
# _select_level(int(clamp(selected_level - 1, 0, LevelData.levels.size() - 1)))
func _process(delta: float) -> void:
forward_arrow.visible = true
boss_block.visible = false
shards_block.visible = false
if selected_level + 1 < LevelData.levels.size():
var save := Save.current_file
var level: LevelEntry = LevelData.levels[selected_level + 1]
var shards := save.get_total_shards()
if save.get_total_shards() < level.shards_required:
forward_arrow.visible = false
boss_block.visible = false
shards_block.visible = true
shards_needed.text = str(level.shards_required)
if level.boss_required != "" and not save.levels[level.boss_required].completed:
forward_arrow.visible = false
shards_block.visible = false
boss_block.visible = true
# make SG disappear inside of cave
if player_position.offset >= in_cave.offset and player_position.offset <= out_cave.offset:
player_sprite.visible = false
@ -69,9 +88,13 @@ func _input(event: InputEvent) -> void:
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)))
var level = int(clamp(selected_level + 1, 0, LevelData.levels.size() - 1))
if _can_travel(level):
_select_level(level)
elif event.is_action_pressed("ui_left"):
_select_level(int(clamp(selected_level - 1, 0, LevelData.levels.size() - 1)))
var level = int(clamp(selected_level - 1, 0, LevelData.levels.size() - 1))
if _can_travel(level):
_select_level(level)
else: # player has selected level
if event.is_action_pressed("ui_accept"):
Game.current_level = selected_level
@ -105,6 +128,16 @@ func _select_level(level_id: int) -> void:
# initiate animation
_travel_to_level(level.save_id)
func _can_travel(index: int) -> bool:
var save := Save.current_file
var level: LevelEntry = LevelData.levels[index]
var shards := save.get_total_shards()
if save.get_total_shards() < level.shards_required:
return false
if level.boss_required != "":
return save.levels[level.boss_required].completed
return true
func _travel_to_level(level_name: String) -> void:
# get path offset of target level
var target_level = level_path.get_node(level_name)