added leaderboard drop down menu and started on leaderboard test

This commit is contained in:
derek
2025-02-27 17:06:49 -06:00
parent 46820fed89
commit 096b505cfa
8 changed files with 145 additions and 42 deletions

View File

@@ -1,9 +1,16 @@
[gd_scene load_steps=5 format=3 uid="uid://sa1d1rftyn87"] [gd_scene load_steps=9 format=3 uid="uid://sa1d1rftyn87"]
[ext_resource type="Script" path="res://scripts/main_menu.gd" id="1_haaol"] [ext_resource type="Script" path="res://scripts/main_menu.gd" id="1_haaol"]
[ext_resource type="PackedScene" uid="uid://dpootbr7qgac1" path="res://Tools/playlist_generator.tscn" id="2_2rg1o"] [ext_resource type="PackedScene" uid="uid://dpootbr7qgac1" path="res://Tools/playlist_generator.tscn" id="2_2rg1o"]
[ext_resource type="Theme" uid="uid://clek42ofxr45f" path="res://DefaultTheme.tres" id="2_3fflq"] [ext_resource type="Theme" uid="uid://clek42ofxr45f" path="res://DefaultTheme.tres" id="2_3fflq"]
[ext_resource type="FontFile" uid="uid://d2h2tjhxiv5wo" path="res://assets/fonts/White On Black.ttf" id="2_ac165"] [ext_resource type="FontFile" uid="uid://d2h2tjhxiv5wo" path="res://assets/fonts/White On Black.ttf" id="2_ac165"]
[ext_resource type="Theme" uid="uid://buma708jpxqrn" path="res://Clean_theme.tres" id="4_ydrbj"]
[ext_resource type="Shader" path="res://assets/Shaders/blur.gdshader" id="6_x75tm"]
[ext_resource type="Texture2D" uid="uid://bt6utik8unkxa" path="res://assets/Textures/ObjectTextures/money.png" id="7_ia0hc"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_htvli"]
shader = ExtResource("6_x75tm")
shader_parameter/strength = 1.0
[node name="MainMenu" type="Control" groups=["ui"]] [node name="MainMenu" type="Control" groups=["ui"]]
layout_mode = 3 layout_mode = 3
@@ -44,16 +51,17 @@ layout_mode = 2
size_flags_vertical = 3 size_flags_vertical = 3
alignment = 1 alignment = 1
[node name="leaderboard_name" type="TextEdit" parent="MarginContainer/VBoxContainer/HBoxContainer"] [node name="OptionButton" type="OptionButton" parent="MarginContainer/VBoxContainer/HBoxContainer"]
clip_contents = false
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3
theme = ExtResource("2_3fflq") theme = ExtResource("2_3fflq")
theme_override_font_sizes/font_size = 51 selected = 0
placeholder_text = "Leaderboard name" item_count = 1
popup/item_0/text = "Global"
[node name="Confirmed" type="CheckButton" parent="MarginContainer/VBoxContainer/HBoxContainer"] [node name="Add Leaderboard" type="Button" parent="MarginContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2 layout_mode = 2
theme = ExtResource("4_ydrbj")
text = "+"
[node name="Continue" type="Button" parent="MarginContainer/VBoxContainer"] [node name="Continue" type="Button" parent="MarginContainer/VBoxContainer"]
layout_mode = 2 layout_mode = 2
@@ -67,7 +75,54 @@ theme_override_fonts/font = ExtResource("2_ac165")
theme_override_font_sizes/font_size = 150 theme_override_font_sizes/font_size = 150
text = "exit" text = "exit"
[connection signal="text_changed" from="MarginContainer/VBoxContainer/HBoxContainer/leaderboard_name" to="." method="_on_leaderboard_name_text_changed"] [node name="Add Leaderboard Menu" type="Control" parent="."]
[connection signal="toggled" from="MarginContainer/VBoxContainer/HBoxContainer/Confirmed" to="." method="_on_confirmed_toggled"] visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="ColorRect" type="ColorRect" parent="Add Leaderboard Menu"]
material = SubResource("ShaderMaterial_htvli")
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0, 0, 0, 0.737255)
[node name="MarginContainer" type="MarginContainer" parent="Add Leaderboard Menu"]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -300.0
offset_top = -75.0
offset_right = 300.0
offset_bottom = 75.0
grow_horizontal = 2
grow_vertical = 2
[node name="HBoxContainer" type="HBoxContainer" parent="Add Leaderboard Menu/MarginContainer"]
layout_mode = 2
[node name="TextEdit" type="TextEdit" parent="Add Leaderboard Menu/MarginContainer/HBoxContainer"]
custom_minimum_size = Vector2(800, 0)
layout_mode = 2
size_flags_vertical = 3
theme = ExtResource("2_3fflq")
theme_override_font_sizes/font_size = 41
placeholder_text = "Leaderboard Name"
[node name="Button" type="Button" parent="Add Leaderboard Menu/MarginContainer/HBoxContainer"]
layout_mode = 2
icon = ExtResource("7_ia0hc")
[connection signal="pressed" from="MarginContainer/VBoxContainer/HBoxContainer/Add Leaderboard" to="." method="_on_add_leaderboard_pressed"]
[connection signal="pressed" from="MarginContainer/VBoxContainer/Continue" to="." method="_on_continue_pressed"] [connection signal="pressed" from="MarginContainer/VBoxContainer/Continue" to="." method="_on_continue_pressed"]
[connection signal="pressed" from="MarginContainer/VBoxContainer/Exit" to="." method="_on_exit_pressed"] [connection signal="pressed" from="MarginContainer/VBoxContainer/Exit" to="." method="_on_exit_pressed"]

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -47,6 +47,7 @@ func _ready():
GameGlobals.health = gamemode.start_health GameGlobals.health = gamemode.start_health
#LOAD DATA #LOAD DATA
SaveLoad.load_persistent_data()
SaveLoad.load_user_data() SaveLoad.load_user_data()
if SaveLoad.data_cleared or !gamemode.load_save: if SaveLoad.data_cleared or !gamemode.load_save:
@@ -152,7 +153,6 @@ func die():
if GameGlobals.player_deaths: if GameGlobals.player_deaths:
GameGlobals.player_deaths += 1 GameGlobals.player_deaths += 1
SaveLoad.save_user_data() SaveLoad.save_user_data()
SaveLoad.clear_save_game_data()
var deadmsg = DEAD_ANNOUNCE.instantiate() var deadmsg = DEAD_ANNOUNCE.instantiate()
get_parent().add_child(deadmsg) get_parent().add_child(deadmsg)
var instance_dead = dead_player.instantiate() var instance_dead = dead_player.instantiate()
@@ -253,4 +253,6 @@ func pickup_spawn(randomized):
func save_quit(): func save_quit():
SignalBus.emit_signal("player_exiting_tree") SignalBus.emit_signal("player_exiting_tree")
SaveLoad.save_game_data(self.get_name()) SaveLoad.save_game_data(self.get_name())
SaveLoad.save_user_data()
SaveLoad.save_persistent_data()
get_tree().quit() get_tree().quit()

View File

@@ -15,10 +15,10 @@ var current_gamemode
#Persistent Data #Persistent Data
var user_id = 0 var user_id = 0
var current_user_leaderboards = ["global"] var last_leaderboard_id = 0
var all_user_leaderboards = [] var user_names = ["Profile 1","Profile 2","Profile 3","Profile 4","Profile 5"]
var all_user_leaderboards = [["Global"]]
var leaderboard_name = "Test"
var playlist_test var playlist_test
#Player Stats #Player Stats

View File

@@ -3,8 +3,12 @@ extends Node
var last_scene var last_scene
@onready var playlist_generator: Node = $PlaylistGenerator @onready var playlist_generator: Node = $PlaylistGenerator
@onready var leaderboard_name: TextEdit = $MarginContainer/VBoxContainer/HBoxContainer/leaderboard_name
@onready var confirmed: CheckButton = $MarginContainer/VBoxContainer/HBoxContainer/Confirmed @onready var continue_button: Button = $MarginContainer/VBoxContainer/Continue
@onready var option_button: OptionButton = $MarginContainer/VBoxContainer/HBoxContainer/OptionButton
@onready var add_leaderboard: Button = $"MarginContainer/VBoxContainer/HBoxContainer/Add Leaderboard"
@onready var add_leaderboard_menu: Control = $"Add Leaderboard Menu"
func _enter_tree() -> void: func _enter_tree() -> void:
SaveLoad.load_persistent_data() SaveLoad.load_persistent_data()
@@ -12,18 +16,18 @@ func _enter_tree() -> void:
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready() -> void: func _ready() -> void:
confirmed.button_pressed = true
leaderboard_name.text = GameGlobals.leaderboard_name
playlist_generator.load_playlist() playlist_generator.load_playlist()
print("leaderboard : ",GameGlobals.leaderboard_name) option_button.clear()
for i in GameGlobals.all_user_leaderboards[GameGlobals.user_id]:
option_button.add_item(i)
option_button.selected = GameGlobals.last_leaderboard_id
continue_text_check()
func _on_continue_pressed() -> void: func _on_continue_pressed() -> void:
var level var level
var load_to_gamemode var load_to_gamemode
if GameGlobals.leaderboard_name != leaderboard_name.text:
GameGlobals.leaderboard_name = leaderboard_name.text
playlist_generator.load_playlist() playlist_generator.load_playlist()
@@ -36,14 +40,20 @@ func _on_continue_pressed() -> void:
load_to_gamemode = GameGlobals.current_gamemode load_to_gamemode = GameGlobals.current_gamemode
SaveLoad.save_persistent_data() SaveLoad.save_persistent_data()
SaveLoad.load_user_data()
SaveLoad.save_user_data()
get_tree().change_scene_to_file(level) get_tree().change_scene_to_file(level)
print("LEVEL : ",GameGlobals.current_level) print("LEVEL : ",GameGlobals.current_level)
func _on_exit_pressed() -> void: func _on_exit_pressed() -> void:
get_tree().quit() get_tree().quit()
func continue_text_check():
if SaveLoad.check_user_data_exists():
continue_button.text = "Continue"
else:
continue_button.text = "New Game"
func _on_leaderboard_name_text_changed() -> void:
GameGlobals.leaderboard_name = leaderboard_name.text func _on_add_leaderboard_pressed() -> void:
confirmed.button_pressed = false add_leaderboard_menu.visible = true

View File

@@ -24,7 +24,7 @@ func _process(delta: float) -> void:
func generate_playlist() -> void: func generate_playlist() -> void:
var playlist_name = only_valid_chars(GameGlobals.leaderboard_name) var playlist_name = only_valid_chars(GameGlobals.all_user_leaderboards[GameGlobals.user_id][GameGlobals.last_leaderboard_id])
var playlist = [] var playlist = []
print("PLAYLIST CREATED FOR THE : ",playlist_name) print("PLAYLIST CREATED FOR THE : ",playlist_name)
for i in rounds: for i in rounds:
@@ -55,15 +55,15 @@ func only_valid_chars(input_string: String) -> String:
return valid_chars return valid_chars
func save_playlist(playlist): func save_playlist(playlist):
var playlist_name = str(only_valid_chars(GameGlobals.leaderboard_name)) var playlist_name = str(only_valid_chars(GameGlobals.all_user_leaderboards[GameGlobals.user_id][GameGlobals.last_leaderboard_id]))
var playlist_path : String = "user://"+ playlist_name + "_playlist.save" var playlist_path : String = "user://"+ playlist_name + "_playlist.save"
var file = FileAccess.open(playlist_path, FileAccess.WRITE) var file = FileAccess.open(playlist_path, FileAccess.WRITE)
file.store_var(only_valid_chars(GameGlobals.leaderboard_name)) file.store_var(only_valid_chars(GameGlobals.all_user_leaderboards[GameGlobals.user_id][GameGlobals.last_leaderboard_id]))
file.store_var(playlist) file.store_var(playlist)
file.close() file.close()
func load_playlist(): func load_playlist():
var playlist_path : String = "user://" + str(only_valid_chars(GameGlobals.leaderboard_name)) + "_playlist.save" var playlist_path : String = "user://" + str(only_valid_chars(GameGlobals.all_user_leaderboards[GameGlobals.user_id][GameGlobals.last_leaderboard_id])) + "_playlist.save"
if FileAccess.file_exists(playlist_path): if FileAccess.file_exists(playlist_path):
var file = FileAccess.open(playlist_path, FileAccess.READ) var file = FileAccess.open(playlist_path, FileAccess.READ)
var key = file.get_var() var key = file.get_var()

View File

@@ -13,27 +13,41 @@ var current_ammo
var reserve_ammo var reserve_ammo
## SAVE DATA PATHS ## SAVE DATA PATHS
var persistent_data_save_path = "user://persistent_data.save"
func _ready() -> void: func _ready() -> void:
SignalBus.shot_fired.connect(shot_fired) SignalBus.shot_fired.connect(shot_fired)
func save_persistent_data(): func save_persistent_data():
var file = FileAccess.open("user://persistent_data.save", FileAccess.WRITE) var file = FileAccess.open(persistent_data_save_path, FileAccess.WRITE)
file.store_var(GameGlobals.user_id) file.store_var(GameGlobals.user_id)
var all_user_leaderboards_file = [] file.store_var(GameGlobals.last_leaderboard_id)
for i in GameGlobals.all_user_leaderboards: file.store_var(GameGlobals.user_names)
all_user_leaderboards_file.append(GameGlobals.current_user_leaderboards) file.store_var(GameGlobals.all_user_leaderboards)
file.close() file.close()
func load_persistent_data(): func load_persistent_data():
var file = FileAccess.open("user://persistent_data.save", FileAccess.WRITE) if FileAccess.file_exists(persistent_data_save_path):
GameGlobals.user_id = file.get_var() var file = FileAccess.open(persistent_data_save_path, FileAccess.READ)
GameGlobals.all_user_leaderboards = file.get_var()
file.close() var user_id = file.get_var()
var last_leaderboard_id = file.get_var()
var user_names = file.get_var()
var all_user_leaderboards = file.get_var()
GameGlobals.user_id = str(user_id)
GameGlobals.last_leaderboard_id = str(last_leaderboard_id)
GameGlobals.user_names = user_names
GameGlobals.all_user_leaderboards = all_user_leaderboards
file.close()
else:
print("No file found...")
func save_user_data(): func save_user_data():
var user_save_path = str("user://user_",GameGlobals.user_id,"_data.save") var user_save_path = str("user://user_",str(GameGlobals.user_id),"_",str(GameGlobals.leaderboard_name),"_leaderboard","_data.save")
var file = FileAccess.open(user_save_path, FileAccess.WRITE) var file = FileAccess.open(user_save_path, FileAccess.WRITE)
#cache data before saving and creating checksum in case it changes between data saving and checksum generating #cache data before saving and creating checksum in case it changes between data saving and checksum generating
@@ -65,12 +79,19 @@ func save_user_data():
file.close() file.close()
func check_user_data_exists():
var user_save_path = str("user://user_",str(GameGlobals.user_id),"_",str(GameGlobals.all_user_leaderboards[GameGlobals.user_id][GameGlobals.last_leaderboard_id]),"_leaderboard","_data.save")
if FileAccess.file_exists(user_save_path):
return true
else:
return false
func load_user_data(): func load_user_data():
var user_save_path = str("user://user_",GameGlobals.user_id,"_data.save") var user_save_path = str("user://user_",str(GameGlobals.user_id),"_",str(GameGlobals.all_user_leaderboards[GameGlobals.user_id][GameGlobals.last_leaderboard_id]),"_leaderboard","_data.save")
if FileAccess.file_exists(user_save_path): if FileAccess.file_exists(user_save_path):
var file = FileAccess.open(user_save_path, FileAccess.READ) var file = FileAccess.open(user_save_path, FileAccess.READ)
GameGlobals.last_hit_path = file.get_var() GameGlobals.last_hit_path = file.get_var()
GameGlobals.leaderboard_name = file.get_var() var file_leaderboard_name = file.get_var()
GameGlobals.current_level = str(file.get_var()) GameGlobals.current_level = str(file.get_var())
var money = set_nulls_zero(file.get_var()) var money = set_nulls_zero(file.get_var())
var deposited_money = set_nulls_zero(file.get_var()) var deposited_money = set_nulls_zero(file.get_var())
@@ -82,6 +103,12 @@ func load_user_data():
var held_guns_encoded = file.get_var() var held_guns_encoded = file.get_var()
GameGlobals.money = money
GameGlobals.deposited_money = deposited_money
GameGlobals.health = health
GameGlobals.high_score = high_score
GameGlobals.player_deaths = player_deaths
GameGlobals.shots_fired = shots_fired
GameGlobals.held_guns = load_resource_path(held_guns_encoded) GameGlobals.held_guns = load_resource_path(held_guns_encoded)
GameGlobals.gun_ammo = file.get_var() GameGlobals.gun_ammo = file.get_var()
GameGlobals.ammo_reserve = file.get_var() GameGlobals.ammo_reserve = file.get_var()
@@ -92,7 +119,7 @@ func load_user_data():
var checksum = file.get_var() var checksum = file.get_var()
print("Checksum : ",checksum) print("Checksum : ",checksum)
var check_data = [user_save_path,GameGlobals.leaderboard_name,money,deposited_money,health,high_score,player_deaths,shots_fired] var check_data = [user_save_path,file_leaderboard_name,money,deposited_money,health,high_score,player_deaths,shots_fired]
print("CHECK DATA : ",check_data) print("CHECK DATA : ",check_data)
print("CHECKSUM CALC : ",HelperFuncs.checksum(check_data)) print("CHECKSUM CALC : ",HelperFuncs.checksum(check_data))
file.close() file.close()
@@ -103,6 +130,16 @@ func load_user_data():
print("DATA NOT VALID") print("DATA NOT VALID")
else: else:
print("no data saved...") print("no data saved...")
GameGlobals.money = 0
GameGlobals.deposited_money = 0
GameGlobals.health = 10
GameGlobals.high_score = 0
GameGlobals.player_deaths = 0
GameGlobals.shots_fired = 0
GameGlobals.held_guns = []
GameGlobals.gun_ammo = {}
GameGlobals.ammo_reserve = {}
GameGlobals.current_gun_index = 0
func save_game_data(level_name): func save_game_data(level_name):
@@ -130,7 +167,6 @@ func save_game_data(level_name):
file.store_line(json_string) file.store_line(json_string)
file.close() file.close()
save_persistent_data()
func check_save_game_exists(level_name): func check_save_game_exists(level_name):
var game_save_path = str("user://",GameGlobals.leaderboard_name,"_",level_name,"_gamesave.save") var game_save_path = str("user://",GameGlobals.leaderboard_name,"_",level_name,"_gamesave.save")