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
|
tool
|
||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
export var levels = [] setget set_levels
|
export var levels: Array = [] setget set_levels
|
||||||
|
|
||||||
func set_levels(value):
|
func set_levels(value):
|
||||||
levels = value
|
levels = value
|
||||||
|
|
|
@ -24,6 +24,9 @@ onready var filled_shards: Node2D = $"%FilledShards"
|
||||||
onready var shard_title: Label = $"%ShardTitle"
|
onready var shard_title: Label = $"%ShardTitle"
|
||||||
onready var shard_arrow: Sprite = $"%ShardArrow"
|
onready var shard_arrow: Sprite = $"%ShardArrow"
|
||||||
onready var animation_player: AnimationPlayer = $AnimationPlayer
|
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:
|
func _ready() -> void:
|
||||||
Fade.fade_in(0.4)
|
Fade.fade_in(0.4)
|
||||||
|
@ -56,6 +59,22 @@ func _ready() -> void:
|
||||||
# _select_level(int(clamp(selected_level - 1, 0, LevelData.levels.size() - 1)))
|
# _select_level(int(clamp(selected_level - 1, 0, LevelData.levels.size() - 1)))
|
||||||
|
|
||||||
func _process(delta: float) -> void:
|
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
|
# make SG disappear inside of cave
|
||||||
if player_position.offset >= in_cave.offset and player_position.offset <= out_cave.offset:
|
if player_position.offset >= in_cave.offset and player_position.offset <= out_cave.offset:
|
||||||
player_sprite.visible = false
|
player_sprite.visible = false
|
||||||
|
@ -69,9 +88,13 @@ func _input(event: InputEvent) -> void:
|
||||||
animation_player.play("show_stats")
|
animation_player.play("show_stats")
|
||||||
made_selection = true
|
made_selection = true
|
||||||
elif event.is_action_pressed("ui_right"):
|
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"):
|
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
|
else: # player has selected level
|
||||||
if event.is_action_pressed("ui_accept"):
|
if event.is_action_pressed("ui_accept"):
|
||||||
Game.current_level = selected_level
|
Game.current_level = selected_level
|
||||||
|
@ -105,6 +128,16 @@ func _select_level(level_id: int) -> void:
|
||||||
# initiate animation
|
# initiate animation
|
||||||
_travel_to_level(level.save_id)
|
_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:
|
func _travel_to_level(level_name: String) -> void:
|
||||||
# get path offset of target level
|
# get path offset of target level
|
||||||
var target_level = level_path.get_node(level_name)
|
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://menus/level_select_scholar.gd" type="Script" id=1]
|
||||||
[ext_resource path="res://graphics/level_select/world_map.png" type="Texture" id=2]
|
[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://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://ui/2ndpuberty_outline.tres" type="Material" id=6]
|
||||||
[ext_resource path="res://shaders/wibble_wobble.gdshader" type="Shader" id=7]
|
[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://shaders/1px_border.gdshader" type="Shader" id=9]
|
||||||
[ext_resource path="res://graphics/collectibles/shard.png" type="Texture" id=10]
|
[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://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]
|
[ext_resource path="res://graphics/hud/levelselect_arrow.png" type="Texture" id=14]
|
||||||
|
|
||||||
[sub_resource type="Curve2D" id=1]
|
[sub_resource type="Curve2D" id=1]
|
||||||
|
@ -203,14 +205,15 @@ offset = 300.0
|
||||||
[node name="CurrentLevel" type="HBoxContainer" parent="."]
|
[node name="CurrentLevel" type="HBoxContainer" parent="."]
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
margin_bottom = 16.0
|
margin_bottom = 16.0
|
||||||
|
theme = ExtResource( 4 )
|
||||||
alignment = 1
|
alignment = 1
|
||||||
|
|
||||||
[node name="BackArrow" type="TextureRect" parent="CurrentLevel"]
|
[node name="BackArrow" type="TextureRect" parent="CurrentLevel"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
material = SubResource( 2 )
|
material = SubResource( 2 )
|
||||||
margin_left = 72.0
|
margin_left = 61.0
|
||||||
margin_top = 4.0
|
margin_top = 4.0
|
||||||
margin_right = 78.0
|
margin_right = 67.0
|
||||||
margin_bottom = 12.0
|
margin_bottom = 12.0
|
||||||
size_flags_vertical = 4
|
size_flags_vertical = 4
|
||||||
texture = ExtResource( 5 )
|
texture = ExtResource( 5 )
|
||||||
|
@ -219,9 +222,9 @@ flip_h = true
|
||||||
[node name="LevelTitle" type="Label" parent="CurrentLevel"]
|
[node name="LevelTitle" type="Label" parent="CurrentLevel"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
material = ExtResource( 6 )
|
material = ExtResource( 6 )
|
||||||
margin_left = 82.0
|
margin_left = 71.0
|
||||||
margin_top = 3.0
|
margin_top = 3.0
|
||||||
margin_right = 173.0
|
margin_right = 162.0
|
||||||
margin_bottom = 13.0
|
margin_bottom = 13.0
|
||||||
theme = ExtResource( 4 )
|
theme = ExtResource( 4 )
|
||||||
text = "Verdant Hills"
|
text = "Verdant Hills"
|
||||||
|
@ -230,14 +233,48 @@ valign = 1
|
||||||
|
|
||||||
[node name="ForwardArrow" type="TextureRect" parent="CurrentLevel"]
|
[node name="ForwardArrow" type="TextureRect" parent="CurrentLevel"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
visible = false
|
||||||
material = SubResource( 3 )
|
material = SubResource( 3 )
|
||||||
margin_left = 177.0
|
margin_left = 164.0
|
||||||
margin_top = 4.0
|
margin_top = 4.0
|
||||||
margin_right = 183.0
|
margin_right = 170.0
|
||||||
margin_bottom = 12.0
|
margin_bottom = 12.0
|
||||||
size_flags_vertical = 4
|
size_flags_vertical = 4
|
||||||
texture = ExtResource( 5 )
|
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="."]
|
[node name="LevelStats" type="Panel" parent="."]
|
||||||
visible = false
|
visible = false
|
||||||
margin_left = 40.0
|
margin_left = 40.0
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue