diff --git a/multiplayer_menu.gd b/multiplayer_menu.gd new file mode 100644 index 0000000..c0819be --- /dev/null +++ b/multiplayer_menu.gd @@ -0,0 +1,88 @@ +extends Control + +var SERVER_PORT = 11111 +var MAX_PLAYERS = 5 + +const ChatMessage = preload("res://mods-unpacked/Pasha-Brotatogether/ui/chat/chat_message.tscn") +const LobbyEntry = preload("res://mods-unpacked/Pasha-Brotatogether/ui/lobby_entry.tscn") + +const DirectConnection = preload("res://mods-unpacked/Pasha-Brotatogether/networking/direct_connection.gd") + +var GameController = load("res://mods-unpacked/Pasha-Brotatogether/networking/game_controller.gd") + +var direct_connection +var game_controller + +var DEBUG = false + +onready var chat_messages = $"%ChatMessages" +onready var lobbies_list = $"%Lobbies" +onready var chat_input : LineEdit = $"%ChatInput" +onready var create_lobby_button : Button = $"%CreateLobbyButton" + +var steam_connection +var brotatogether_options + +func _ready(): + steam_connection = $"/root/SteamConnection" + steam_connection.connect("global_chat_received", self, "_received_global_chat") + steam_connection.connect("game_lobby_found", self, "_game_lobby_found") + + brotatogether_options = $"/root/BrotogetherOptions" + + for message in steam_connection.pending_system_messages: + var new_message_node = ChatMessage.instance() + new_message_node.message = message + new_message_node.username = "SYSTEM" + chat_messages.add_child(new_message_node) + steam_connection.pending_system_messages.clear() + create_lobby_button.grab_focus() + CoopService.clear_coop_players() + +func _input(event:InputEvent)->void : + manage_back(event) + +func manage_back(event:InputEvent)->void : + if event.is_action_pressed("ui_cancel"): + RunData.current_zone = 0 + RunData.reload_music = false + var _error = get_tree().change_scene(MenuData.title_screen_scene) + +func _on_back_button_pressed(): + RunData.reload_music = false + var _error = get_tree().change_scene(MenuData.title_screen_scene) + +func _on_chat_input_text_entered(message): + if message.length() > 0: + steam_connection.send_global_chat_message(message) + chat_input.clear() + +func _received_global_chat(user, message) -> void: + if chat_messages.get_child_count() > 50: # Prevent lag + var oldest = chat_messages.get_child(0) + chat_messages.remove_child(oldest) + oldest.queue_free() + var new_message_node = ChatMessage.instance() + new_message_node.message = message + new_message_node.username = user + chat_messages.add_child(new_message_node) + +func _on_create_lobby_button_pressed(): + var result = steam_connection.create_new_game_lobby() + if result != Steam.RESULT_OK: + var new_message_node = ChatMessage.instance() + new_message_node.message = "Failed to create lobby" + new_message_node.username = "SYSTEM" + chat_messages.add_child(new_message_node) + +func _on_refresh_lobbies_button_pressed(): + for child in lobbies_list.get_children(): + lobbies_list.remove_child(child) + child.queue_free() + steam_connection.request_lobby_search() + +func _game_lobby_found(lobby_id, lobby_name) -> void: + var new_lobby_entry = LobbyEntry.instance() + new_lobby_entry.lobby_id = lobby_id + new_lobby_entry.lobby_name = lobby_name + lobbies_list.add_child(new_lobby_entry)