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

@@ -1,13 +1,38 @@
[gd_scene load_steps=9 format=3 uid="uid://sa1d1rftyn87"]
[gd_scene load_steps=11 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="Shader" path="res://assets/crtTest.gdshader" id="2_hyw7c"]
[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_a5tps"]
shader = ExtResource("2_hyw7c")
shader_parameter/overlay = true
shader_parameter/scanlines_opacity = 0.025
shader_parameter/scanlines_width = 0.315
shader_parameter/grille_opacity = 0.1
shader_parameter/resolution = Vector2(640, 480)
shader_parameter/pixelate = true
shader_parameter/roll = true
shader_parameter/roll_speed = 8.0
shader_parameter/roll_size = 15.0
shader_parameter/roll_variation = 1.8
shader_parameter/distort_intensity = 0.05
shader_parameter/noise_opacity = 0.4
shader_parameter/noise_speed = 5.0
shader_parameter/static_noise_intensity = 0.06
shader_parameter/aberration = 0.03
shader_parameter/brightness = 0.7
shader_parameter/discolor = true
shader_parameter/warp_amount = 0.0
shader_parameter/clip_warp = true
shader_parameter/vignette_intensity = 0.4
shader_parameter/vignette_opacity = 0.235
[sub_resource type="ShaderMaterial" id="ShaderMaterial_htvli"]
shader = ExtResource("6_x75tm")
shader_parameter/strength = 1.0
@@ -21,9 +46,16 @@ grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_haaol")
[node name="ColorRect" type="ColorRect" parent="."]
material = SubResource("ShaderMaterial_a5tps")
offset_right = 3840.0
offset_bottom = 2160.0
[node name="PlaylistGenerator" parent="." instance=ExtResource("2_2rg1o")]
visible = false
layout_mode = 1
rounds_per_match = null
matches_per_year = null
[node name="MarginContainer" type="MarginContainer" parent="."]
layout_mode = 1
@@ -76,7 +108,6 @@ theme_override_font_sizes/font_size = 150
text = "exit"
[node name="Add Leaderboard Menu" type="Control" parent="."]
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@@ -92,7 +123,7 @@ anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0, 0, 0, 0.737255)
color = Color(0, 0, 0, 0.431373)
[node name="MarginContainer" type="MarginContainer" parent="Add Leaderboard Menu"]
layout_mode = 1
@@ -111,7 +142,7 @@ 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"]
[node name="NewLeaderboardName" type="TextEdit" parent="Add Leaderboard Menu/MarginContainer/HBoxContainer"]
custom_minimum_size = Vector2(800, 0)
layout_mode = 2
size_flags_vertical = 3
@@ -119,10 +150,12 @@ 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"]
[node name="Confirm" type="Button" parent="Add Leaderboard Menu/MarginContainer/HBoxContainer"]
layout_mode = 2
icon = ExtResource("7_ia0hc")
[connection signal="item_selected" from="MarginContainer/VBoxContainer/HBoxContainer/OptionButton" to="." method="_on_option_button_item_selected"]
[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"]
[connection signal="pressed" from="Add Leaderboard Menu/MarginContainer/HBoxContainer/Confirm" to="." method="_on_confirm_pressed"]

View File

@@ -19,11 +19,5 @@ generate_playlist_now = null
checksum_test = null
maps_in_rotation = Array[String](["res://assets/blockout_2.tscn", "res://scenes/enemy_working_scene.tscn", "res://scenes/test_level_2v2.tscn", "res://scenes/Arena of Money.tscn"])
gamemodes_in_rotation = Array[ExtResource("2_hoyqc")]([ExtResource("2_85uje"), ExtResource("3_t0mxh"), ExtResource("4_8wht4"), ExtResource("6_vu1w7")])
[node name="Button" type="Button" parent="."]
layout_mode = 0
offset_right = 8.0
offset_bottom = 8.0
text = "Generate Random Playlist"
[connection signal="pressed" from="Button" to="." method="_on_button_pressed"]
rounds_per_match = null
matches_per_year = null

View File

@@ -18,6 +18,12 @@ shape = SubResource("BoxShape3D_8clsv")
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
mesh = SubResource("BoxMesh_6sj7f")
[node name="Leaderboard Name" type="Label3D" parent="."]
transform = Transform3D(0.7, 0, 0, 0, 0.7, 0, 0, 0, 0.7, 0.143, 2.20856, 0)
text = "Deposit Money"
font = ExtResource("1_bjyml")
font_size = 100
[node name="Deposit Money" type="Label3D" parent="."]
transform = Transform3D(0.7, 0, 0, 0, 0.7, 0, 0, 0, 0.7, 0.143, 1.69313, 0)
text = "Deposit Money"

View File

@@ -13,7 +13,7 @@ emission_enabled = true
emission = Color(0.223698, 0.336652, 0.628522, 1)
emission_energy_multiplier = 5.6
[node name="Scene Changer" type="Area3D"]
[node name="Scene Changer" type="Area3D" groups=["portal"]]
collision_layer = 4
collision_mask = 4
script = ExtResource("1_7ngxb")

View File

@@ -60,6 +60,7 @@ leak="will leak if damaged"
item_pickup=""
hub_level=""
ui=""
portal=""
[input]

View File

@@ -1,8 +1,10 @@
[gd_scene load_steps=18 format=3 uid="uid://jdwpc622vmok"]
[gd_scene load_steps=20 format=3 uid="uid://jdwpc622vmok"]
[ext_resource type="Script" path="res://scripts/LevelManager.gd" id="1_1bnbi"]
[ext_resource type="Resource" uid="uid://bxcxqt7rmfvdw" path="res://GameModes/hubworld.tres" id="2_62iy8"]
[ext_resource type="Script" path="res://scripts/playlist_loader.gd" id="3_2u2e7"]
[ext_resource type="Material" uid="uid://b6hhomp4kcjvb" path="res://assets/materials/prototype/tadaoando.tres" id="3_hlejc"]
[ext_resource type="PackedScene" uid="uid://dpootbr7qgac1" path="res://Tools/playlist_generator.tscn" id="3_udqcb"]
[ext_resource type="PackedScene" uid="uid://drwae3loscbw7" path="res://assets/player.tscn" id="4_04o4y"]
[ext_resource type="PackedScene" uid="uid://dgapcuvg0gtmm" path="res://assets/scene_changer.tscn" id="5_alya6"]
[ext_resource type="PackedScene" uid="uid://bessq6hl7qsh8" path="res://assets/stats.tscn" id="6_mkn70"]
@@ -36,6 +38,15 @@ fog_density = 0.0001
script = ExtResource("1_1bnbi")
gamemode = ExtResource("2_62iy8")
[node name="LEVEL UTILS" type="Node" parent="."]
[node name="Playlist Generator" parent="LEVEL UTILS" instance=ExtResource("3_udqcb")]
rounds_per_match = 3
matches_per_year = 52
[node name="PlaylistLoader" type="Node" parent="LEVEL UTILS"]
script = ExtResource("3_2u2e7")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_r2hg6")

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