forked from team-sg/hero-mark-2
enforce level progression
This commit is contained in:
parent
21181a24c8
commit
c28e105e78
3 changed files with 80 additions and 10 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue