Fix player not respawning when opening server

main
copygirl 4 years ago
parent 1fa14e54d1
commit 310cbe5221
  1. 11
      src/Objects/Player.cs
  2. 2
      src/Scenes/Client.cs
  3. 2
      src/Scenes/Server.cs
  4. 7
      src/World/World.cs

@ -15,8 +15,8 @@ public class Player : KinematicBody2D, IInitializable
public Sprite Sprite { get; private set; } public Sprite Sprite { get; private set; }
public IItems Items { get; private set; } public IItems Items { get; private set; }
public int NetworkID { get => int.Parse(Name); set => Name = value.ToString(); } public bool IsLocal { get; private set; }
public bool IsLocal => NetworkID == GetTree().GetNetworkUniqueId(); public int NetworkID { get; private set; }
public string DisplayName { get => DisplayNameLabel.Text; set => DisplayNameLabel.Text = value; } public string DisplayName { get => DisplayNameLabel.Text; set => DisplayNameLabel.Text = value; }
public Color Color { get => Sprite.SelfModulate; set => Sprite.SelfModulate = 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); RsetConfig(nameof(Health), MultiplayerAPI.RPCMode.Puppet);
} }
internal void SetNetworkID(bool isLocal, int networkID)
{
IsLocal = isLocal;
NetworkID = networkID;
Name = networkID.ToString();
}
public override void _Ready() public override void _Ready()
=> Visible = this.GetGame() is Client; => Visible = this.GetGame() is Client;

@ -76,7 +76,7 @@ public class Client : Game
{ {
if ((IntegratedServer.Server.IsRunning == true) && (_storedLocalPlayer != null)) { if ((IntegratedServer.Server.IsRunning == true) && (_storedLocalPlayer != null)) {
this.GetWorld().PlayerContainer.AddChild(_storedLocalPlayer); this.GetWorld().PlayerContainer.AddChild(_storedLocalPlayer);
_storedLocalPlayer.NetworkID = GetTree().GetNetworkUniqueId(); _storedLocalPlayer.SetNetworkID(true, GetTree().GetNetworkUniqueId());
_storedLocalPlayer = null; _storedLocalPlayer = null;
} }

@ -76,7 +76,7 @@ public class Server : Game
if ((LocalPlayer != null) && !_isLocalPlayerConnected && if ((LocalPlayer != null) && !_isLocalPlayerConnected &&
(Peer.GetPeerAddress(networkID) == "127.0.0.1")) { (Peer.GetPeerAddress(networkID) == "127.0.0.1")) {
LocalPlayer.NetworkID = networkID; LocalPlayer.SetNetworkID(false, networkID);
_isLocalPlayerConnected = true; _isLocalPlayerConnected = true;
} else { } else {
var world = this.GetWorld(); var world = this.GetWorld();

@ -89,12 +89,13 @@ public class World : Node
[PuppetSync] [PuppetSync]
public void SpawnPlayer(int networkID, Vector2 position) public void SpawnPlayer(int networkID, Vector2 position)
{ {
var player = SceneCache<Player>.Instance(); var player = SceneCache<Player>.Instance();
player.NetworkID = networkID; var isLocal = networkID == GetTree().GetNetworkUniqueId();
player.SetNetworkID(isLocal, networkID);
player.Position = position; player.Position = position;
PlayerContainer.AddChild(player); PlayerContainer.AddChild(player);
if (player.IsLocal) { if (isLocal) {
player.AddChild(new PlayerMovement { Name = "PlayerMovement" }); player.AddChild(new PlayerMovement { Name = "PlayerMovement" });
player.AddChild(new Camera2D { Name = "Camera", Current = true }); player.AddChild(new Camera2D { Name = "Camera", Current = true });
this.GetClient().FireLocalPlayerSpawned(player); this.GetClient().FireLocalPlayerSpawned(player);

Loading…
Cancel
Save