diff --git a/MainMenu.tscn b/MainMenu.tscn index f00cfe9..3486d51 100644 --- a/MainMenu.tscn +++ b/MainMenu.tscn @@ -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="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="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"]] layout_mode = 3 @@ -44,16 +51,17 @@ layout_mode = 2 size_flags_vertical = 3 alignment = 1 -[node name="leaderboard_name" type="TextEdit" parent="MarginContainer/VBoxContainer/HBoxContainer"] -clip_contents = false +[node name="OptionButton" type="OptionButton" parent="MarginContainer/VBoxContainer/HBoxContainer"] layout_mode = 2 -size_flags_horizontal = 3 theme = ExtResource("2_3fflq") -theme_override_font_sizes/font_size = 51 -placeholder_text = "Leaderboard name" +selected = 0 +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 +theme = ExtResource("4_ydrbj") +text = "+" [node name="Continue" type="Button" parent="MarginContainer/VBoxContainer"] layout_mode = 2 @@ -67,7 +75,54 @@ theme_override_fonts/font = ExtResource("2_ac165") theme_override_font_sizes/font_size = 150 text = "exit" -[connection signal="text_changed" from="MarginContainer/VBoxContainer/HBoxContainer/leaderboard_name" to="." method="_on_leaderboard_name_text_changed"] -[connection signal="toggled" from="MarginContainer/VBoxContainer/HBoxContainer/Confirmed" to="." method="_on_confirmed_toggled"] +[node name="Add Leaderboard Menu" type="Control" parent="."] +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/Exit" to="." method="_on_exit_pressed"] diff --git a/assets/Shaders/check-mark-hand-drawn-scribble-line_78370-1424.avif b/assets/Shaders/check-mark-hand-drawn-scribble-line_78370-1424.avif new file mode 100644 index 0000000..b48f21c Binary files /dev/null and b/assets/Shaders/check-mark-hand-drawn-scribble-line_78370-1424.avif differ diff --git a/check-mark-hand-drawn-scribble-line_78370-1424.avif b/check-mark-hand-drawn-scribble-line_78370-1424.avif new file mode 100644 index 0000000..b48f21c Binary files /dev/null and b/check-mark-hand-drawn-scribble-line_78370-1424.avif differ diff --git a/scripts/LevelManager.gd b/scripts/LevelManager.gd index 85c1a07..d8887b8 100644 --- a/scripts/LevelManager.gd +++ b/scripts/LevelManager.gd @@ -47,6 +47,7 @@ func _ready(): GameGlobals.health = gamemode.start_health #LOAD DATA + SaveLoad.load_persistent_data() SaveLoad.load_user_data() if SaveLoad.data_cleared or !gamemode.load_save: @@ -152,7 +153,6 @@ func die(): if GameGlobals.player_deaths: GameGlobals.player_deaths += 1 SaveLoad.save_user_data() - SaveLoad.clear_save_game_data() var deadmsg = DEAD_ANNOUNCE.instantiate() get_parent().add_child(deadmsg) var instance_dead = dead_player.instantiate() @@ -253,4 +253,6 @@ func pickup_spawn(randomized): func save_quit(): SignalBus.emit_signal("player_exiting_tree") SaveLoad.save_game_data(self.get_name()) + SaveLoad.save_user_data() + SaveLoad.save_persistent_data() get_tree().quit() diff --git a/scripts/game_globals.gd b/scripts/game_globals.gd index 4206572..529b1ae 100644 --- a/scripts/game_globals.gd +++ b/scripts/game_globals.gd @@ -15,10 +15,10 @@ var current_gamemode #Persistent Data var user_id = 0 -var current_user_leaderboards = ["global"] -var all_user_leaderboards = [] +var last_leaderboard_id = 0 +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 #Player Stats diff --git a/scripts/main_menu.gd b/scripts/main_menu.gd index f92f2b8..47ff202 100644 --- a/scripts/main_menu.gd +++ b/scripts/main_menu.gd @@ -3,8 +3,12 @@ extends Node var last_scene @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: SaveLoad.load_persistent_data() @@ -12,18 +16,18 @@ func _enter_tree() -> void: # Called when the node enters the scene tree for the first time. func _ready() -> void: - confirmed.button_pressed = true - leaderboard_name.text = GameGlobals.leaderboard_name 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: var level var load_to_gamemode - if GameGlobals.leaderboard_name != leaderboard_name.text: - GameGlobals.leaderboard_name = leaderboard_name.text playlist_generator.load_playlist() @@ -36,14 +40,20 @@ func _on_continue_pressed() -> void: load_to_gamemode = GameGlobals.current_gamemode SaveLoad.save_persistent_data() - + SaveLoad.load_user_data() + SaveLoad.save_user_data() get_tree().change_scene_to_file(level) print("LEVEL : ",GameGlobals.current_level) func _on_exit_pressed() -> void: 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 - confirmed.button_pressed = false + +func _on_add_leaderboard_pressed() -> void: + add_leaderboard_menu.visible = true diff --git a/scripts/playlist_generator.gd b/scripts/playlist_generator.gd index 4afe380..0ad8683 100644 --- a/scripts/playlist_generator.gd +++ b/scripts/playlist_generator.gd @@ -24,7 +24,7 @@ func _process(delta: float) -> 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 = [] print("PLAYLIST CREATED FOR THE : ",playlist_name) for i in rounds: @@ -55,15 +55,15 @@ func only_valid_chars(input_string: String) -> String: return valid_chars 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 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.close() 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): var file = FileAccess.open(playlist_path, FileAccess.READ) var key = file.get_var() diff --git a/scripts/save_load.gd b/scripts/save_load.gd index 2ed7220..21bd112 100644 --- a/scripts/save_load.gd +++ b/scripts/save_load.gd @@ -13,27 +13,41 @@ var current_ammo var reserve_ammo ## SAVE DATA PATHS - +var persistent_data_save_path = "user://persistent_data.save" func _ready() -> void: SignalBus.shot_fired.connect(shot_fired) 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) - var all_user_leaderboards_file = [] - for i in GameGlobals.all_user_leaderboards: - all_user_leaderboards_file.append(GameGlobals.current_user_leaderboards) + file.store_var(GameGlobals.last_leaderboard_id) + file.store_var(GameGlobals.user_names) + file.store_var(GameGlobals.all_user_leaderboards) + file.close() func load_persistent_data(): - var file = FileAccess.open("user://persistent_data.save", FileAccess.WRITE) - GameGlobals.user_id = file.get_var() - GameGlobals.all_user_leaderboards = file.get_var() - file.close() + if FileAccess.file_exists(persistent_data_save_path): + var file = FileAccess.open(persistent_data_save_path, FileAccess.READ) + + 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(): - 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) #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() +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(): - 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): var file = FileAccess.open(user_save_path, FileAccess.READ) 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()) var 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() + 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.gun_ammo = file.get_var() GameGlobals.ammo_reserve = file.get_var() @@ -92,7 +119,7 @@ func load_user_data(): var checksum = file.get_var() 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("CHECKSUM CALC : ",HelperFuncs.checksum(check_data)) file.close() @@ -103,6 +130,16 @@ func load_user_data(): print("DATA NOT VALID") else: 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): @@ -130,7 +167,6 @@ func save_game_data(level_name): file.store_line(json_string) file.close() - save_persistent_data() func check_save_game_exists(level_name): var game_save_path = str("user://",GameGlobals.leaderboard_name,"_",level_name,"_gamesave.save")