using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Networking;
|
|
|
|
|
|
namespace Multiplayer
|
|
{
|
|
|
|
public class PlayersManager : MonoSingleton<PlayersManager>
|
|
{
|
|
[SerializeField]
|
|
public GameObject LocalPlayerPrefab;
|
|
|
|
[SerializeField]
|
|
public GameObject RemotePlayerPrefab;
|
|
|
|
public Dictionary<byte, GameObject> RemotePlayers = new Dictionary<byte, GameObject>();
|
|
public GameObject LocalPlayer;
|
|
|
|
private void Start()
|
|
{
|
|
OnGameStart();
|
|
}
|
|
|
|
public void OnGameStart()
|
|
{
|
|
ClientManager.Instance.Client.RegisterHandler(PlayerMsgID.Position, RecievePosition);
|
|
InstantaiateLocalPlayer();
|
|
}
|
|
|
|
public void InstantaiateLocalPlayer()
|
|
{
|
|
LocalPlayer = GameObject.Instantiate(LocalPlayerPrefab,transform);
|
|
LocalPlayer.transform.position = Vector3.zero + Vector3.up * 5.0f;
|
|
ClientManager.Instance.SendMessage(PlayerMsgID.QueryPosition);
|
|
}
|
|
|
|
public void InstantiateRemotePlayer(byte playerID)
|
|
{
|
|
RemotePlayers.Add(playerID, Instantiate(RemotePlayerPrefab,transform));
|
|
}
|
|
|
|
public void SendPosition(Vector3 position) {
|
|
ClientManager.Instance.SendMessage(PlayerMsgID.Position, new VectorMsg(ClientManager.Instance.ID, position));
|
|
}
|
|
|
|
public void RecievePosition(NetworkMessage msg)
|
|
{
|
|
|
|
VectorMsg vectorMsg;
|
|
if (!Utility.ReadMessage<VectorMsg>(msg, out vectorMsg))
|
|
return;
|
|
|
|
if (!RemotePlayers.ContainsKey(vectorMsg.ID))
|
|
InstantiateRemotePlayer(vectorMsg.ID);
|
|
|
|
RemotePlayers[vectorMsg.ID].transform.position = vectorMsg.vector;
|
|
}
|
|
|
|
}
|
|
}
|