initial work on level select statistics popup

This commit is contained in:
Haze Weathers 2023-10-11 13:27:34 -04:00
parent cf54fd2eca
commit a5cea08767
2 changed files with 341 additions and 12 deletions

View file

@ -3,6 +3,8 @@ extends Node
export var travel_time: float = 1.0
var selected_level: int = 0
var made_selection: bool = false
var selected_shard: int = 0
var tween: SceneTreeTween = null
var hop_tween: SceneTreeTween = null
@ -14,6 +16,14 @@ onready var level_title: Label = $"%LevelTitle"
onready var forward_arrow: TextureRect = $"%ForwardArrow"
onready var in_cave: PathFollow2D = $"%InCave"
onready var out_cave: PathFollow2D = $"%OutCave"
onready var score_any: Label = $"%ScoreAny"
onready var time_any: Label = $"%TimeAny"
onready var score_100: Label = $"%Score100"
onready var time_100: Label = $"%Time100"
onready var filled_shards: Node2D = $"%FilledShards"
onready var shard_title: Label = $"%ShardTitle"
onready var shard_arrow: Sprite = $"%ShardArrow"
onready var animation_player: AnimationPlayer = $AnimationPlayer
func _ready() -> void:
Fade.fade_in(0.4)
@ -35,22 +45,49 @@ func _ready() -> void:
# elif Input.is_action_just_pressed("ui_left"):
# _select_level(int(clamp(selected_level - 1, 0, LevelData.levels.size() - 1)))
func _process(delta: float) -> void:
# load selected map
if Input.is_action_just_pressed("ui_accept"):
Game.current_level = selected_level
Game.change_map(LevelData.levels[selected_level].scene)
elif Input.is_action_just_pressed("ui_right"):
_select_level(int(clamp(selected_level + 1, 0, LevelData.levels.size() - 1)))
elif Input.is_action_just_pressed("ui_left"):
_select_level(int(clamp(selected_level - 1, 0, LevelData.levels.size() - 1)))
#func _process(delta: float) -> void:
# # load selected map
# if Input.is_action_just_pressed("ui_accept"):
# Game.current_level = selected_level
# Game.change_map(LevelData.levels[selected_level].scene)
# elif Input.is_action_just_pressed("ui_right"):
# _select_level(int(clamp(selected_level + 1, 0, LevelData.levels.size() - 1)))
# elif Input.is_action_just_pressed("ui_left"):
# _select_level(int(clamp(selected_level - 1, 0, LevelData.levels.size() - 1)))
func _process(delta: float) -> void:
# make SG disappear inside of cave
if player_position.offset >= in_cave.offset and player_position.offset <= out_cave.offset:
player_sprite.visible = false
else:
player_sprite.visible = true
func _input(event: InputEvent) -> void:
if not made_selection: # player is walking around
if event.is_action_pressed("ui_accept"):
_update_stats()
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)))
elif event.is_action_pressed("ui_left"):
_select_level(int(clamp(selected_level - 1, 0, LevelData.levels.size() - 1)))
else: # player has selected level
if event.is_action_pressed("ui_accept"):
Game.current_level = selected_level
Game.change_map(LevelData.levels[selected_level].scene)
elif event.is_action_pressed("ui_cancel"):
animation_player.play("hide_stats")
made_selection = false
elif event.is_action_pressed("ui_right"):
selected_shard = posmod(selected_shard + 1, 8)
shard_title.text = LevelData.levels[selected_level].shard_titles[selected_shard]
shard_arrow.position.x = filled_shards.get_child(selected_shard).position.x
elif event.is_action_pressed("ui_left"):
selected_shard = posmod(selected_shard - 1, 8)
shard_title.text = LevelData.levels[selected_level].shard_titles[selected_shard]
shard_arrow.position.x = filled_shards.get_child(selected_shard).position.x
func _select_level(level_id: int) -> void:
var level = LevelData.levels[level_id]
selected_level = level_id
@ -97,3 +134,19 @@ func _travel_to_level(level_name: String) -> void:
# kill other animation
tween.tween_callback(hop_tween, "kill")
tween.tween_property(player_sprite, "position:y", -2.0, 0.0)
func _update_stats() -> void:
# fill in level panel information
var save_id = LevelData.levels[selected_level].save_id
var save_data: Save.LevelSaveData = Save.current_file.levels[save_id]
score_any.text = "%05d" % save_data.score_any
time_any.text = Game.format_time(save_data.time_any)
score_100.text = "%05d" % save_data.score_100
time_100.text = Game.format_time(save_data.time_100)
var shards = filled_shards.get_children()
print(save_data.shards_collected)
for i in 8:
shards[i].visible = save_data.shards_collected[i]
selected_shard = 0
shard_title.text = LevelData.levels[selected_level].shard_titles[selected_shard]
shard_arrow.position.x = filled_shards.get_child(selected_shard).position.x

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=11 format=2]
[gd_scene load_steps=19 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,6 +7,10 @@
[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://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://graphics/hud/levelselect_arrow.png" type="Texture" id=14]
[sub_resource type="Curve2D" id=1]
_data = {
@ -27,12 +31,100 @@ shader_param/ammount = Vector2( 2, 0 )
shader_param/offset = Vector2( 0, 0 )
shader_param/delay = Vector2( 4, 0 )
[sub_resource type="ShaderMaterial" id=5]
shader = ExtResource( 9 )
shader_param/border_color = Color( 0, 0, 0, 1 )
shader_param/border_corners = false
[sub_resource type="Animation" id=6]
length = 0.001
tracks/0/type = "value"
tracks/0/path = NodePath("LevelStats:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 0,
"values": [ false ]
}
tracks/1/type = "value"
tracks/1/path = NodePath("LevelStats:rect_scale")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 0,
"values": [ Vector2( 1, 1 ) ]
}
[sub_resource type="Animation" id=8]
resource_name = "hide_stats"
length = 0.4
tracks/0/type = "value"
tracks/0/path = NodePath("LevelStats:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0.4 ),
"transitions": PoolRealArray( 1 ),
"update": 1,
"values": [ true ]
}
tracks/1/type = "value"
tracks/1/path = NodePath("LevelStats:rect_scale")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0, 0.2, 0.4 ),
"transitions": PoolRealArray( 1, 1, 1 ),
"update": 0,
"values": [ Vector2( 1, 1 ), Vector2( 1, 0.02 ), Vector2( 0, 0.02 ) ]
}
[sub_resource type="Animation" id=7]
resource_name = "show_stats"
length = 0.4
tracks/0/type = "value"
tracks/0/path = NodePath("LevelStats:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 1,
"values": [ true ]
}
tracks/1/type = "value"
tracks/1/path = NodePath("LevelStats:rect_scale")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0, 0.2, 0.4 ),
"transitions": PoolRealArray( 1, 1, 1 ),
"update": 0,
"values": [ Vector2( 0, 0.02 ), Vector2( 1, 0.02 ), Vector2( 1, 1 ) ]
}
[node name="LevelSelect" type="Node"]
script = ExtResource( 1 )
[node name="WorldMap" type="TextureRect" parent="."]
margin_right = 40.0
margin_bottom = 40.0
margin_right = 256.0
margin_bottom = 192.0
texture = ExtResource( 2 )
[node name="LevelPath" type="Path2D" parent="."]
@ -145,3 +237,187 @@ margin_right = 183.0
margin_bottom = 12.0
size_flags_vertical = 4
texture = ExtResource( 5 )
[node name="LevelStats" type="Panel" parent="."]
visible = false
margin_left = 40.0
margin_top = 45.0
margin_right = 216.0
margin_bottom = 147.0
grow_horizontal = 2
grow_vertical = 2
rect_min_size = Vector2( 176, 102 )
rect_pivot_offset = Vector2( 88, 51 )
theme = ExtResource( 4 )
[node name="HighScoreLabel" type="Label" parent="LevelStats"]
material = ExtResource( 6 )
margin_left = 16.0
margin_top = 16.0
margin_right = 160.0
margin_bottom = 26.0
theme = ExtResource( 4 )
text = "High SCORE:"
align = 1
[node name="Any" type="Label" parent="LevelStats"]
material = ExtResource( 6 )
margin_left = 39.0
margin_top = 27.0
margin_right = 67.0
margin_bottom = 37.0
theme = ExtResource( 4 )
text = "any%"
align = 1
[node name="ScoreAny" type="Label" parent="LevelStats/Any"]
unique_name_in_owner = true
use_parent_material = true
margin_top = 13.0
margin_right = 28.0
margin_bottom = 23.0
text = "0000"
[node name="TimeAny" type="Label" parent="LevelStats/Any"]
unique_name_in_owner = true
use_parent_material = true
margin_left = -11.0
margin_top = 26.0
margin_right = 38.0
margin_bottom = 36.0
text = "0:00.00"
[node name="100" type="Label" parent="LevelStats"]
material = ExtResource( 6 )
margin_left = 102.0
margin_top = 27.0
margin_right = 130.0
margin_bottom = 37.0
theme = ExtResource( 4 )
text = "100%"
align = 1
[node name="Score100" type="Label" parent="LevelStats/100"]
unique_name_in_owner = true
use_parent_material = true
margin_top = 13.0
margin_right = 28.0
margin_bottom = 23.0
text = "0000"
[node name="Time100" type="Label" parent="LevelStats/100"]
unique_name_in_owner = true
use_parent_material = true
margin_left = -11.0
margin_top = 26.0
margin_right = 38.0
margin_bottom = 36.0
text = "0:00.00"
[node name="ShardTitle" type="Label" parent="LevelStats"]
unique_name_in_owner = true
material = ExtResource( 6 )
margin_left = 3.0
margin_top = 89.0
margin_right = 173.0
margin_bottom = 99.0
theme = ExtResource( 4 )
text = "AAAAAAAAAAAAAAAAAAAAAAAA"
align = 1
[node name="EmptyShards" type="Node2D" parent="LevelStats"]
position = Vector2( -40, -35 )
[node name="EmptyShard1" type="Sprite" parent="LevelStats/EmptyShards"]
modulate = Color( 0, 0, 0, 1 )
material = SubResource( 5 )
position = Vector2( 76, 118 )
texture = ExtResource( 10 )
[node name="EmptyShard2" type="Sprite" parent="LevelStats/EmptyShards"]
modulate = Color( 0, 0, 0, 1 )
material = SubResource( 5 )
position = Vector2( 91, 118 )
texture = ExtResource( 10 )
[node name="EmptyShard3" type="Sprite" parent="LevelStats/EmptyShards"]
modulate = Color( 0, 0, 0, 1 )
material = SubResource( 5 )
position = Vector2( 106, 118 )
texture = ExtResource( 10 )
[node name="EmptyShard4" type="Sprite" parent="LevelStats/EmptyShards"]
modulate = Color( 0, 0, 0, 1 )
material = SubResource( 5 )
position = Vector2( 121, 118 )
texture = ExtResource( 10 )
[node name="EmptyShard5" type="Sprite" parent="LevelStats/EmptyShards"]
modulate = Color( 0, 0, 0, 1 )
material = SubResource( 5 )
position = Vector2( 136, 118 )
texture = ExtResource( 10 )
[node name="EmptyShard6" type="Sprite" parent="LevelStats/EmptyShards"]
modulate = Color( 0, 0, 0, 1 )
material = SubResource( 5 )
position = Vector2( 151, 118 )
texture = ExtResource( 10 )
[node name="EmptyShard7" type="Sprite" parent="LevelStats/EmptyShards"]
modulate = Color( 0, 0, 0, 1 )
material = SubResource( 5 )
position = Vector2( 166, 118 )
texture = ExtResource( 10 )
[node name="EmptyShard8" type="Sprite" parent="LevelStats/EmptyShards"]
modulate = Color( 0, 0, 0, 1 )
material = SubResource( 5 )
position = Vector2( 181, 118 )
texture = ExtResource( 10 )
[node name="FilledShards" type="Node2D" parent="LevelStats"]
unique_name_in_owner = true
[node name="Shard1" parent="LevelStats/FilledShards" instance=ExtResource( 11 )]
visible = false
position = Vector2( 31, 80 )
[node name="Shard2" parent="LevelStats/FilledShards" instance=ExtResource( 11 )]
visible = false
position = Vector2( 46, 80 )
[node name="Shard3" parent="LevelStats/FilledShards" instance=ExtResource( 11 )]
visible = false
position = Vector2( 61, 80 )
[node name="Shard4" parent="LevelStats/FilledShards" instance=ExtResource( 11 )]
visible = false
position = Vector2( 76, 80 )
[node name="Shard5" parent="LevelStats/FilledShards" instance=ExtResource( 11 )]
visible = false
position = Vector2( 91, 80 )
[node name="Shard6" parent="LevelStats/FilledShards" instance=ExtResource( 11 )]
visible = false
position = Vector2( 106, 80 )
[node name="Shard7" parent="LevelStats/FilledShards" instance=ExtResource( 11 )]
visible = false
position = Vector2( 121, 80 )
[node name="Shard8" parent="LevelStats/FilledShards" instance=ExtResource( 11 )]
visible = false
position = Vector2( 136, 80 )
[node name="ShardArrow" type="Sprite" parent="LevelStats"]
unique_name_in_owner = true
position = Vector2( 31, 71 )
texture = ExtResource( 14 )
offset = Vector2( 5, 0 )
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
anims/RESET = SubResource( 6 )
anims/hide_stats = SubResource( 8 )
anims/show_stats = SubResource( 7 )