AmazingAlek f239acd724
cleanup after disconnected players (#62)
* * removed need for NetPlayer
* split JoinPlayer into JoinPlayer and LeavePlayer
* cleanup of player and ship in LeavePlayer

* null checks in anim mirror

* it kinda works

* resetting some more stuff when DCing

* cleaning up ship

* removed some unused code

* cleanup

* cleaning up all client owned objects

* resetting (mostly) anim stuff when leaving

* setting local instance on player transform sync right away

Co-authored-by: Ricardo Lopes <Raicuparta@users.noreply.github.com>
2020-03-07 16:42:43 +01:00

54 lines
1.6 KiB
C#

using System.Collections;
using System.Collections.Generic;
using QSB.Messaging;
using QSB.TransformSync;
using UnityEngine;
using UnityEngine.Networking;
namespace QSB.Events
{
public class PlayerJoin : NetworkBehaviour
{
public static readonly Dictionary<uint, string> PlayerNames = new Dictionary<uint, string>();
public static string MyName { get; private set; }
private MessageHandler<JoinMessage> _joinHandler;
private void Awake()
{
_joinHandler = new MessageHandler<JoinMessage>();
_joinHandler.OnClientReceiveMessage += OnClientReceiveMessage;
_joinHandler.OnServerReceiveMessage += OnServerReceiveMessage;
}
public void Join(string playerName)
{
MyName = playerName;
StartCoroutine(SendJoinMessage(playerName));
}
private IEnumerator SendJoinMessage(string playerName)
{
yield return new WaitUntil(() => PlayerTransformSync.LocalInstance != null);
var message = new JoinMessage
{
PlayerName = playerName,
SenderId = PlayerTransformSync.LocalInstance.netId.Value
};
_joinHandler.SendToServer(message);
}
private void OnServerReceiveMessage(JoinMessage message)
{
_joinHandler.SendToAll(message);
}
private void OnClientReceiveMessage(JoinMessage message)
{
PlayerNames[message.SenderId] = message.PlayerName;
DebugLog.All(message.PlayerName, "joined!");
}
}
}