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
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue