using Fusion; using Fusion.Addons.ConnectionManagerAddon; using Fusion.XR.Host.Rig; using Photon.Voice.Unity; using RTLTMPro; using TMPro; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.UI; using UnityEngine.XR; public class playerManager : NetworkBehaviour { public static playerManager instance; public int selectedMic; // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { instance = this; selectedMic = PlayerPrefs.GetInt("Mic", 0); speaker = GetComponentInChildren(); rightController = InputDevices.GetDeviceAtXRNode(XRNode.RightHand); leftController = InputDevices.GetDeviceAtXRNode(XRNode.LeftHand); } private UnityEngine.XR.InputDevice rightController; private UnityEngine.XR.InputDevice leftController; void ChangeLayerRecursively(GameObject obj, string newLayer) { obj.layer = LayerMask.NameToLayer(newLayer); foreach (Transform child in obj.transform) { ChangeLayerRecursively(child.gameObject, newLayer); } } Speaker speaker; // Update is called once per frame void Update() { // print(player.PlayerId + "==" + Runner.LocalPlayer.PlayerId); if(Runner.IsConnectedToServer) if (Object.InputAuthority.PlayerId==Runner.LocalPlayer.PlayerId) { PlayerId = EN.instance.SelectedUser.id.ToString(); Nickname = EN.instance.Me.first_name + " " + EN.instance.Me.last_name; RPC_SetPlayerName(PlayerId.Value); } // if(Object.HasInputAuthority) // RPC_RequestCharacterSpawn(player); NetworkObject networkObject = GetComponent(); // اگر آبجکت دارای State Authority باشد (یعنی این بازیکن صاحب آن است) if (networkObject != null && networkObject.HasInputAuthority) ChangeLayerRecursively(gameObject, "invisible"); if (speaker == null) speaker = GetComponentInChildren(); else transform.Find("Headset/HeadsetVisuals/PhotonDummy/board/back").GetComponent().color= speaker.IsPlaying?Color.green:Color.grey; transform.Find("Headset/HeadsetVisuals/PhotonDummy/board/back1").GetComponent().color= speaker.IsPlaying?Color.green:Color.grey; transform.Find("Headset/HeadsetVisuals/PhotonDummy/board/name").GetComponent().text = Nickname.ToString(); for (int i = 0; i < EN.instance.users.Count; i++) if (transform.Find(i.ToString())) if (i != Id) transform.Find(i.ToString()).gameObject.SetActive(false); else transform.Find(i.ToString()).gameObject.SetActive(true); float gripValue; if(selectedMic==0) ConnectionManager.instance.GetComponentInChildren().TransmitEnabled = true; else if (selectedMic == 1) ConnectionManager.instance.GetComponentInChildren().TransmitEnabled = leftController.TryGetFeatureValue(UnityEngine.XR.CommonUsages.primaryButton, out bool isPressed) && isPressed; else ConnectionManager.instance.GetComponentInChildren().TransmitEnabled = false; //(rightController.TryGetFeatureValue(UnityEngine.XR.CommonUsages.grip, out gripValue) && gripValue > 0.5f); try { Id = int.Parse(PlayerId.Value); } catch { } } // [Networked] //public NetworkString<_16> PlayerName { get; set; } // نام کاربر با حداکثر 16 کاراکتر [Networked] public NetworkString<_16> PlayerId { get; set; } // نام کاربر با حداکثر 16 کاراکتر [Networked, OnChangedRender(nameof(NicknameChanged))] public NetworkString<_32> Nickname { get; set; } private void NicknameChanged() { if (transform.Find("Headset/HeadsetVisuals/PhotonDummy/board/name")) { transform.Find("Headset/HeadsetVisuals/PhotonDummy/board/name").GetComponent().text = Nickname.ToString(); } } [Rpc(RpcSources.All, RpcTargets.All)] public void RPC_SetPlayerName(string id) { PlayerId = id; // print("I Recevie " + id); } public int Id; public PlayerRef player; public override void Spawned() { if (Object.HasStateAuthority) { Invoke("SpawnPlayer", 2f); } } public void SpawnPlayer(){ this.gameObject.transform.position = ConnectionManager.instance.pos.position; } }