diff options
Diffstat (limited to 'Landfall.Network/NetworkController.cs')
-rw-r--r-- | Landfall.Network/NetworkController.cs | 65 |
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; + } +} |