using System; using TMPro; using Unity.BossRoom.Gameplay.GameplayObjects.Character; using Unity.BossRoom.Utils; using Unity.Netcode; using UnityEngine; namespace Unity.BossRoom.Gameplay.UI { /// /// Class containing references to UI children that we can display. Both are disabled by default on prefab. /// public class UIStateDisplay : MonoBehaviour { public SwapConfirmationPanel swapConfirmationPanel; public string playerName; [SerializeField] UIName m_UIName; [SerializeField] UIHealth m_UIHealth; public FloatingScore floatingScorePrefab; private void OnEnable() { ScoreManager.OnScoreUpdated += OnScoreChanged; } private void OnDisable() { ScoreManager.OnScoreUpdated -= OnScoreChanged; } public void DisplayName(NetworkVariable networkedName) { m_UIName.gameObject.SetActive(true); m_UIName.Initialize(networkedName); playerName=networkedName.Value.ToString(); //var servercharacterName = GetComponentInParent(); //servercharacterName.name = playerName; swapConfirmationPanel.gameObject.name += networkedName.Value; } public void DisplayHealth(NetworkVariable networkedHealth, int maxValue) { m_UIHealth.gameObject.SetActive(true); m_UIHealth.Initialize(networkedHealth, maxValue); } public void HideHealth() { m_UIHealth.gameObject.SetActive(false); } [SerializeField] private Transform scoreEffectSpawnPoint; // position above the head for the effect private int previousScore = 0; // Called when the NetworkVariable changes. private void OnScoreChanged(ulong oldScore, int newScore) { // Trigger a floating effect on all clients. // Using a ClientRpc so that every client sees the same effect. // if (NetworkManager.Singleton.IsServer) { RpcPlayScoreAnimationClientRpc(newScore, scoreEffectSpawnPoint); } } // This ClientRpc will be executed on all clients. [ClientRpc] private void RpcPlayScoreAnimationClientRpc(int change, UnityEngine.Transform spawnPosition) { // Instantiate the floating score effect prefab on each client. FloatingScore effect = Instantiate(floatingScorePrefab, spawnPosition); effect.transform.localPosition = Vector3.zero; effect.transform.localEulerAngles= Vector3.zero; effect.Initialize(change); } } }