can now add and store leaderboards. started work on playlist loading

This commit is contained in:
derek
2025-02-28 11:58:10 -06:00
parent 096b505cfa
commit 3356f9e191
15 changed files with 143 additions and 45 deletions

View File

@@ -2,6 +2,7 @@ extends StaticBody3D
@onready var currently_held_money: Label3D = $"Currently Held Money"
@onready var deposited: Label3D = $Deposited
@onready var leaderboard_name: Label3D = $"Leaderboard Name"
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
@@ -12,6 +13,7 @@ func _ready() -> void:
func _process(delta: float) -> void:
currently_held_money.text = "cash on hand: $" + str(int(GameGlobals.money))
deposited.text = "deposited: $" + str(GameGlobals.deposited_money)
leaderboard_name.text = str(GameGlobals.all_user_leaderboards[GameGlobals.user_id][GameGlobals.last_leaderboard_id])
func interact():
SignalBus.emit_signal("money_deposited")

View File

@@ -18,8 +18,10 @@ var user_id = 0
var last_leaderboard_id = 0
var user_names = ["Profile 1","Profile 2","Profile 3","Profile 4","Profile 5"]
var all_user_leaderboards = [["Global"]]
var current_leaderboard_name = all_user_leaderboards[user_id][last_leaderboard_id]
var playlist_test
var current_match
#Player Stats
var player_deaths = 0

View File

@@ -1,4 +1,3 @@
@tool
extends Node3D
@export var portal_node : Node
@@ -6,12 +5,10 @@ extends Node3D
@onready var level_name: Label3D = $"Level Name"
@onready var gamemode_label: Label3D = $Gamemode
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
func _process(delta: float) -> void:
level_name.text = portal_node.scene_name
gamemode_label.text = portal_node.level_gamemode.gamemode_name
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
func update_sign_names():
level_name.text = portal_node.scene_name
gamemode_label.text = portal_node.level_gamemode.gamemode_name

View File

@@ -8,6 +8,8 @@ var last_scene
@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"
@onready var new_leaderboard_name: TextEdit = $"Add Leaderboard Menu/MarginContainer/HBoxContainer/NewLeaderboardName"
@onready var confirm_leaderboard_add: Button = $"Add Leaderboard Menu/MarginContainer/HBoxContainer/Confirm"
func _enter_tree() -> void:
@@ -16,11 +18,9 @@ func _enter_tree() -> void:
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
add_leaderboard_menu.visible = false
playlist_generator.load_playlist()
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
refresh_option_list()
continue_text_check()
@@ -46,6 +46,7 @@ func _on_continue_pressed() -> void:
print("LEVEL : ",GameGlobals.current_level)
func _on_exit_pressed() -> void:
SaveLoad.save_persistent_data()
get_tree().quit()
func continue_text_check():
@@ -57,3 +58,24 @@ func continue_text_check():
func _on_add_leaderboard_pressed() -> void:
add_leaderboard_menu.visible = true
func refresh_option_list():
option_button.clear()
for i in GameGlobals.all_user_leaderboards[int(GameGlobals.user_id)]:
option_button.add_item(i)
option_button.selected = int(GameGlobals.last_leaderboard_id)
func _on_confirm_pressed() -> void:
var valid_name = HelperFuncs.only_valid_chars(new_leaderboard_name.text)
GameGlobals.all_user_leaderboards[GameGlobals.user_id].append(valid_name)
GameGlobals.last_leaderboard_id = GameGlobals.all_user_leaderboards[GameGlobals.user_id].size() - 1
refresh_option_list()
continue_text_check()
add_leaderboard_menu.visible = false
func _on_option_button_item_selected(index: int) -> void:
GameGlobals.last_leaderboard_id = option_button.selected
continue_text_check()

View File

@@ -117,7 +117,6 @@ var pickupmsg
var controlled_elsewhere = false
@onready var animation_player: AnimationPlayer = $AnimationPlayer
@onready var crosshair = $Head/Recoil/Camera3D/Crosshair
@onready var head = $Head
@onready var camera = $Head/Recoil/Camera3D
@onready var world_environment = $"../WorldEnvironment"

View File

@@ -7,7 +7,8 @@ extends Node
@export var maps_in_rotation : Array[String] = []
@export var gamemodes_in_rotation : Array[gamemode]= []
@export var levels_per_round : int = 5
@export var rounds : int = 3
@export var rounds_per_match : int = 3
@export var matches_per_year : int = 52
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
@@ -27,17 +28,19 @@ func generate_playlist() -> void:
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:
var round = []
for x in levels_per_round:
var level_details = {
"map" : maps_in_rotation.pick_random(),
"gamemode" : gamemodes_in_rotation.pick_random()
}
round.append(level_details)
playlist.append(round)
print("PLAYLIST : ", playlist[0][0])
for h in matches_per_year:
var matches = []
for i in rounds_per_match:
var round = []
for x in levels_per_round:
var level_details = {
"map" : maps_in_rotation.pick_random(),
"gamemode" : gamemodes_in_rotation.pick_random()
}
round.append(level_details)
matches.append(round)
playlist.append(matches)
print("PLAYLIST : ", playlist)
save_playlist(playlist)
generate_playlist_now = false
@@ -63,13 +66,14 @@ func save_playlist(playlist):
file.close()
func load_playlist():
var playlist_path : String = "user://" + str(only_valid_chars(GameGlobals.all_user_leaderboards[GameGlobals.user_id][GameGlobals.last_leaderboard_id])) + "_playlist.save"
var playlist_path : String = "user://" + str(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()
var playlist = file.get_var()
print("KEY : ",key)
GameGlobals.playlist_test = playlist
GameGlobals.current_match = playlist[0]
file.close()
print("PLAYLIST: ")
print("------------------------------------------------------------------------------------")

View File

@@ -0,0 +1,25 @@
extends Node
@onready var playlist_generator: Control = $"../Playlist Generator"
var portals = []
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
playlist_generator.load_playlist()
print("CURRENT MATCH : ",GameGlobals.current_match)
for i in get_tree().current_scene.get_children():
if i.is_in_group("portal"):
portals.append(i)
print("PORTALS")
var id = 0
for i in portals:
i.scene_path = str(GameGlobals.current_match[0][id]["map"])
i.scene_name = str(GameGlobals.current_match[0][id]["map"])
id += 1
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
print("CURRENT MATCH ",GameGlobals.current_match[0])

View File

@@ -37,8 +37,8 @@ func load_persistent_data():
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_id = int(user_id)
GameGlobals.last_leaderboard_id = int(last_leaderboard_id)
GameGlobals.user_names = user_names
GameGlobals.all_user_leaderboards = all_user_leaderboards
@@ -47,11 +47,11 @@ func load_persistent_data():
print("No file found...")
func save_user_data():
var user_save_path = str("user://user_",str(GameGlobals.user_id),"_",str(GameGlobals.leaderboard_name),"_leaderboard","_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")
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
var leaderboard_name = GameGlobals.leaderboard_name
var leaderboard_name = str(GameGlobals.current_leaderboard_name)
var money = GameGlobals.money
var deposited_money = GameGlobals.deposited_money
var health = GameGlobals.health
@@ -87,6 +87,7 @@ func check_user_data_exists():
return false
func load_user_data():
print("ALL LEADERBOARDS: ",GameGlobals.all_user_leaderboards[0][0])
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)
@@ -145,7 +146,7 @@ func load_user_data():
func save_game_data(level_name):
var level_control = get_tree().current_scene
var player = level_control.player
var game_save_path = str("user://",GameGlobals.leaderboard_name,"_",level_name,"_gamesave.save")
var game_save_path = str("user://",GameGlobals.current_leaderboard_name,"_",level_name,"_gamesave.save")
var file = FileAccess.open(game_save_path, FileAccess.WRITE)
#ASSIGN DATA TO VARIABLES
data_cleared = false

View File

@@ -1,4 +1,5 @@
extends Area3D
class_name Portal
@export var scene_path : String
@export var scene_name : String