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

@ -1,7 +1,7 @@
tool
extends Node
export var levels = [] setget set_levels
export var levels: Array = [] setget set_levels
func set_levels(value):
levels = value

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)

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=19 format=2]
[gd_scene load_steps=21 format=2]
[ext_resource path="res://menus/level_select_scholar.gd" type="Script" id=1]
[ext_resource path="res://graphics/level_select/world_map.png" type="Texture" id=2]
@ -7,9 +7,11 @@
[ext_resource path="res://graphics/hud/pause_arrow.png" type="Texture" id=5]
[ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=6]
[ext_resource path="res://shaders/wibble_wobble.gdshader" type="Shader" id=7]
[ext_resource path="res://graphics/hud/deaths_head.png" type="Texture" id=8]
[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=9]
[ext_resource path="res://graphics/collectibles/shard.png" type="Texture" id=10]
[ext_resource path="res://objects/collectibles/shard.tscn" type="PackedScene" id=11]
[ext_resource path="res://ui/2ndpuberty_scholar_outline.fnt" type="BitmapFont" id=12]
[ext_resource path="res://graphics/hud/levelselect_arrow.png" type="Texture" id=14]
[sub_resource type="Curve2D" id=1]
@ -203,14 +205,15 @@ offset = 300.0
[node name="CurrentLevel" type="HBoxContainer" parent="."]
anchor_right = 1.0
margin_bottom = 16.0
theme = ExtResource( 4 )
alignment = 1
[node name="BackArrow" type="TextureRect" parent="CurrentLevel"]
unique_name_in_owner = true
material = SubResource( 2 )
margin_left = 72.0
margin_left = 61.0
margin_top = 4.0
margin_right = 78.0
margin_right = 67.0
margin_bottom = 12.0
size_flags_vertical = 4
texture = ExtResource( 5 )
@ -219,9 +222,9 @@ flip_h = true
[node name="LevelTitle" type="Label" parent="CurrentLevel"]
unique_name_in_owner = true
material = ExtResource( 6 )
margin_left = 82.0
margin_left = 71.0
margin_top = 3.0
margin_right = 173.0
margin_right = 162.0
margin_bottom = 13.0
theme = ExtResource( 4 )
text = "Verdant Hills"
@ -230,14 +233,48 @@ valign = 1
[node name="ForwardArrow" type="TextureRect" parent="CurrentLevel"]
unique_name_in_owner = true
visible = false
material = SubResource( 3 )
margin_left = 177.0
margin_left = 164.0
margin_top = 4.0
margin_right = 183.0
margin_right = 170.0
margin_bottom = 12.0
size_flags_vertical = 4
texture = ExtResource( 5 )
[node name="BossBlock" type="TextureRect" parent="CurrentLevel"]
unique_name_in_owner = true
visible = false
margin_left = 169.0
margin_top = 4.0
margin_right = 176.0
margin_bottom = 12.0
size_flags_vertical = 4
texture = ExtResource( 8 )
[node name="ShardsBlock" type="HBoxContainer" parent="CurrentLevel"]
unique_name_in_owner = true
margin_left = 166.0
margin_right = 195.0
margin_bottom = 16.0
[node name="Icon" type="TextureRect" parent="CurrentLevel/ShardsBlock"]
margin_top = 2.0
margin_right = 11.0
margin_bottom = 13.0
size_flags_vertical = 4
texture = ExtResource( 10 )
[node name="ShardsNeeded" type="Label" parent="CurrentLevel/ShardsBlock"]
unique_name_in_owner = true
modulate = Color( 0.933333, 0.247059, 0.247059, 1 )
margin_left = 15.0
margin_top = 3.0
margin_right = 29.0
margin_bottom = 13.0
custom_fonts/font = ExtResource( 12 )
text = "15"
[node name="LevelStats" type="Panel" parent="."]
visible = false
margin_left = 40.0