From ebab517863ddf4e504e4fce6621466b770f74208 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sat, 11 Jan 2025 21:04:13 -0600 Subject: [PATCH] Created a scene manager --- addons/godot_steam_sync/Lobby/lobby.gd | 3 +-- addons/godot_steam_sync/Lobby/lobby_menu.tscn | 6 ++---- .../Network/RadomeSteamSync/NetworkManager.gd | 2 +- .../godot_steam_sync/Network/RadomeSteamSync/P2P.gd | 12 ++++++++++-- assets/core/networking/scripts/SceneManager.gd | 7 +++++++ project.godot | 2 ++ 6 files changed, 23 insertions(+), 9 deletions(-) create mode 100644 assets/core/networking/scripts/SceneManager.gd diff --git a/addons/godot_steam_sync/Lobby/lobby.gd b/addons/godot_steam_sync/Lobby/lobby.gd index afa2fa1..286296a 100644 --- a/addons/godot_steam_sync/Lobby/lobby.gd +++ b/addons/godot_steam_sync/Lobby/lobby.gd @@ -255,6 +255,5 @@ func _on_start_btn_pressed(): if NetworkManager.STEAM_ID == Steam.getLobbyOwner(NetworkManager.LOBBY_ID): var result = NetworkManager.IS_READY.values().all(func(number): return number == true) if result: - pass - #SceneManager.change_scene("res://godotsteam_sync_example/Test.tscn") + SceneManager.change_scene("res://godotsteam_sync_example/Test.tscn") diff --git a/addons/godot_steam_sync/Lobby/lobby_menu.tscn b/addons/godot_steam_sync/Lobby/lobby_menu.tscn index 09a5952..87af164 100644 --- a/addons/godot_steam_sync/Lobby/lobby_menu.tscn +++ b/addons/godot_steam_sync/Lobby/lobby_menu.tscn @@ -77,10 +77,9 @@ scroll_smooth = true [node name="LobbyVisibilityBtn" type="OptionButton" parent="CreateLobbyCont"] custom_minimum_size = Vector2(300, 35) layout_mode = 2 -item_count = 4 selected = 2 +item_count = 4 popup/item_0/text = "PRIVATE" -popup/item_0/id = 0 popup/item_1/text = "FRIENDS ONLY" popup/item_1/id = 1 popup/item_2/text = "PUBLIC" @@ -91,10 +90,9 @@ popup/item_3/id = 3 [node name="MaxMembersBtn" type="OptionButton" parent="CreateLobbyCont"] custom_minimum_size = Vector2(300, 35) layout_mode = 2 -item_count = 4 selected = 1 +item_count = 4 popup/item_0/text = "2" -popup/item_0/id = 0 popup/item_1/text = "4" popup/item_1/id = 1 popup/item_2/text = "8" diff --git a/addons/godot_steam_sync/Network/RadomeSteamSync/NetworkManager.gd b/addons/godot_steam_sync/Network/RadomeSteamSync/NetworkManager.gd index 2de9b9c..3c47ced 100644 --- a/addons/godot_steam_sync/Network/RadomeSteamSync/NetworkManager.gd +++ b/addons/godot_steam_sync/Network/RadomeSteamSync/NetworkManager.gd @@ -13,7 +13,7 @@ var LOBBY_MAX_MEMBERS: int = 4 var GAME_STARTED : bool = false var IS_READY : Dictionary = {} -enum TYPES {START,READY,START_SCENE,TRANFORM_SYNC,PROPERTY,EVENT,RIGIDBODY_SYNC,SCENE_LOADED,COMMAND,VOICE,RAGDOLL} +enum TYPES {START,READY,START_SCENE,TRANFORM_SYNC,PROPERTY,EVENT,RIGIDBODY_SYNC,SCENE_LOADED,COMMAND,VOICE,RAGDOLL,CHANGE_SCENE} @onready var player = preload("res://godotsteam_sync_example/fpc/character.tscn") diff --git a/addons/godot_steam_sync/Network/RadomeSteamSync/P2P.gd b/addons/godot_steam_sync/Network/RadomeSteamSync/P2P.gd index a04446f..6df02c9 100644 --- a/addons/godot_steam_sync/Network/RadomeSteamSync/P2P.gd +++ b/addons/godot_steam_sync/Network/RadomeSteamSync/P2P.gd @@ -10,7 +10,6 @@ func _process(_delta: float) -> void: func _read_P2P_Packet() -> void: var packet_size0 : int = Steam.getAvailableP2PPacketSize(0) - #region Channel0 if packet_size0 > 0: @@ -42,6 +41,8 @@ func _read_All_P2P_Packets(read_count: int = 0) -> void: _read_P2P_Packet() _read_All_P2P_Packets(read_count + 1) var packet_size : float + + func _send_P2P_Packet(channel: int,target: int, packet_data: Dictionary,send_type: int) -> bool: # Create a data array to send the data through var this_data: PackedByteArray @@ -61,6 +62,8 @@ func _send_P2P_Packet(channel: int,target: int, packet_data: Dictionary,send_typ else: return Steam.sendP2PPacket(target, this_data, send_type, channel) return false + + func handle_start_packet(READABLE): # This packet reading when someone ready if READABLE["TYPE"] == NetworkManager.TYPES.READY: @@ -108,7 +111,6 @@ func handle_property_packets(READABLE): else: var DATA :Array = [READABLE["property"],READABLE["value"]] get_tree().root.get_node(READABLE["node_path"]).DATA = DATA - ## func handle_voice(READABLE): @@ -116,6 +118,12 @@ func handle_voice(READABLE): get_tree().root.get_node(READABLE["node_path"]).process_voice_data(READABLE["voice_data"]) #await get_tree().create_timer(0.1).timeout + +func handle_scene_change(READABLE): + if READABLE["TYPE"] == NetworkManager.TYPES.CHANGE_SCENE: + get_tree().change_scene_to_file(READABLE["scene"]) + + func handle_packets(READABLE): handle_start_packet(READABLE) handle_event_packets(READABLE) diff --git a/assets/core/networking/scripts/SceneManager.gd b/assets/core/networking/scripts/SceneManager.gd new file mode 100644 index 0000000..324affa --- /dev/null +++ b/assets/core/networking/scripts/SceneManager.gd @@ -0,0 +1,7 @@ +extends Node + +func change_scene(path: String): + var packet: Dictionary = {'TYPE': NetworkManager.TYPES.CHANGE_SCENE,'scene': path} + P2P._send_P2P_Packet(0, 0, packet, Steam.P2P_SEND_RELIABLE) + get_tree().change_scene_to_file(path) + diff --git a/project.godot b/project.godot index c963913..121fedd 100644 --- a/project.godot +++ b/project.godot @@ -11,6 +11,7 @@ config_version=5 [application] config/name="Steamforged Skies" +run/main_scene="res://addons/godot_steam_sync/Lobby/main_menu.tscn" config/features=PackedStringArray("4.3", "Forward Plus") config/icon="res://assets/icon.png" @@ -19,6 +20,7 @@ config/icon="res://assets/icon.png" GameConsole="*res://addons/ingameconsole/GameConsole.tscn" NetworkManager="*res://addons/godot_steam_sync/Network/RadomeSteamSync/NetworkManager.gd" P2P="*res://addons/godot_steam_sync/Network/RadomeSteamSync/P2P.gd" +SceneManager="*res://assets/core/networking/scripts/SceneManager.gd" [debug]