90 lines
3.3 KiB
GDScript
90 lines
3.3 KiB
GDScript
class_name Main
|
|
extends Node
|
|
|
|
signal loaded_scene
|
|
|
|
@export var scene: Node
|
|
@export var movies: Node
|
|
|
|
var game_manager: GameManager
|
|
var loaded: bool = false
|
|
var UILayer: CanvasLayer
|
|
var main_menu_scene_path: String = "res://UI/Menus/MainMenu/main_menu.tscn"
|
|
var multiplayer_lobby_scene_path: String = "res://Scenes/Menus/multiplayer_lobby.tscn"
|
|
var singleplayer_lobby_scene_path: String = "res://Scenes/Menus/singleplayer_lobby.tscn"
|
|
|
|
|
|
func _ready() -> void:
|
|
Engine.max_fps = 60
|
|
UILayer = CanvasLayer.new()
|
|
UILayer.name = "UILayer"
|
|
UILayer.layer = 2
|
|
add_child.call_deferred(UILayer)
|
|
var version_label: Label = Label.new()
|
|
var version: String = ProjectSettings.get_setting("application/config/version")
|
|
version_label.text = "WORK IN PROGRESS | ALPHA - VERSION " + version + " | PLAYTEST"
|
|
version_label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER
|
|
version_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
|
version_label.theme_type_variation = "VersionLabel"
|
|
#version_label.add_theme_font_size_override("font_size", 18)
|
|
#version_label.add_theme_color_override("font_color", Color(0.85, 0.85, 0.85, 0.7))
|
|
version_label.set_anchors_preset(Control.PRESET_TOP_WIDE)
|
|
UILayer.add_child(version_label)
|
|
Input.set_custom_mouse_cursor(load("res://Assets/Textures/cursor_none.png"), Input.CURSOR_ARROW, Vector2(9, 6))
|
|
Input.set_custom_mouse_cursor(load("res://Assets/Textures/bracket_b_vertical.png"), Input.CURSOR_IBEAM, Vector2(16, 16))
|
|
|
|
|
|
func load_main_menu() -> void:
|
|
load_scene(main_menu_scene_path)
|
|
await loaded_scene
|
|
if game_manager:
|
|
game_manager.queue_free()
|
|
game_manager = GameManager.new()
|
|
game_manager.name = "GameManager"
|
|
game_manager.root_scene = scene
|
|
game_manager.UILayer = UILayer
|
|
add_child(game_manager)
|
|
game_manager.switch_to_main_menu.connect(load_main_menu)
|
|
game_manager.switch_to_single_player.connect(load_singleplayer)
|
|
game_manager.switch_to_multi_player.connect(load_multiplayer)
|
|
var main_menu: MainMenu = scene.get_child(0) as MainMenu
|
|
main_menu.multiplayer_game_requested.connect(load_multiplayer)
|
|
main_menu.singleplayer_game_requested.connect(load_singleplayer)
|
|
main_menu.game = game_manager
|
|
|
|
|
|
func load_singleplayer() -> void:
|
|
load_scene(singleplayer_lobby_scene_path)
|
|
await loaded_scene
|
|
var single_player_lobby: SinglePlayerLobby = scene.get_child(0) as SinglePlayerLobby
|
|
single_player_lobby.game_manager = game_manager
|
|
single_player_lobby.setup_the_ui()
|
|
single_player_lobby.setup_game()
|
|
|
|
|
|
func load_multiplayer() -> void:
|
|
load_scene(multiplayer_lobby_scene_path)
|
|
await loaded_scene
|
|
var multi_player_lobby: MultiplayerLobby = scene.get_child(0) as MultiplayerLobby
|
|
multi_player_lobby.game_manager = game_manager
|
|
multi_player_lobby.setup_the_ui()
|
|
multi_player_lobby.player_disconnected.connect(game_manager.remove_player)
|
|
|
|
|
|
func load_scene(scene_path: String) -> void:
|
|
ResourceLoader.load_threaded_request(scene_path)
|
|
for node: Node in scene.get_children():
|
|
node.queue_free()
|
|
var progress: Array = [0.0]
|
|
while progress[0] < 1.0:
|
|
await get_tree().process_frame
|
|
ResourceLoader.load_threaded_get_status(scene_path, progress)
|
|
if progress[0] >= 1.0:
|
|
var new_scene: PackedScene = ResourceLoader.load_threaded_get(scene_path)
|
|
if movies:
|
|
movies.queue_free()
|
|
movies = null
|
|
UILayer.visible = true
|
|
scene.add_child(new_scene.instantiate())
|
|
loaded_scene.emit()
|