You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

105 lines
3.1 KiB

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.Networking;
  5. namespace Networking.Client
  6. {
  7. [CreateAssetMenu(menuName = "Major Project/Networking/ClientObject", order = 150)]
  8. public class ClientObject : ScriptableObject
  9. {
  10. #region Inspector Fields
  11. [Header("Connection Settings")]
  12. [SerializeField]
  13. [Tooltip("Server Address to Connect to")]
  14. private string ServerIP;
  15. [SerializeField]
  16. [Tooltip("Port to connect on")]
  17. private int Port;
  18. [SerializeField]
  19. [Tooltip("Scene to return to if disconnected from server")]
  20. private string DisconnectScene;
  21. [Header("Player Settings")]
  22. [SerializeField]
  23. [Tooltip("Player Name")]
  24. private string DisplayName;
  25. [SerializeField]
  26. [Tooltip("Player Color")]
  27. private Color PlayerColor;
  28. [Header("Run Time Settings")]
  29. [SerializeField]
  30. [Tooltip("Client Inventory")]
  31. protected Inventory Inventory;
  32. #endregion Inspector Fields
  33. #region ReadOnly Variables
  34. public NetworkClient client { get; private set; }
  35. public bool isConnected { get { return client != null && client.isConnected; } }
  36. #endregion ReadOnly Variables
  37. public void Connect(string serverAddress,int port)
  38. {
  39. Debug.Log("Connecting to server: " + serverAddress + ", " + port);
  40. this.ServerIP = serverAddress;
  41. this.Port = port;
  42. client = new NetworkClient();
  43. client.Configure(TransportConfigure.CreateConfigure(), 1);
  44. client.Connect(serverAddress, port);
  45. Inventory.Reset();
  46. client.RegisterHandler(LogicProtocols.SendInventory, RecieveInventory);
  47. client.RegisterHandler(LoginProtocols.SceneChange, RecieveSceneChange);
  48. client.RegisterHandler(MsgType.Disconnect, OnDisconnect);
  49. }
  50. public void Stop()
  51. {
  52. client.Disconnect();
  53. }
  54. public void UpdatePlayerDetails(string DisplayName, Color PlayerColor)
  55. {
  56. this.DisplayName = DisplayName;
  57. this.PlayerColor = PlayerColor;
  58. }
  59. public void RecieveInventory(NetworkMessage msg)
  60. {
  61. Debug.Log("Recieving Inventory");
  62. LogicProtocols.InventoryMsg inventoryMsg;
  63. if (!msg.TryRead(out inventoryMsg))
  64. return;
  65. Inventory.SetItems(inventoryMsg.bagItems);
  66. }
  67. public void RecieveSceneChange(NetworkMessage msg)
  68. {
  69. LoginProtocols.SceneMsg sceneMsg;
  70. if (!msg.TryRead(out sceneMsg))
  71. return;
  72. //Additive or single
  73. UnityEngine.SceneManagement.LoadSceneMode mode = sceneMsg.Additive ? UnityEngine.SceneManagement.LoadSceneMode.Additive : UnityEngine.SceneManagement.LoadSceneMode.Single;
  74. UnityEngine.SceneManagement.SceneManager.LoadScene(sceneMsg.Scene, mode);
  75. }
  76. public void OnDisconnect(NetworkMessage msg)
  77. {
  78. UnityEngine.SceneManagement.SceneManager.LoadScene(DisconnectScene);
  79. }
  80. }
  81. }