summaryrefslogtreecommitdiff
path: root/Landfall.Network/NetworkController.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Landfall.Network/NetworkController.cs')
-rw-r--r--Landfall.Network/NetworkController.cs65
1 files changed, 65 insertions, 0 deletions
diff --git a/Landfall.Network/NetworkController.cs b/Landfall.Network/NetworkController.cs
new file mode 100644
index 0000000..22791ab
--- /dev/null
+++ b/Landfall.Network/NetworkController.cs
@@ -0,0 +1,65 @@
+using UnityEngine;
+
+namespace Landfall.Network;
+
+public class NetworkController : MonoBehaviour
+{
+ [SerializeField]
+ private MonoBehaviour[] m_ScriptsToDisable;
+
+ [SerializeField]
+ private Camera[] m_CamerasToDisable;
+
+ [SerializeField]
+ private Transform m_Hip;
+
+ private bool m_HasControl;
+
+ private NetworkManager m_NetworkManager;
+
+ private string m_Name;
+
+ public void Init(NetworkManager manager, bool hasControl, string playerName)
+ {
+ m_NetworkManager = manager;
+ m_HasControl = hasControl;
+ GetComponent<HasControl>().ChangeControl(m_HasControl);
+ m_Name = playerName;
+ }
+
+ private void StripPlayer()
+ {
+ if (!m_HasControl)
+ {
+ MonoBehaviour[] scriptsToDisable = m_ScriptsToDisable;
+ foreach (MonoBehaviour monoBehaviour in scriptsToDisable)
+ {
+ monoBehaviour.enabled = false;
+ }
+ Camera[] camerasToDisable = m_CamerasToDisable;
+ foreach (Camera camera in camerasToDisable)
+ {
+ camera.enabled = false;
+ }
+ }
+ }
+
+ private void Update()
+ {
+ if (m_HasControl)
+ {
+ SendUpdatesToServer();
+ }
+ }
+
+ private void SendUpdatesToServer()
+ {
+ Vector3 position = m_Hip.position;
+ m_NetworkManager.UpdateFromLocalClient(position);
+ }
+
+ public void UpdatePosition(Vector3 newPos)
+ {
+ base.transform.position = newPos;
+ }
+}