From 310cbe52213d545903b606eba882cd6a0f9565c6 Mon Sep 17 00:00:00 2001 From: copygirl Date: Tue, 29 Jun 2021 10:07:55 +0200 Subject: [PATCH] Fix player not respawning when opening server --- src/Objects/Player.cs | 11 +++++++++-- src/Scenes/Client.cs | 2 +- src/Scenes/Server.cs | 2 +- src/World/World.cs | 7 ++++--- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/Objects/Player.cs b/src/Objects/Player.cs index d315e53..858543e 100644 --- a/src/Objects/Player.cs +++ b/src/Objects/Player.cs @@ -15,8 +15,8 @@ public class Player : KinematicBody2D, IInitializable public Sprite Sprite { get; private set; } public IItems Items { get; private set; } - public int NetworkID { get => int.Parse(Name); set => Name = value.ToString(); } - public bool IsLocal => NetworkID == GetTree().GetNetworkUniqueId(); + public bool IsLocal { get; private set; } + public int NetworkID { get; private set; } public string DisplayName { get => DisplayNameLabel.Text; set => DisplayNameLabel.Text = value; } public Color Color { get => Sprite.SelfModulate; set => Sprite.SelfModulate = value; } @@ -44,6 +44,13 @@ public class Player : KinematicBody2D, IInitializable RsetConfig(nameof(Health), MultiplayerAPI.RPCMode.Puppet); } + internal void SetNetworkID(bool isLocal, int networkID) + { + IsLocal = isLocal; + NetworkID = networkID; + Name = networkID.ToString(); + } + public override void _Ready() => Visible = this.GetGame() is Client; diff --git a/src/Scenes/Client.cs b/src/Scenes/Client.cs index 589de4c..8d571d7 100644 --- a/src/Scenes/Client.cs +++ b/src/Scenes/Client.cs @@ -76,7 +76,7 @@ public class Client : Game { if ((IntegratedServer.Server.IsRunning == true) && (_storedLocalPlayer != null)) { this.GetWorld().PlayerContainer.AddChild(_storedLocalPlayer); - _storedLocalPlayer.NetworkID = GetTree().GetNetworkUniqueId(); + _storedLocalPlayer.SetNetworkID(true, GetTree().GetNetworkUniqueId()); _storedLocalPlayer = null; } diff --git a/src/Scenes/Server.cs b/src/Scenes/Server.cs index d357568..5a1b9aa 100644 --- a/src/Scenes/Server.cs +++ b/src/Scenes/Server.cs @@ -76,7 +76,7 @@ public class Server : Game if ((LocalPlayer != null) && !_isLocalPlayerConnected && (Peer.GetPeerAddress(networkID) == "127.0.0.1")) { - LocalPlayer.NetworkID = networkID; + LocalPlayer.SetNetworkID(false, networkID); _isLocalPlayerConnected = true; } else { var world = this.GetWorld(); diff --git a/src/World/World.cs b/src/World/World.cs index d8b8426..e1d0170 100644 --- a/src/World/World.cs +++ b/src/World/World.cs @@ -89,12 +89,13 @@ public class World : Node [PuppetSync] public void SpawnPlayer(int networkID, Vector2 position) { - var player = SceneCache.Instance(); - player.NetworkID = networkID; + var player = SceneCache.Instance(); + var isLocal = networkID == GetTree().GetNetworkUniqueId(); + player.SetNetworkID(isLocal, networkID); player.Position = position; PlayerContainer.AddChild(player); - if (player.IsLocal) { + if (isLocal) { player.AddChild(new PlayerMovement { Name = "PlayerMovement" }); player.AddChild(new Camera2D { Name = "Camera", Current = true }); this.GetClient().FireLocalPlayerSpawned(player);