diff --git a/MainMenu.tscn b/MainMenu.tscn index 3486d51..4454a5e 100644 --- a/MainMenu.tscn +++ b/MainMenu.tscn @@ -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"] diff --git a/Tools/playlist_generator.tscn b/Tools/playlist_generator.tscn index b1197f8..e4b4c32 100644 --- a/Tools/playlist_generator.tscn +++ b/Tools/playlist_generator.tscn @@ -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 diff --git a/assets/deposit_money.tscn b/assets/deposit_money.tscn index 1b1a13f..d3a5cec 100644 --- a/assets/deposit_money.tscn +++ b/assets/deposit_money.tscn @@ -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" diff --git a/assets/scene_changer.tscn b/assets/scene_changer.tscn index 932c548..eae55dc 100644 --- a/assets/scene_changer.tscn +++ b/assets/scene_changer.tscn @@ -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") diff --git a/project.godot b/project.godot index fb70ba0..8c63582 100644 --- a/project.godot +++ b/project.godot @@ -60,6 +60,7 @@ leak="will leak if damaged" item_pickup="" hub_level="" ui="" +portal="" [input] diff --git a/scenes/HUBWORLD.tscn b/scenes/HUBWORLD.tscn index ffbf8b2..9ec3962 100644 --- a/scenes/HUBWORLD.tscn +++ b/scenes/HUBWORLD.tscn @@ -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") diff --git a/scripts/deposit_money.gd b/scripts/deposit_money.gd index b9c6500..41b3a14 100644 --- a/scripts/deposit_money.gd +++ b/scripts/deposit_money.gd @@ -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") diff --git a/scripts/game_globals.gd b/scripts/game_globals.gd index 529b1ae..5ab68c6 100644 --- a/scripts/game_globals.gd +++ b/scripts/game_globals.gd @@ -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 diff --git a/scripts/level_sign.gd b/scripts/level_sign.gd index 2c22a14..7c6e7eb 100644 --- a/scripts/level_sign.gd +++ b/scripts/level_sign.gd @@ -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 diff --git a/scripts/main_menu.gd b/scripts/main_menu.gd index 47ff202..4275d1f 100644 --- a/scripts/main_menu.gd +++ b/scripts/main_menu.gd @@ -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() diff --git a/scripts/player.gd b/scripts/player.gd index e79bdc4..2084e6a 100644 --- a/scripts/player.gd +++ b/scripts/player.gd @@ -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" diff --git a/scripts/playlist_generator.gd b/scripts/playlist_generator.gd index 0ad8683..6717f7f 100644 --- a/scripts/playlist_generator.gd +++ b/scripts/playlist_generator.gd @@ -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("------------------------------------------------------------------------------------") diff --git a/scripts/playlist_loader.gd b/scripts/playlist_loader.gd new file mode 100644 index 0000000..68da27a --- /dev/null +++ b/scripts/playlist_loader.gd @@ -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]) diff --git a/scripts/save_load.gd b/scripts/save_load.gd index 21bd112..5573956 100644 --- a/scripts/save_load.gd +++ b/scripts/save_load.gd @@ -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 diff --git a/scripts/scene_changer.gd b/scripts/scene_changer.gd index b640031..589d4b8 100644 --- a/scripts/scene_changer.gd +++ b/scripts/scene_changer.gd @@ -1,4 +1,5 @@ extends Area3D +class_name Portal @export var scene_path : String @export var scene_name : String