using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Networking;
|
|
|
|
namespace Networking.Client
|
|
{
|
|
[CreateAssetMenu(menuName = "Major Project/Networking/ClientObject", order = 150)]
|
|
public class ClientObject : ScriptableObject
|
|
{
|
|
|
|
#region Inspector Fields
|
|
[Header("Connection Settings")]
|
|
[SerializeField]
|
|
[Tooltip("Server Address to Connect to")]
|
|
private string ServerIP;
|
|
|
|
[SerializeField]
|
|
[Tooltip("Port to connect on")]
|
|
private int Port;
|
|
|
|
[SerializeField]
|
|
[Tooltip("Scene to return to if disconnected from server")]
|
|
private string DisconnectScene;
|
|
|
|
[Header("Player Settings")]
|
|
[SerializeField]
|
|
[Tooltip("Player Name")]
|
|
private string DisplayName;
|
|
|
|
[SerializeField]
|
|
[Tooltip("Player Animal")]
|
|
public string PlayerAnimal;
|
|
|
|
[SerializeField]
|
|
[Tooltip("Player Color")]
|
|
public Color PlayerColor;
|
|
|
|
[Header("Run Time Settings")]
|
|
[SerializeField]
|
|
[Tooltip("Client Inventory")]
|
|
protected Inventory Inventory;
|
|
|
|
[SerializeField]
|
|
[Tooltip("Current Time in Round")]
|
|
public float RoundTime;
|
|
|
|
[SerializeField]
|
|
[Tooltip("Current Score in Round")]
|
|
public float RoundScore;
|
|
|
|
[SerializeField]
|
|
[Tooltip("Remaining Lives")]
|
|
public float RemainingLives;
|
|
|
|
[SerializeField]
|
|
[Tooltip("A list of all connected clients")]
|
|
public ConnectedClients ConnectedClients;
|
|
|
|
#endregion Inspector Fields
|
|
|
|
#region ReadOnly Variables
|
|
public NetworkClient client { get; private set; }
|
|
public bool isConnected { get { return client != null && client.isConnected; } }
|
|
#endregion ReadOnly Variables
|
|
|
|
public void Connect(string serverAddress,int port)
|
|
{
|
|
Debug.Log("Connecting to server: " + serverAddress + ", " + port);
|
|
this.ServerIP = serverAddress;
|
|
this.Port = port;
|
|
client = new NetworkClient();
|
|
client.Configure(TransportConfigure.CreateConfigure(), 1);
|
|
|
|
ConnectedClients.SetUp(this);
|
|
|
|
client.Connect(serverAddress, port);
|
|
|
|
Inventory.Reset();
|
|
|
|
client.RegisterHandler(LogicProtocols.SendInventory, RecieveInventory);
|
|
client.RegisterHandler(LoginProtocols.SceneChange, RecieveSceneChange);
|
|
client.RegisterHandler(MsgType.Disconnect, OnDisconnect);
|
|
client.RegisterHandler(LogicProtocols.SendRoundTime, UpdateTime);
|
|
client.RegisterHandler(LogicProtocols.SendScore, UpdateScore);
|
|
client.RegisterHandler(LogicProtocols.SendLives, UpdateLives);
|
|
}
|
|
|
|
public void Stop()
|
|
{
|
|
this.Port = 0;
|
|
this.ServerIP = "";
|
|
client.Disconnect();
|
|
}
|
|
|
|
public void UpdatePlayerDetails(string DisplayName, Color PlayerColor, string PlayerAnimal)
|
|
{
|
|
this.PlayerAnimal = PlayerAnimal;
|
|
this.DisplayName = DisplayName;
|
|
this.PlayerColor = PlayerColor;
|
|
}
|
|
|
|
public void RecieveInventory(NetworkMessage msg)
|
|
{
|
|
Debug.Log("Recieving Inventory");
|
|
LogicProtocols.InventoryMsg inventoryMsg;
|
|
if (!msg.TryRead(out inventoryMsg))
|
|
return;
|
|
|
|
Inventory.SetItems(inventoryMsg.bagItems);
|
|
}
|
|
|
|
public void RecieveSceneChange(NetworkMessage msg)
|
|
{
|
|
LoginProtocols.SceneMsg sceneMsg;
|
|
if (!msg.TryRead(out sceneMsg))
|
|
return;
|
|
|
|
//Additive or single
|
|
UnityEngine.SceneManagement.LoadSceneMode mode = sceneMsg.Additive ? UnityEngine.SceneManagement.LoadSceneMode.Additive : UnityEngine.SceneManagement.LoadSceneMode.Single;
|
|
|
|
UnityEngine.SceneManagement.SceneManager.LoadScene(sceneMsg.Scene, mode);
|
|
}
|
|
|
|
public void OnDisconnect(NetworkMessage msg)
|
|
{
|
|
UnityEngine.SceneManagement.SceneManager.LoadScene(DisconnectScene);
|
|
ConnectedClients.Reset();
|
|
}
|
|
|
|
public void UpdateTime(NetworkMessage msg)
|
|
{
|
|
LogicProtocols.FloatMsg floatMsg;
|
|
if (!msg.TryRead(out floatMsg))
|
|
return;
|
|
|
|
RoundTime = floatMsg.Float;
|
|
}
|
|
|
|
public void UpdateScore(NetworkMessage msg)
|
|
{
|
|
LogicProtocols.FloatMsg floatMsg;
|
|
if (!msg.TryRead(out floatMsg))
|
|
return;
|
|
|
|
RoundScore = floatMsg.Float;
|
|
}
|
|
|
|
public void UpdateLives(NetworkMessage msg)
|
|
{
|
|
LogicProtocols.FloatMsg floatMsg;
|
|
if (!msg.TryRead(out floatMsg))
|
|
return;
|
|
|
|
RemainingLives = floatMsg.Float;
|
|
}
|
|
}
|
|
}
|