From 27cce98d4632479fe282150624c0ae1952490dc0 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sat, 14 Dec 2024 00:18:41 -0600 Subject: [PATCH 01/30] Added start game functionality --- assets/core/networking/scenes/lobby.tscn | 22 ++++------- .../core/networking/scripts/NetworkManager.gd | 37 ++++++++++++++++++- assets/core/networking/scripts/lobby.gd | 24 ++++++------ 3 files changed, 55 insertions(+), 28 deletions(-) diff --git a/assets/core/networking/scenes/lobby.tscn b/assets/core/networking/scenes/lobby.tscn index 6f54eec..e339666 100644 --- a/assets/core/networking/scenes/lobby.tscn +++ b/assets/core/networking/scenes/lobby.tscn @@ -3,7 +3,7 @@ [ext_resource type="Script" path="res://assets/core/networking/scripts/lobby.gd" id="1_o4fbq"] [ext_resource type="PackedScene" uid="uid://biryul3n6thlw" path="res://assets/core/networking/scenes/user_box_prefab.tscn" id="2_dpthk"] -[node name="Lobby" type="Control" node_paths=PackedStringArray("host_button", "join_button", "leave_button", "lobby_id_line_edit", "user_list_box")] +[node name="Lobby" type="Control" node_paths=PackedStringArray("host_button", "leave_button", "start_button", "user_list_box")] layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -12,9 +12,8 @@ grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_o4fbq") host_button = NodePath("Panel/HBoxContainer/Buttons/Host") -join_button = NodePath("Panel/HBoxContainer/Buttons/HBoxContainer/Join") leave_button = NodePath("Panel/HBoxContainer/Buttons/Leave") -lobby_id_line_edit = NodePath("Panel/HBoxContainer/Buttons/HBoxContainer/LineEdit") +start_button = NodePath("Panel/HBoxContainer/Buttons/Start") user_list_box = NodePath("Panel/HBoxContainer/PlayerList") user_box_prefab = ExtResource("2_dpthk") @@ -45,23 +44,16 @@ layout_mode = 2 size_flags_vertical = 4 text = "Host Lobby" -[node name="HBoxContainer" type="HBoxContainer" parent="Panel/HBoxContainer/Buttons"] -layout_mode = 2 - -[node name="LineEdit" type="LineEdit" parent="Panel/HBoxContainer/Buttons/HBoxContainer"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="Join" type="Button" parent="Panel/HBoxContainer/Buttons/HBoxContainer"] -custom_minimum_size = Vector2(90, 0) -layout_mode = 2 -text = "Join" - [node name="Leave" type="Button" parent="Panel/HBoxContainer/Buttons"] layout_mode = 2 disabled = true text = "Leave Lobby" +[node name="Start" type="Button" parent="Panel/HBoxContainer/Buttons"] +layout_mode = 2 +disabled = true +text = "Start" + [node name="PlayerList" type="VBoxContainer" parent="Panel/HBoxContainer"] layout_mode = 2 size_flags_horizontal = 3 diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index 3ed5d8c..bcb7224 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -4,6 +4,9 @@ const STEAM_APP_ID: int = 480 const PACKET_READ_LIMIT: int = 32 +var level_scene: PackedScene +var player_scene: PackedScene + var lobby_data var lobby_id: int = 0 var lobby_members: Array = [] @@ -22,7 +25,10 @@ signal user_left_lobby(user_id: int) signal host_left_lobby() + func _ready() -> void: + player_scene = load("res://assets/core/player-controller/scenes/player.tscn") as PackedScene + level_scene = load("res://assets/core/enviroment/dev-level/dev-level.tscn") as PackedScene _init_steam() @@ -250,6 +256,10 @@ func send_p2p_packet(target: int, packet_data: Dictionary) -> void: for this_member in lobby_members: if this_member['steam_id'] != steam_id: Steam.sendP2PPacket(this_member['steam_id'], this_data, send_type, channel) + print("Sent packet to %s." % this_member['steam_name']) + # Else send it to yourself + else: + Steam.sendP2PPacket(steam_id, this_data, send_type, channel) # Else send it to someone specific else: @@ -284,6 +294,19 @@ func read_p2p_packet() -> void: # Decompress the array before turning it into a useable dictionary var readable_data: Dictionary = bytes_to_var(packet_code.decompress_dynamic(-1, FileAccess.COMPRESSION_GZIP)) + # Handshake packet + if "message" in readable_data and readable_data["message"] == "handshake": + if packet_sender != steam_id: + print("Received handshake packet from %s." % Steam.getFriendPersonaName(packet_sender)) + + # Start game packet + if "message" in readable_data and readable_data["message"] == "start_game": + if packet_sender == host_id: + print("Received start game packet from host user.") + _on_game_started() + else: + printerr("WARNING: Received start game packet from non-host user.") + # Print the packet to output print("Packet: %s" % readable_data) @@ -316,7 +339,19 @@ func get_player_avatar(user_id: int) -> ImageTexture: await request_player_avatar(user_id) return avatar_texture_cache[user_id] - + +func start_game(): + print("Starting game...") + var packet_data = {"message":"start_game"} + send_p2p_packet(0, packet_data) # Send to all lobby members +func _on_game_started(): + print("Game started.") + var level: Node = level_scene.instantiate() + get_tree().root.add_child(level) + for member in lobby_members: + var player: Node = player_scene.instantiate() + level.add_child(player) + player.name = "Player_" + str(member["steam_id"]) diff --git a/assets/core/networking/scripts/lobby.gd b/assets/core/networking/scripts/lobby.gd index b843980..04b72f3 100644 --- a/assets/core/networking/scripts/lobby.gd +++ b/assets/core/networking/scripts/lobby.gd @@ -1,9 +1,8 @@ extends Control @export var host_button: Button -@export var join_button: Button @export var leave_button: Button -@export var lobby_id_line_edit: LineEdit +@export var start_button: Button @export var user_list_box: VBoxContainer @export var user_box_prefab: PackedScene @@ -12,8 +11,8 @@ var added_users = [] func _ready() -> void: host_button.pressed.connect(_on_host) - join_button.pressed.connect(_on_join) leave_button.pressed.connect(_on_leave) + start_button.pressed.connect(_on_start) NetworkManager.lobby_created.connect(_on_lobby_created) NetworkManager.lobby_joined.connect(_on_lobby_joined) @@ -27,10 +26,6 @@ func _on_host(): NetworkManager.host_lobby() -func _on_join(): - NetworkManager.join_lobby(int(lobby_id_line_edit.text)) - - func _on_leave(): NetworkManager.leave_lobby() added_users.clear() @@ -40,18 +35,14 @@ func _on_leave(): func _on_lobby_created(lobby_id: int): print("Lobby created") - lobby_id_line_edit.text = str(NetworkManager.lobby_id) host_button.disabled = true - join_button.disabled = true leave_button.disabled = false - lobby_id_line_edit.editable = false + start_button.disabled = false func _on_lobby_joined(lobby_id: int): host_button.disabled = true - join_button.disabled = true leave_button.disabled = false - lobby_id_line_edit.editable = false func _on_user_joined_lobby(user_id: int): @@ -67,6 +58,15 @@ func _on_user_left_lobby(user_id: int): update() +func _on_start(): + NetworkManager.start_game() + visible = false + + +func _on_game_started(): + visible = false + + func update() -> void: for child in user_list_box.get_children(): child.queue_free() From cdb55ecef1afdfb515370712aa79eabbc920d693 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sat, 14 Dec 2024 10:48:00 -0600 Subject: [PATCH 02/30] Fix for host starting game --- assets/core/networking/scripts/NetworkManager.gd | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index bcb7224..82b6056 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -25,7 +25,6 @@ signal user_left_lobby(user_id: int) signal host_left_lobby() - func _ready() -> void: player_scene = load("res://assets/core/player-controller/scenes/player.tscn") as PackedScene level_scene = load("res://assets/core/enviroment/dev-level/dev-level.tscn") as PackedScene @@ -257,9 +256,6 @@ func send_p2p_packet(target: int, packet_data: Dictionary) -> void: if this_member['steam_id'] != steam_id: Steam.sendP2PPacket(this_member['steam_id'], this_data, send_type, channel) print("Sent packet to %s." % this_member['steam_name']) - # Else send it to yourself - else: - Steam.sendP2PPacket(steam_id, this_data, send_type, channel) # Else send it to someone specific else: @@ -343,7 +339,8 @@ func get_player_avatar(user_id: int) -> ImageTexture: func start_game(): print("Starting game...") var packet_data = {"message":"start_game"} - send_p2p_packet(0, packet_data) # Send to all lobby members + send_p2p_packet(0, packet_data) + _on_game_started() func _on_game_started(): From b5ff99272b07bee9c3952123ec3efb81970e202b Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sat, 14 Dec 2024 11:10:34 -0600 Subject: [PATCH 03/30] Fix --- assets/core/networking/scripts/NetworkManager.gd | 3 --- 1 file changed, 3 deletions(-) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index 82b6056..999a2ff 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -298,10 +298,7 @@ func read_p2p_packet() -> void: # Start game packet if "message" in readable_data and readable_data["message"] == "start_game": if packet_sender == host_id: - print("Received start game packet from host user.") _on_game_started() - else: - printerr("WARNING: Received start game packet from non-host user.") # Print the packet to output print("Packet: %s" % readable_data) From 6bdc812b444b25f284e0835c467709a21be63c75 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sat, 14 Dec 2024 11:16:55 -0600 Subject: [PATCH 04/30] Fix again --- assets/core/networking/scripts/NetworkManager.gd | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index 999a2ff..900ce43 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -297,8 +297,9 @@ func read_p2p_packet() -> void: # Start game packet if "message" in readable_data and readable_data["message"] == "start_game": - if packet_sender == host_id: - _on_game_started() + print("Received game start packet.") + _on_game_started() + # Print the packet to output print("Packet: %s" % readable_data) From 595941a5e355b48eea13c714b74e1571b62872b9 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sat, 14 Dec 2024 11:20:51 -0600 Subject: [PATCH 05/30] Fixing the lobby --- assets/core/networking/scripts/NetworkManager.gd | 2 ++ assets/core/networking/scripts/lobby.gd | 1 + 2 files changed, 3 insertions(+) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index 900ce43..8878aa6 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -23,6 +23,7 @@ signal lobby_joined(lobby_id: int) signal user_joined_lobby(user_id: int) signal user_left_lobby(user_id: int) signal host_left_lobby() +signal on_game_started() func _ready() -> void: @@ -345,6 +346,7 @@ func _on_game_started(): print("Game started.") var level: Node = level_scene.instantiate() get_tree().root.add_child(level) + on_game_started.emit() for member in lobby_members: var player: Node = player_scene.instantiate() diff --git a/assets/core/networking/scripts/lobby.gd b/assets/core/networking/scripts/lobby.gd index 04b72f3..f077ffa 100644 --- a/assets/core/networking/scripts/lobby.gd +++ b/assets/core/networking/scripts/lobby.gd @@ -18,6 +18,7 @@ func _ready() -> void: NetworkManager.lobby_joined.connect(_on_lobby_joined) NetworkManager.user_joined_lobby.connect(_on_user_joined_lobby) NetworkManager.user_left_lobby.connect(_on_user_left_lobby) + NetworkManager.on_game_started.connect(_on_game_started) GameConsole.register_command(Command.new("update", update, [], "Updates the lobby UI")) From 2c3a86d57ec96d39ea04110c98126924cb3911c9 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sat, 14 Dec 2024 11:25:26 -0600 Subject: [PATCH 06/30] Fix player start positions --- assets/core/networking/scripts/NetworkManager.gd | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index 8878aa6..bcbf196 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -348,7 +348,11 @@ func _on_game_started(): get_tree().root.add_child(level) on_game_started.emit() + var counter: int + for member in lobby_members: - var player: Node = player_scene.instantiate() + counter += 1 + var player: Node3D = player_scene.instantiate() level.add_child(player) + player.position.x *= counter * 2 player.name = "Player_" + str(member["steam_id"]) From 17a1765c02b679dc79482f8bb3edded1c0b3f4b4 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sat, 14 Dec 2024 11:29:48 -0600 Subject: [PATCH 07/30] removed previous change --- assets/core/networking/scripts/NetworkManager.gd | 3 --- 1 file changed, 3 deletions(-) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index bcbf196..2e2d701 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -348,11 +348,8 @@ func _on_game_started(): get_tree().root.add_child(level) on_game_started.emit() - var counter: int for member in lobby_members: - counter += 1 var player: Node3D = player_scene.instantiate() level.add_child(player) - player.position.x *= counter * 2 player.name = "Player_" + str(member["steam_id"]) From b9cf3ff9e1bc4dd8f8d0a882bcbcf33187cb5152 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sat, 14 Dec 2024 21:10:48 -0600 Subject: [PATCH 08/30] tarting work on syncronizer node --- .../core/networking/scripts/NetworkManager.gd | 7 ++++++ assets/core/networking/scripts/Syncronizer.gd | 25 +++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 assets/core/networking/scripts/Syncronizer.gd diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index 2e2d701..5859d7a 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -25,6 +25,8 @@ signal user_left_lobby(user_id: int) signal host_left_lobby() signal on_game_started() +signal property_update_received(node_id: int, property_name: String, value: Variant) + func _ready() -> void: player_scene = load("res://assets/core/player-controller/scenes/player.tscn") as PackedScene @@ -300,6 +302,11 @@ func read_p2p_packet() -> void: if "message" in readable_data and readable_data["message"] == "start_game": print("Received game start packet.") _on_game_started() + + # Property update packet + if "message" in readable_data and readable_data["message"] == "property_update": + if "node_id" in readable_data and "property_name" in readable_data and "value" in readable_data: + property_update_received.emit(readable_data["node_id"], readable_data["property_name"], readable_data["value"]) # Print the packet to output diff --git a/assets/core/networking/scripts/Syncronizer.gd b/assets/core/networking/scripts/Syncronizer.gd new file mode 100644 index 0000000..eb7f8e8 --- /dev/null +++ b/assets/core/networking/scripts/Syncronizer.gd @@ -0,0 +1,25 @@ +extends Node + +class_name Syncronizer + +@export var properties_to_sync: Array = [] + +signal property_changed(node_id: int, property_name: String, value: Variant) + +func _ready() -> void: + for property_name in properties_to_sync: + self.connect("property_changed", Callable(self, "_on_property_changed")) + + NetworkManager.property_update_received.connect(Callable(self, "_on_property_update_received")) + + +func _on_property_changed(node_id: int, property_name: String, value: Variant) -> void: + if node_id == get_instance_id() and property_name in properties_to_sync: + self.set(property_name, value) + emit_signal("property_changed", node_id, property_name, value) + + +func set_property(property_name: String, value: Variant) -> void: + if property_name in properties_to_sync: + self.set(property_name, value) + emit_signal("property_changed", get_instance_id(), property_name, value) \ No newline at end of file From d01a9bec392e7f3528ede0a76d2594d0e2195cb4 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sat, 14 Dec 2024 21:53:11 -0600 Subject: [PATCH 09/30] Network auth and syncronization for the player --- .../core/enviroment/dev-level/dev-level.tscn | 8 ++--- .../core/networking/scripts/NetworkManager.gd | 7 ++-- assets/core/networking/scripts/Syncronizer.gd | 32 +++++++++++------- .../core/player-controller/scenes/player.tscn | 9 +++-- .../core/player-controller/scripts/player.gd | 33 +++++++++++++++++-- 5 files changed, 66 insertions(+), 23 deletions(-) diff --git a/assets/core/enviroment/dev-level/dev-level.tscn b/assets/core/enviroment/dev-level/dev-level.tscn index dad4c5f..9347fa3 100644 --- a/assets/core/enviroment/dev-level/dev-level.tscn +++ b/assets/core/enviroment/dev-level/dev-level.tscn @@ -1,17 +1,13 @@ -[gd_scene load_steps=5 format=3 uid="uid://ewovs6ns5y3k"] +[gd_scene load_steps=4 format=3 uid="uid://ewovs6ns5y3k"] -[ext_resource type="PackedScene" uid="uid://c6w0ivy4hetrl" path="res://assets/core/player-controller/scenes/player.tscn" id="2_q510b"] [ext_resource type="PackedScene" uid="uid://y0xb2vktsr1k" path="res://assets/core/ships/shuttle-class/shuttle-class.tscn" id="3_lsckv"] [ext_resource type="PackedScene" uid="uid://dqymnaouq1mu2" path="res://assets/core/enviroment/dev-level/terrain.tscn" id="3_vcq2f"] [ext_resource type="PackedScene" uid="uid://dlv4cwhskx8dr" path="res://assets/core/enviroment/custom-skies/sky.tscn" id="4_uss2e"] [node name="DevLevel" type="Node3D"] -[node name="Player" parent="." instance=ExtResource("2_q510b")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.46532, 9.08969, 5.43659) -joystick_camera_sens_multiplier = 5.0 - [node name="level" parent="." instance=ExtResource("3_vcq2f")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -20, 0) [node name="ShuttleClass" parent="." instance=ExtResource("3_lsckv")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 8.4922, 0) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index 5859d7a..2f334a7 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -357,6 +357,9 @@ func _on_game_started(): for member in lobby_members: - var player: Node3D = player_scene.instantiate() - level.add_child(player) + var player: Player = player_scene.instantiate() player.name = "Player_" + str(member["steam_id"]) + player.username = Steam.getFriendPersonaName(member["steam_id"]) + level.add_child(player) + if member["steam_id"] == steam_id: + player.is_network_authority = true diff --git a/assets/core/networking/scripts/Syncronizer.gd b/assets/core/networking/scripts/Syncronizer.gd index eb7f8e8..8121b22 100644 --- a/assets/core/networking/scripts/Syncronizer.gd +++ b/assets/core/networking/scripts/Syncronizer.gd @@ -7,19 +7,29 @@ class_name Syncronizer signal property_changed(node_id: int, property_name: String, value: Variant) func _ready() -> void: - for property_name in properties_to_sync: - self.connect("property_changed", Callable(self, "_on_property_changed")) - - NetworkManager.property_update_received.connect(Callable(self, "_on_property_update_received")) + # Connect the signal only once + if not is_connected("property_changed", Callable(self, "_on_property_changed")): + connect("property_changed", Callable(self, "_on_property_changed")) + NetworkManager.property_update_received.connect(Callable(self, "_on_property_update_received")) func _on_property_changed(node_id: int, property_name: String, value: Variant) -> void: - if node_id == get_instance_id() and property_name in properties_to_sync: - self.set(property_name, value) - emit_signal("property_changed", node_id, property_name, value) - + if node_id == get_instance_id() and property_name in properties_to_sync: + if get(property_name) != value: + disconnect("property_changed", Callable(self, "_on_property_changed")) + set(property_name, value) + emit_signal("property_changed", node_id, property_name, value) + connect("property_changed", Callable(self, "_on_property_changed")) func set_property(property_name: String, value: Variant) -> void: - if property_name in properties_to_sync: - self.set(property_name, value) - emit_signal("property_changed", get_instance_id(), property_name, value) \ No newline at end of file + if property_name in properties_to_sync: + if get(property_name) != value: + disconnect("property_changed", Callable(self, "_on_property_changed")) + set(property_name, value) + emit_signal("property_changed", get_instance_id(), property_name, value) + connect("property_changed", Callable(self, "_on_property_changed")) + +func get_property(property_name: String) -> Variant: + if property_name in properties_to_sync: + return get(property_name) + return null diff --git a/assets/core/player-controller/scenes/player.tscn b/assets/core/player-controller/scenes/player.tscn index 1ab7490..17a93d3 100644 --- a/assets/core/player-controller/scenes/player.tscn +++ b/assets/core/player-controller/scenes/player.tscn @@ -1,10 +1,11 @@ -[gd_scene load_steps=11 format=3 uid="uid://c6w0ivy4hetrl"] +[gd_scene load_steps=12 format=3 uid="uid://c6w0ivy4hetrl"] [ext_resource type="Script" path="res://assets/core/player-controller/scripts/player.gd" id="1_bv7t4"] [ext_resource type="Script" path="res://assets/core/player-controller/scripts/player_interacter.gd" id="2_wvu3d"] [ext_resource type="Script" path="res://assets/core/player-controller/scripts/player_hud.gd" id="3_02ne1"] [ext_resource type="Shader" path="res://assets/core/player-controller/scenes/inverted_crosshair.gdshader" id="3_rakxt"] [ext_resource type="Texture2D" uid="uid://c3lblkyavjtol" path="res://assets/core/player-controller/2d_crosshair_dot.png" id="4_3uwxe"] +[ext_resource type="Script" path="res://assets/core/networking/scripts/Syncronizer.gd" id="6_hwrq2"] [sub_resource type="CapsuleMesh" id="CapsuleMesh_v7b3h"] radius = 0.35 @@ -22,9 +23,10 @@ shader = ExtResource("3_rakxt") [sub_resource type="ShaderMaterial" id="ShaderMaterial_0n7pd"] shader = ExtResource("3_rakxt") -[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("camera")] +[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("synchronizer", "camera")] collision_mask = 242 script = ExtResource("1_bv7t4") +synchronizer = NodePath("Syncronizer") camera = NodePath("Neck/Camera3D") [node name="PlayerTag" type="Label3D" parent="."] @@ -111,3 +113,6 @@ theme_override_font_sizes/font_size = 35 text = "999 FPS" horizontal_alignment = 2 vertical_alignment = 1 + +[node name="Syncronizer" type="Node" parent="."] +script = ExtResource("6_hwrq2") diff --git a/assets/core/player-controller/scripts/player.gd b/assets/core/player-controller/scripts/player.gd index a3eca63..2e0e428 100644 --- a/assets/core/player-controller/scripts/player.gd +++ b/assets/core/player-controller/scripts/player.gd @@ -1,9 +1,13 @@ class_name Player extends CharacterBody3D +@export var synchronizer: Syncronizer + var player_tag: Label3D var username: String = "" var is_piloting: bool = false +var is_network_authority: bool = false + @export_category("Player") @export_range(1, 35, 1) var speed: float = 5 # m/s @export_range(10, 400, 1) var acceleration: float = 100 # m/s^2 @@ -26,12 +30,18 @@ var jump_vel: Vector3 # Jumping velocity var current_ship: Ship -func _ready() -> void: - capture_mouse() +func _enter_tree() -> void: player_tag = get_node("PlayerTag") + player_tag.text = username + synchronizer.properties_to_sync = ["global_position", "global_rotation", "is_piloting"] + + if is_network_authority: + camera.current = true + capture_mouse() func _unhandled_input(event: InputEvent) -> void: + if !is_network_authority: return if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: if event is InputEventMouseMotion: is_using_joystick = false @@ -44,6 +54,7 @@ func _unhandled_input(event: InputEvent) -> void: func _input(event): + if !is_network_authority: return if event.is_action_pressed("esc") and Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: release_mouse() elif event.is_action_pressed("esc") and not Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: @@ -51,6 +62,7 @@ func _input(event): func _physics_process(delta: float) -> void: + if !is_network_authority: return if current_ship != null: if is_piloting: #if we are piloting a ship global_transform.basis = current_ship.global_transform.basis @@ -71,15 +83,29 @@ func _physics_process(delta: float) -> void: move_and_slide() +func _process(delta: float) -> void: + if !is_network_authority: return + + # Check if position changed and update synchronizer + if global_position != synchronizer.get_property("global_position"): + synchronizer.set_property("global_position", global_position) + + # Check if rotation changed and update synchronizer + if global_rotation != synchronizer.get_property("global_rotation"): + synchronizer.set_property("global_rotation", global_rotation) + func capture_mouse() -> void: + if !is_network_authority: return Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) func release_mouse() -> void: + if !is_network_authority: return Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) func _rotate_camera(sens_mod: float = 1.0) -> void: + if !is_network_authority: return var camera_sens_final = camera_sens if is_using_joystick: camera_sens_final = camera_sens * joystick_camera_sens_multiplier @@ -120,17 +146,20 @@ func _jump(delta: float) -> Vector3: func player_entered_ship(ship_global_position: Vector3, ship: Ship): + if !is_network_authority: return current_ship = ship print(ship.ship_id) print(global_position) func player_exited_ship(ship_global_position: Vector3, ship: Ship): + if !is_network_authority: return current_ship = null print(ship.ship_id) print(global_position) func set_is_piloting(state: bool): + if !is_network_authority: return is_piloting = state GameConsole.log_debug("player pilot state" + str(is_piloting)) From f91ceba3ee27da71c0d7f413f5f8681cbc9aaba8 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sat, 14 Dec 2024 22:07:41 -0600 Subject: [PATCH 10/30] Maybe fixed the sync? --- assets/core/networking/scripts/NetworkManager.gd | 2 ++ assets/core/player-controller/scenes/player.tscn | 9 ++------- assets/core/player-controller/scripts/player.gd | 6 +++++- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index 2f334a7..3f0954f 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -363,3 +363,5 @@ func _on_game_started(): level.add_child(player) if member["steam_id"] == steam_id: player.is_network_authority = true + else: + player.is_network_authority = false \ No newline at end of file diff --git a/assets/core/player-controller/scenes/player.tscn b/assets/core/player-controller/scenes/player.tscn index 17a93d3..1ab7490 100644 --- a/assets/core/player-controller/scenes/player.tscn +++ b/assets/core/player-controller/scenes/player.tscn @@ -1,11 +1,10 @@ -[gd_scene load_steps=12 format=3 uid="uid://c6w0ivy4hetrl"] +[gd_scene load_steps=11 format=3 uid="uid://c6w0ivy4hetrl"] [ext_resource type="Script" path="res://assets/core/player-controller/scripts/player.gd" id="1_bv7t4"] [ext_resource type="Script" path="res://assets/core/player-controller/scripts/player_interacter.gd" id="2_wvu3d"] [ext_resource type="Script" path="res://assets/core/player-controller/scripts/player_hud.gd" id="3_02ne1"] [ext_resource type="Shader" path="res://assets/core/player-controller/scenes/inverted_crosshair.gdshader" id="3_rakxt"] [ext_resource type="Texture2D" uid="uid://c3lblkyavjtol" path="res://assets/core/player-controller/2d_crosshair_dot.png" id="4_3uwxe"] -[ext_resource type="Script" path="res://assets/core/networking/scripts/Syncronizer.gd" id="6_hwrq2"] [sub_resource type="CapsuleMesh" id="CapsuleMesh_v7b3h"] radius = 0.35 @@ -23,10 +22,9 @@ shader = ExtResource("3_rakxt") [sub_resource type="ShaderMaterial" id="ShaderMaterial_0n7pd"] shader = ExtResource("3_rakxt") -[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("synchronizer", "camera")] +[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("camera")] collision_mask = 242 script = ExtResource("1_bv7t4") -synchronizer = NodePath("Syncronizer") camera = NodePath("Neck/Camera3D") [node name="PlayerTag" type="Label3D" parent="."] @@ -113,6 +111,3 @@ theme_override_font_sizes/font_size = 35 text = "999 FPS" horizontal_alignment = 2 vertical_alignment = 1 - -[node name="Syncronizer" type="Node" parent="."] -script = ExtResource("6_hwrq2") diff --git a/assets/core/player-controller/scripts/player.gd b/assets/core/player-controller/scripts/player.gd index 2e0e428..7ec5fc4 100644 --- a/assets/core/player-controller/scripts/player.gd +++ b/assets/core/player-controller/scripts/player.gd @@ -1,6 +1,6 @@ class_name Player extends CharacterBody3D -@export var synchronizer: Syncronizer +var synchronizer: Syncronizer var player_tag: Label3D var username: String = "" @@ -8,6 +8,7 @@ var is_piloting: bool = false var is_network_authority: bool = false + @export_category("Player") @export_range(1, 35, 1) var speed: float = 5 # m/s @export_range(10, 400, 1) var acceleration: float = 100 # m/s^2 @@ -31,6 +32,9 @@ var current_ship: Ship func _enter_tree() -> void: + synchronizer = Syncronizer.new() + add_child(synchronizer) + player_tag = get_node("PlayerTag") player_tag.text = username From 41c55e49a88d3401e12b7bd753083c6be3631c90 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sat, 14 Dec 2024 22:21:08 -0600 Subject: [PATCH 11/30] Adding some logging --- assets/core/networking/scripts/NetworkManager.gd | 1 + 1 file changed, 1 insertion(+) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index 3f0954f..b6ab361 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -307,6 +307,7 @@ func read_p2p_packet() -> void: if "message" in readable_data and readable_data["message"] == "property_update": if "node_id" in readable_data and "property_name" in readable_data and "value" in readable_data: property_update_received.emit(readable_data["node_id"], readable_data["property_name"], readable_data["value"]) + print("Received property update packet for node " + readable_data["node_id"] + " property " + readable_data["property_name"]) # Print the packet to output From 81d43934254b06165d5574230153ae1b73a04a6e Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sat, 14 Dec 2024 23:41:20 -0600 Subject: [PATCH 12/30] Remove sync node and added it to network manager --- .../core/networking/scripts/NetworkManager.gd | 8 ++- assets/core/networking/scripts/Syncronizer.gd | 35 ----------- .../core/player-controller/scripts/player.gd | 59 ++++++++----------- 3 files changed, 30 insertions(+), 72 deletions(-) delete mode 100644 assets/core/networking/scripts/Syncronizer.gd diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index b6ab361..3cd3830 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -365,4 +365,10 @@ func _on_game_started(): if member["steam_id"] == steam_id: player.is_network_authority = true else: - player.is_network_authority = false \ No newline at end of file + player.is_network_authority = false + + +func sync_property(node_id: int, property_name: String, value: Variant): + print("Syncing property: " + property_name + " for node: " + str(node_id)) + var packet_data = {"message":"property_update", "node_id":node_id, "property_name":property_name, "value":value} + send_p2p_packet(0, packet_data) \ No newline at end of file diff --git a/assets/core/networking/scripts/Syncronizer.gd b/assets/core/networking/scripts/Syncronizer.gd deleted file mode 100644 index 8121b22..0000000 --- a/assets/core/networking/scripts/Syncronizer.gd +++ /dev/null @@ -1,35 +0,0 @@ -extends Node - -class_name Syncronizer - -@export var properties_to_sync: Array = [] - -signal property_changed(node_id: int, property_name: String, value: Variant) - -func _ready() -> void: - # Connect the signal only once - if not is_connected("property_changed", Callable(self, "_on_property_changed")): - connect("property_changed", Callable(self, "_on_property_changed")) - - NetworkManager.property_update_received.connect(Callable(self, "_on_property_update_received")) - -func _on_property_changed(node_id: int, property_name: String, value: Variant) -> void: - if node_id == get_instance_id() and property_name in properties_to_sync: - if get(property_name) != value: - disconnect("property_changed", Callable(self, "_on_property_changed")) - set(property_name, value) - emit_signal("property_changed", node_id, property_name, value) - connect("property_changed", Callable(self, "_on_property_changed")) - -func set_property(property_name: String, value: Variant) -> void: - if property_name in properties_to_sync: - if get(property_name) != value: - disconnect("property_changed", Callable(self, "_on_property_changed")) - set(property_name, value) - emit_signal("property_changed", get_instance_id(), property_name, value) - connect("property_changed", Callable(self, "_on_property_changed")) - -func get_property(property_name: String) -> Variant: - if property_name in properties_to_sync: - return get(property_name) - return null diff --git a/assets/core/player-controller/scripts/player.gd b/assets/core/player-controller/scripts/player.gd index 7ec5fc4..2708567 100644 --- a/assets/core/player-controller/scripts/player.gd +++ b/assets/core/player-controller/scripts/player.gd @@ -1,14 +1,11 @@ class_name Player extends CharacterBody3D -var synchronizer: Syncronizer - var player_tag: Label3D var username: String = "" var is_piloting: bool = false var is_network_authority: bool = false - @export_category("Player") @export_range(1, 35, 1) var speed: float = 5 # m/s @export_range(10, 400, 1) var acceleration: float = 100 # m/s^2 @@ -24,23 +21,23 @@ var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity") var move_dir: Vector2 # Input direction for movement var look_dir: Vector2 # Input direction for look/aim -var walk_vel: Vector3 # Walking velocity -var grav_vel: Vector3 # Gravity velocity +var walk_vel: Vector3 # Walking velocity +var grav_vel: Vector3 # Gravity velocity var jump_vel: Vector3 # Jumping velocity var current_ship: Ship +var previous_global_position: Vector3 +var previous_global_rotation: Vector3 + +func _ready() -> void: + NetworkManager.property_update_received.connect(_on_property_update) func _enter_tree() -> void: - synchronizer = Syncronizer.new() - add_child(synchronizer) - player_tag = get_node("PlayerTag") player_tag.text = username - - synchronizer.properties_to_sync = ["global_position", "global_rotation", "is_piloting"] - - if is_network_authority: + + if is_network_authority: camera.current = true capture_mouse() @@ -56,7 +53,6 @@ func _unhandled_input(event: InputEvent) -> void: if Input.is_action_just_pressed("jump") and !is_piloting: jumping = true - func _input(event): if !is_network_authority: return if event.is_action_pressed("esc") and Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: @@ -64,60 +60,52 @@ func _input(event): elif event.is_action_pressed("esc") and not Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: capture_mouse() - func _physics_process(delta: float) -> void: if !is_network_authority: return if current_ship != null: if is_piloting: #if we are piloting a ship global_transform.basis = current_ship.global_transform.basis global_rotation.y = current_ship.global_rotation.y - else: #if we are NOT piloting a ship velocity = walk(delta) + _gravity(delta) + _jump(delta) global_rotation.y = current_ship.global_rotation.y - - else: velocity = walk(delta) + _gravity(delta) + _jump(delta) global_rotation.x = 0.0 global_rotation.z = 0.0 - + if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: _handle_joypad_camera_rotation(delta) move_and_slide() - func _process(delta: float) -> void: if !is_network_authority: return - # Check if position changed and update synchronizer - if global_position != synchronizer.get_property("global_position"): - synchronizer.set_property("global_position", global_position) - - # Check if rotation changed and update synchronizer - if global_rotation != synchronizer.get_property("global_rotation"): - synchronizer.set_property("global_rotation", global_rotation) + # If the global_position has changed, notify the NetworkManager + if previous_global_position != global_position: + NetworkManager.sync_property(get_instance_id(), "global_position", global_position) + previous_global_position = global_position + if previous_global_rotation != global_rotation: + NetworkManager.sync_property(get_instance_id(), "global_rotation", global_rotation) + previous_global_rotation = global_rotation func capture_mouse() -> void: if !is_network_authority: return Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) - func release_mouse() -> void: if !is_network_authority: return Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) - func _rotate_camera(sens_mod: float = 1.0) -> void: if !is_network_authority: return var camera_sens_final = camera_sens if is_using_joystick: camera_sens_final = camera_sens * joystick_camera_sens_multiplier - + camera.rotation.y -= look_dir.x * camera_sens_final * sens_mod camera.rotation.x = clamp(camera.rotation.x - look_dir.y * camera_sens_final * sens_mod, -1.5, 1.5) - func _handle_joypad_camera_rotation(delta: float, sens_mod: float = 1.0) -> void: var joypad_dir: Vector2 = Input.get_vector("look_left","look_right","look_up","look_down") if joypad_dir.length() > 0: @@ -125,7 +113,6 @@ func _handle_joypad_camera_rotation(delta: float, sens_mod: float = 1.0) -> void _rotate_camera(sens_mod) look_dir = Vector2.ZERO - func walk(delta: float) -> Vector3: if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: move_dir = Input.get_vector("move_left", "move_right", "move_forwards", "move_backwards") @@ -134,12 +121,10 @@ func walk(delta: float) -> Vector3: walk_vel = walk_vel.move_toward(walk_dir * speed * move_dir.length(), acceleration * delta) return walk_vel - func _gravity(delta: float) -> Vector3: grav_vel = Vector3.ZERO if is_on_floor() else grav_vel.move_toward(Vector3(0, velocity.y - gravity, 0), gravity * delta) return grav_vel - func _jump(delta: float) -> Vector3: if jumping: if is_on_floor(): jump_vel = Vector3(0, sqrt(4 * jump_height * gravity), 0) @@ -148,22 +133,24 @@ func _jump(delta: float) -> Vector3: jump_vel = Vector3.ZERO if is_on_floor() else jump_vel.move_toward(Vector3.ZERO, gravity * delta) return jump_vel - func player_entered_ship(ship_global_position: Vector3, ship: Ship): if !is_network_authority: return current_ship = ship print(ship.ship_id) print(global_position) - func player_exited_ship(ship_global_position: Vector3, ship: Ship): if !is_network_authority: return current_ship = null print(ship.ship_id) print(global_position) - func set_is_piloting(state: bool): if !is_network_authority: return is_piloting = state GameConsole.log_debug("player pilot state" + str(is_piloting)) + + +func _on_property_update(node_id: int, property_name: String, value: Variant) -> void: + if node_id == get_instance_id(): + set(property_name, value) \ No newline at end of file From 2f1e8944db1e681ddb327fd00bd28a8f852252e8 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sat, 14 Dec 2024 23:42:59 -0600 Subject: [PATCH 13/30] fix --- assets/core/networking/scripts/NetworkManager.gd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index 3cd3830..562ed8d 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -307,7 +307,7 @@ func read_p2p_packet() -> void: if "message" in readable_data and readable_data["message"] == "property_update": if "node_id" in readable_data and "property_name" in readable_data and "value" in readable_data: property_update_received.emit(readable_data["node_id"], readable_data["property_name"], readable_data["value"]) - print("Received property update packet for node " + readable_data["node_id"] + " property " + readable_data["property_name"]) + print("Received property update packet") # Print the packet to output @@ -371,4 +371,4 @@ func _on_game_started(): func sync_property(node_id: int, property_name: String, value: Variant): print("Syncing property: " + property_name + " for node: " + str(node_id)) var packet_data = {"message":"property_update", "node_id":node_id, "property_name":property_name, "value":value} - send_p2p_packet(0, packet_data) \ No newline at end of file + send_p2p_packet(0, packet_data) From f1998e4226d989eb3b9d772a31e27dd883476bf0 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sat, 14 Dec 2024 23:47:33 -0600 Subject: [PATCH 14/30] eeee --- assets/core/networking/scripts/NetworkManager.gd | 2 -- assets/core/player-controller/scripts/player.gd | 3 ++- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index 562ed8d..e289fd1 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -307,7 +307,6 @@ func read_p2p_packet() -> void: if "message" in readable_data and readable_data["message"] == "property_update": if "node_id" in readable_data and "property_name" in readable_data and "value" in readable_data: property_update_received.emit(readable_data["node_id"], readable_data["property_name"], readable_data["value"]) - print("Received property update packet") # Print the packet to output @@ -369,6 +368,5 @@ func _on_game_started(): func sync_property(node_id: int, property_name: String, value: Variant): - print("Syncing property: " + property_name + " for node: " + str(node_id)) var packet_data = {"message":"property_update", "node_id":node_id, "property_name":property_name, "value":value} send_p2p_packet(0, packet_data) diff --git a/assets/core/player-controller/scripts/player.gd b/assets/core/player-controller/scripts/player.gd index 2708567..e645c44 100644 --- a/assets/core/player-controller/scripts/player.gd +++ b/assets/core/player-controller/scripts/player.gd @@ -153,4 +153,5 @@ func set_is_piloting(state: bool): func _on_property_update(node_id: int, property_name: String, value: Variant) -> void: if node_id == get_instance_id(): - set(property_name, value) \ No newline at end of file + print("Received property update: " + property_name + " = " + str(value)) + set(property_name, value) From 1b76237d8bab8be64926b6efb89709854440490d Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sat, 14 Dec 2024 23:50:23 -0600 Subject: [PATCH 15/30] test --- assets/core/player-controller/scripts/player.gd | 1 + 1 file changed, 1 insertion(+) diff --git a/assets/core/player-controller/scripts/player.gd b/assets/core/player-controller/scripts/player.gd index e645c44..dc5233d 100644 --- a/assets/core/player-controller/scripts/player.gd +++ b/assets/core/player-controller/scripts/player.gd @@ -152,6 +152,7 @@ func set_is_piloting(state: bool): func _on_property_update(node_id: int, property_name: String, value: Variant) -> void: + printerr("Recieved property update but node_id is wrong?: " + property_name + " = " + str(value)) if node_id == get_instance_id(): print("Received property update: " + property_name + " = " + str(value)) set(property_name, value) From 13dda87ea692b96d6a710d32c27412be43f4248b Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sun, 15 Dec 2024 00:04:23 -0600 Subject: [PATCH 16/30] nodes n stuff --- assets/core/networking/scripts/NetworkManager.gd | 15 ++++++++++++++- assets/core/player-controller/scripts/player.gd | 13 ++++++++----- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index e289fd1..a64dcea 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -18,6 +18,8 @@ var steam_username: String = "" var avatar_texture_cache: Dictionary = {} var host_id: int = 0 +var node_map: Dictionary = {} + signal lobby_created(lobby_id: int) signal lobby_joined(lobby_id: int) signal user_joined_lobby(user_id: int) @@ -306,13 +308,22 @@ func read_p2p_packet() -> void: # Property update packet if "message" in readable_data and readable_data["message"] == "property_update": if "node_id" in readable_data and "property_name" in readable_data and "value" in readable_data: - property_update_received.emit(readable_data["node_id"], readable_data["property_name"], readable_data["value"]) + emit_signal("property_update_received", readable_data["node_id"], readable_data["property_name"], readable_data["value"]) + print("Received property update packet for node %d: %s = %s" % [readable_data["node_id"], readable_data["property_name"], readable_data["value"]])) # Print the packet to output print("Packet: %s" % readable_data) +func register_node(node_id: int, node: Node): + if node_id in node_map: + printerr("Node ID already registered.") + else: + node_map[node_id] = node + + + func request_player_avatar(user_id: int, size: int = 128) -> void: var avatar_texture: ImageTexture = null Steam.getPlayerAvatar(Steam.AVATAR_LARGE, user_id) @@ -370,3 +381,5 @@ func _on_game_started(): func sync_property(node_id: int, property_name: String, value: Variant): var packet_data = {"message":"property_update", "node_id":node_id, "property_name":property_name, "value":value} send_p2p_packet(0, packet_data) + + diff --git a/assets/core/player-controller/scripts/player.gd b/assets/core/player-controller/scripts/player.gd index dc5233d..45b02f3 100644 --- a/assets/core/player-controller/scripts/player.gd +++ b/assets/core/player-controller/scripts/player.gd @@ -32,6 +32,7 @@ var previous_global_rotation: Vector3 func _ready() -> void: NetworkManager.property_update_received.connect(_on_property_update) + NetworkManager.register_node(get_instance_id(), "Player") func _enter_tree() -> void: player_tag = get_node("PlayerTag") @@ -149,10 +150,12 @@ func set_is_piloting(state: bool): if !is_network_authority: return is_piloting = state GameConsole.log_debug("player pilot state" + str(is_piloting)) - - + + func _on_property_update(node_id: int, property_name: String, value: Variant) -> void: - printerr("Recieved property update but node_id is wrong?: " + property_name + " = " + str(value)) - if node_id == get_instance_id(): + if NetworkManager.node_map.has(node_id): + var node = NetworkManager.node_map[node_id] + node.set(property_name, value) print("Received property update: " + property_name + " = " + str(value)) - set(property_name, value) + else: + printerr("Received property update but node_id is wrong? Got " + str(get_instance_id()) + " but got " + str(node_id)) From 8b6dd0d92761e59acf4a9def66a82781eff642c2 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sun, 15 Dec 2024 00:22:47 -0600 Subject: [PATCH 17/30] uuid time --- assets/core/networking/scripts/NetworkManager.gd | 15 +++++++++------ assets/core/player-controller/scripts/player.gd | 5 +++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index a64dcea..6e79824 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -309,20 +309,23 @@ func read_p2p_packet() -> void: if "message" in readable_data and readable_data["message"] == "property_update": if "node_id" in readable_data and "property_name" in readable_data and "value" in readable_data: emit_signal("property_update_received", readable_data["node_id"], readable_data["property_name"], readable_data["value"]) - print("Received property update packet for node %d: %s = %s" % [readable_data["node_id"], readable_data["property_name"], readable_data["value"]])) + print("Received property update packet for node %d: %s = %s" % [readable_data["node_id"], readable_data["property_name"], readable_data["value"]]) # Print the packet to output print("Packet: %s" % readable_data) -func register_node(node_id: int, node: Node): - if node_id in node_map: - printerr("Node ID already registered.") - else: - node_map[node_id] = node +func register_node(node: Node) -> String: + var uuid = generate_uuid() + node_map[uuid] = node + return uuid +func generate_uuid() -> String: + var uuid = str(Time.get_unix_time_from_system()) + "-" + str(Time.get_ticks_msec()) + return uuid + func request_player_avatar(user_id: int, size: int = 128) -> void: var avatar_texture: ImageTexture = null diff --git a/assets/core/player-controller/scripts/player.gd b/assets/core/player-controller/scripts/player.gd index 45b02f3..88abc79 100644 --- a/assets/core/player-controller/scripts/player.gd +++ b/assets/core/player-controller/scripts/player.gd @@ -5,6 +5,7 @@ var username: String = "" var is_piloting: bool = false var is_network_authority: bool = false +var network_uuid: String = "" @export_category("Player") @export_range(1, 35, 1) var speed: float = 5 # m/s @@ -32,7 +33,7 @@ var previous_global_rotation: Vector3 func _ready() -> void: NetworkManager.property_update_received.connect(_on_property_update) - NetworkManager.register_node(get_instance_id(), "Player") + network_uuid = NetworkManager.register_node(self) func _enter_tree() -> void: player_tag = get_node("PlayerTag") @@ -158,4 +159,4 @@ func _on_property_update(node_id: int, property_name: String, value: Variant) -> node.set(property_name, value) print("Received property update: " + property_name + " = " + str(value)) else: - printerr("Received property update but node_id is wrong? Got " + str(get_instance_id()) + " but got " + str(node_id)) + printerr("Received property update but node_id is wrong? Expected " + str(network_uuid) + " but got " + str(node_id)) From 82ea695454592f81802ec711c5ec0bd2915ed15a Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sun, 15 Dec 2024 00:25:38 -0600 Subject: [PATCH 18/30] node id --- assets/core/networking/scripts/NetworkManager.gd | 4 ++-- assets/core/player-controller/scripts/player.gd | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index 6e79824..91df6f0 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -381,8 +381,8 @@ func _on_game_started(): player.is_network_authority = false -func sync_property(node_id: int, property_name: String, value: Variant): - var packet_data = {"message":"property_update", "node_id":node_id, "property_name":property_name, "value":value} +func sync_property(node_id: String, property_name: String, value: Variant): + var packet_data = {"message":"property_update", "node_id": node_id, "property_name":property_name, "value":value} send_p2p_packet(0, packet_data) diff --git a/assets/core/player-controller/scripts/player.gd b/assets/core/player-controller/scripts/player.gd index 88abc79..bac52a5 100644 --- a/assets/core/player-controller/scripts/player.gd +++ b/assets/core/player-controller/scripts/player.gd @@ -85,10 +85,10 @@ func _process(delta: float) -> void: # If the global_position has changed, notify the NetworkManager if previous_global_position != global_position: - NetworkManager.sync_property(get_instance_id(), "global_position", global_position) + NetworkManager.sync_property(network_uuid, "global_position", global_position) previous_global_position = global_position if previous_global_rotation != global_rotation: - NetworkManager.sync_property(get_instance_id(), "global_rotation", global_rotation) + NetworkManager.sync_property(network_uuid, "global_rotation", global_rotation) previous_global_rotation = global_rotation func capture_mouse() -> void: From 1a78b6abfdd4196dbdd05b5c2eebcc5db1b40a31 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sun, 15 Dec 2024 00:28:58 -0600 Subject: [PATCH 19/30] string --- assets/core/networking/scripts/NetworkManager.gd | 4 ++-- assets/core/player-controller/scripts/player.gd | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index 91df6f0..24fcb8d 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -309,11 +309,11 @@ func read_p2p_packet() -> void: if "message" in readable_data and readable_data["message"] == "property_update": if "node_id" in readable_data and "property_name" in readable_data and "value" in readable_data: emit_signal("property_update_received", readable_data["node_id"], readable_data["property_name"], readable_data["value"]) - print("Received property update packet for node %d: %s = %s" % [readable_data["node_id"], readable_data["property_name"], readable_data["value"]]) + #print("Received property update packet for node %d: %s = %s" % [readable_data["node_id"], readable_data["property_name"], readable_data["value"]]) # Print the packet to output - print("Packet: %s" % readable_data) + #print("Packet: %s" % readable_data) func register_node(node: Node) -> String: diff --git a/assets/core/player-controller/scripts/player.gd b/assets/core/player-controller/scripts/player.gd index bac52a5..b9e220d 100644 --- a/assets/core/player-controller/scripts/player.gd +++ b/assets/core/player-controller/scripts/player.gd @@ -153,7 +153,7 @@ func set_is_piloting(state: bool): GameConsole.log_debug("player pilot state" + str(is_piloting)) -func _on_property_update(node_id: int, property_name: String, value: Variant) -> void: +func _on_property_update(node_id: String, property_name: String, value: Variant) -> void: if NetworkManager.node_map.has(node_id): var node = NetworkManager.node_map[node_id] node.set(property_name, value) From a59c119de6ea88e040afa282029b08552be6ce76 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sun, 15 Dec 2024 00:32:40 -0600 Subject: [PATCH 20/30] numbers --- assets/core/networking/scripts/NetworkManager.gd | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index 24fcb8d..1198861 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -18,6 +18,8 @@ var steam_username: String = "" var avatar_texture_cache: Dictionary = {} var host_id: int = 0 +var uuid_counter: int = 0 + var node_map: Dictionary = {} signal lobby_created(lobby_id: int) @@ -316,9 +318,11 @@ func read_p2p_packet() -> void: #print("Packet: %s" % readable_data) + + func register_node(node: Node) -> String: var uuid = generate_uuid() - node_map[uuid] = node + uuid_counter += 1 return uuid From 1e6d5da3e2c170735a3901c9e8f1fbb7f44ba36f Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sun, 15 Dec 2024 00:34:56 -0600 Subject: [PATCH 21/30] the numbers mason --- assets/core/networking/scripts/NetworkManager.gd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index 1198861..4d47371 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -322,13 +322,13 @@ func read_p2p_packet() -> void: func register_node(node: Node) -> String: var uuid = generate_uuid() - uuid_counter += 1 + node_map[uuid] = node return uuid func generate_uuid() -> String: - var uuid = str(Time.get_unix_time_from_system()) + "-" + str(Time.get_ticks_msec()) - return uuid + uuid_counter += 1 + return uuid_counter func request_player_avatar(user_id: int, size: int = 128) -> void: From c0d128cafebf35de68f06b668da4abf9659233c0 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sun, 15 Dec 2024 00:35:35 -0600 Subject: [PATCH 22/30] str --- assets/core/networking/scripts/NetworkManager.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index 4d47371..ed6b6ac 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -328,7 +328,7 @@ func register_node(node: Node) -> String: func generate_uuid() -> String: uuid_counter += 1 - return uuid_counter + return str(uuid_counter) func request_player_avatar(user_id: int, size: int = 128) -> void: From f2b11e7c03c77093951f518c520e35329072c557 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sun, 15 Dec 2024 00:45:13 -0600 Subject: [PATCH 23/30] auth --- assets/core/networking/scripts/NetworkManager.gd | 10 +++------- assets/core/player-controller/scripts/player.gd | 6 +++++- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index ed6b6ac..6e4eb47 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -365,24 +365,20 @@ func start_game(): var packet_data = {"message":"start_game"} send_p2p_packet(0, packet_data) _on_game_started() - + func _on_game_started(): print("Game started.") var level: Node = level_scene.instantiate() get_tree().root.add_child(level) on_game_started.emit() - - + for member in lobby_members: var player: Player = player_scene.instantiate() player.name = "Player_" + str(member["steam_id"]) + player.steam_id = member["steam_id"] player.username = Steam.getFriendPersonaName(member["steam_id"]) level.add_child(player) - if member["steam_id"] == steam_id: - player.is_network_authority = true - else: - player.is_network_authority = false func sync_property(node_id: String, property_name: String, value: Variant): diff --git a/assets/core/player-controller/scripts/player.gd b/assets/core/player-controller/scripts/player.gd index b9e220d..4162a35 100644 --- a/assets/core/player-controller/scripts/player.gd +++ b/assets/core/player-controller/scripts/player.gd @@ -6,6 +6,7 @@ var is_piloting: bool = false var is_network_authority: bool = false var network_uuid: String = "" +var steam_id: int = 0 @export_category("Player") @export_range(1, 35, 1) var speed: float = 5 # m/s @@ -33,7 +34,10 @@ var previous_global_rotation: Vector3 func _ready() -> void: NetworkManager.property_update_received.connect(_on_property_update) - network_uuid = NetworkManager.register_node(self) + NetworkManager.register_node(self) + + if steam_id == NetworkManager.steam_id: + is_network_authority = true func _enter_tree() -> void: player_tag = get_node("PlayerTag") From 5ba26f1581addd96d0471ccc3d339a6eeb71f1cc Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sun, 15 Dec 2024 00:51:50 -0600 Subject: [PATCH 24/30] its bedtime --- assets/core/networking/scripts/NetworkManager.gd | 10 +++++++--- assets/core/player-controller/scripts/player.gd | 2 -- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index 6e4eb47..ed6b6ac 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -365,20 +365,24 @@ func start_game(): var packet_data = {"message":"start_game"} send_p2p_packet(0, packet_data) _on_game_started() - + func _on_game_started(): print("Game started.") var level: Node = level_scene.instantiate() get_tree().root.add_child(level) on_game_started.emit() - + + for member in lobby_members: var player: Player = player_scene.instantiate() player.name = "Player_" + str(member["steam_id"]) - player.steam_id = member["steam_id"] player.username = Steam.getFriendPersonaName(member["steam_id"]) level.add_child(player) + if member["steam_id"] == steam_id: + player.is_network_authority = true + else: + player.is_network_authority = false func sync_property(node_id: String, property_name: String, value: Variant): diff --git a/assets/core/player-controller/scripts/player.gd b/assets/core/player-controller/scripts/player.gd index 4162a35..1e3c60f 100644 --- a/assets/core/player-controller/scripts/player.gd +++ b/assets/core/player-controller/scripts/player.gd @@ -36,8 +36,6 @@ func _ready() -> void: NetworkManager.property_update_received.connect(_on_property_update) NetworkManager.register_node(self) - if steam_id == NetworkManager.steam_id: - is_network_authority = true func _enter_tree() -> void: player_tag = get_node("PlayerTag") From db0ea23ea841b0c0614422a88f3daa3aca958395 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sun, 15 Dec 2024 14:30:00 -0600 Subject: [PATCH 25/30] removing some packet logging --- assets/core/networking/scripts/NetworkManager.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index ed6b6ac..c078a6a 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -262,7 +262,7 @@ func send_p2p_packet(target: int, packet_data: Dictionary) -> void: for this_member in lobby_members: if this_member['steam_id'] != steam_id: Steam.sendP2PPacket(this_member['steam_id'], this_data, send_type, channel) - print("Sent packet to %s." % this_member['steam_name']) + #print("Sent packet to %s." % this_member['steam_name']) # Else send it to someone specific else: From 428c0a1f520f6a6667b86f2548ea2e0df7636d03 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sun, 15 Dec 2024 14:31:04 -0600 Subject: [PATCH 26/30] spacing in player --- assets/core/player-controller/scripts/player.gd | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/assets/core/player-controller/scripts/player.gd b/assets/core/player-controller/scripts/player.gd index 1e3c60f..9f4d0cb 100644 --- a/assets/core/player-controller/scripts/player.gd +++ b/assets/core/player-controller/scripts/player.gd @@ -45,6 +45,7 @@ func _enter_tree() -> void: camera.current = true capture_mouse() + func _unhandled_input(event: InputEvent) -> void: if !is_network_authority: return if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: @@ -57,6 +58,7 @@ func _unhandled_input(event: InputEvent) -> void: if Input.is_action_just_pressed("jump") and !is_piloting: jumping = true + func _input(event): if !is_network_authority: return if event.is_action_pressed("esc") and Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: @@ -64,6 +66,7 @@ func _input(event): elif event.is_action_pressed("esc") and not Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: capture_mouse() + func _physics_process(delta: float) -> void: if !is_network_authority: return if current_ship != null: @@ -82,6 +85,7 @@ func _physics_process(delta: float) -> void: _handle_joypad_camera_rotation(delta) move_and_slide() + func _process(delta: float) -> void: if !is_network_authority: return @@ -93,14 +97,17 @@ func _process(delta: float) -> void: NetworkManager.sync_property(network_uuid, "global_rotation", global_rotation) previous_global_rotation = global_rotation + func capture_mouse() -> void: if !is_network_authority: return Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) + func release_mouse() -> void: if !is_network_authority: return Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) + func _rotate_camera(sens_mod: float = 1.0) -> void: if !is_network_authority: return var camera_sens_final = camera_sens @@ -110,6 +117,7 @@ func _rotate_camera(sens_mod: float = 1.0) -> void: camera.rotation.y -= look_dir.x * camera_sens_final * sens_mod camera.rotation.x = clamp(camera.rotation.x - look_dir.y * camera_sens_final * sens_mod, -1.5, 1.5) + func _handle_joypad_camera_rotation(delta: float, sens_mod: float = 1.0) -> void: var joypad_dir: Vector2 = Input.get_vector("look_left","look_right","look_up","look_down") if joypad_dir.length() > 0: @@ -117,6 +125,7 @@ func _handle_joypad_camera_rotation(delta: float, sens_mod: float = 1.0) -> void _rotate_camera(sens_mod) look_dir = Vector2.ZERO + func walk(delta: float) -> Vector3: if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: move_dir = Input.get_vector("move_left", "move_right", "move_forwards", "move_backwards") @@ -125,10 +134,12 @@ func walk(delta: float) -> Vector3: walk_vel = walk_vel.move_toward(walk_dir * speed * move_dir.length(), acceleration * delta) return walk_vel + func _gravity(delta: float) -> Vector3: grav_vel = Vector3.ZERO if is_on_floor() else grav_vel.move_toward(Vector3(0, velocity.y - gravity, 0), gravity * delta) return grav_vel + func _jump(delta: float) -> Vector3: if jumping: if is_on_floor(): jump_vel = Vector3(0, sqrt(4 * jump_height * gravity), 0) @@ -137,18 +148,21 @@ func _jump(delta: float) -> Vector3: jump_vel = Vector3.ZERO if is_on_floor() else jump_vel.move_toward(Vector3.ZERO, gravity * delta) return jump_vel + func player_entered_ship(ship_global_position: Vector3, ship: Ship): if !is_network_authority: return current_ship = ship print(ship.ship_id) print(global_position) + func player_exited_ship(ship_global_position: Vector3, ship: Ship): if !is_network_authority: return current_ship = null print(ship.ship_id) print(global_position) + func set_is_piloting(state: bool): if !is_network_authority: return is_piloting = state From c04b596740fea78d8fa2cbfc52f919de15899915 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sun, 15 Dec 2024 14:32:17 -0600 Subject: [PATCH 27/30] remove some unused code --- assets/core/networking/scripts/NetworkManager.gd | 6 ------ 1 file changed, 6 deletions(-) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index c078a6a..48b3d39 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -312,12 +312,6 @@ func read_p2p_packet() -> void: if "node_id" in readable_data and "property_name" in readable_data and "value" in readable_data: emit_signal("property_update_received", readable_data["node_id"], readable_data["property_name"], readable_data["value"]) #print("Received property update packet for node %d: %s = %s" % [readable_data["node_id"], readable_data["property_name"], readable_data["value"]]) - - - # Print the packet to output - #print("Packet: %s" % readable_data) - - func register_node(node: Node) -> String: From e6288189ca48f0aafb47c47ed25a49981bd96169 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sun, 15 Dec 2024 14:56:08 -0600 Subject: [PATCH 28/30] IT WORKSSSSSS --- assets/core/networking/scripts/NetworkManager.gd | 4 +++- assets/core/player-controller/scripts/player.gd | 13 +++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index 48b3d39..312e073 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -372,11 +372,13 @@ func _on_game_started(): var player: Player = player_scene.instantiate() player.name = "Player_" + str(member["steam_id"]) player.username = Steam.getFriendPersonaName(member["steam_id"]) - level.add_child(player) + if member["steam_id"] == steam_id: player.is_network_authority = true else: player.is_network_authority = false + + level.add_child(player) func sync_property(node_id: String, property_name: String, value: Variant): diff --git a/assets/core/player-controller/scripts/player.gd b/assets/core/player-controller/scripts/player.gd index 9f4d0cb..a1aed63 100644 --- a/assets/core/player-controller/scripts/player.gd +++ b/assets/core/player-controller/scripts/player.gd @@ -34,18 +34,15 @@ var previous_global_rotation: Vector3 func _ready() -> void: NetworkManager.property_update_received.connect(_on_property_update) - NetworkManager.register_node(self) - + network_uuid = NetworkManager.register_node(self) -func _enter_tree() -> void: player_tag = get_node("PlayerTag") player_tag.text = username - - if is_network_authority: - camera.current = true - capture_mouse() - + if is_network_authority: + camera.make_current() + + func _unhandled_input(event: InputEvent) -> void: if !is_network_authority: return if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: From 76dc1ca164eb736be34a437e6c859196dcb2687c Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sun, 15 Dec 2024 15:38:45 -0600 Subject: [PATCH 29/30] removing print log --- assets/core/player-controller/scripts/player.gd | 1 - 1 file changed, 1 deletion(-) diff --git a/assets/core/player-controller/scripts/player.gd b/assets/core/player-controller/scripts/player.gd index a1aed63..805154e 100644 --- a/assets/core/player-controller/scripts/player.gd +++ b/assets/core/player-controller/scripts/player.gd @@ -170,6 +170,5 @@ func _on_property_update(node_id: String, property_name: String, value: Variant) if NetworkManager.node_map.has(node_id): var node = NetworkManager.node_map[node_id] node.set(property_name, value) - print("Received property update: " + property_name + " = " + str(value)) else: printerr("Received property update but node_id is wrong? Expected " + str(network_uuid) + " but got " + str(node_id)) From a852f9f7fa79b887db7f8281f271ac6bede5b64a Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sun, 15 Dec 2024 15:41:31 -0600 Subject: [PATCH 30/30] is_host in network --- assets/core/networking/scripts/NetworkManager.gd | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/assets/core/networking/scripts/NetworkManager.gd b/assets/core/networking/scripts/NetworkManager.gd index 312e073..edbc168 100644 --- a/assets/core/networking/scripts/NetworkManager.gd +++ b/assets/core/networking/scripts/NetworkManager.gd @@ -16,7 +16,7 @@ var lobby_type: int = Steam.LOBBY_TYPE_PUBLIC var steam_id: int = 0 var steam_username: String = "" var avatar_texture_cache: Dictionary = {} -var host_id: int = 0 +var is_host: bool = false var uuid_counter: int = 0 @@ -202,6 +202,7 @@ func _on_p2p_session_connect_fail(steam_id: int, session_error: int) -> void: func host_lobby(): if lobby_id == 0: Steam.createLobby(lobby_type, lobby_members_max) + is_host = true else: printerr("Cannot host lobby, already in a lobby")