using System.Collections; using System.Collections.Generic; using Unity.Multiplayer.Samples.BossRoom; using UnityEngine; using Unity.BossRoom.Gameplay.GameState; using Unity.Netcode; using VContainer.Unity; public class Scoreboard : MonoBehaviour { public List m_PlayerScoreComponents; public List playerItems; public GameObject playerItemPrefab; public Transform Parent; int index = 0; bool coroutineStarter = false; private IEnumerator Start() { Debug.Log("Scoreboard start1"); yield return new WaitUntil(() => coroutineStarter == true); Debug.Log("Scoreboard start2"); yield return new WaitForSeconds(2); Debug.Log("Scoreboard start3"); Starter(); Debug.Log("Scoreboard start4"); } public void ScoreBoardListFiller(NetworkObject playerObj) { m_PlayerScoreComponents.Add(playerObj.GetComponent()); m_PlayerScoreComponents[m_PlayerScoreComponents.Count - 1].m_index = index; index++; Instantiator(m_PlayerScoreComponents.Count); if (!coroutineStarter) { coroutineStarter = true; } } public void Starter() { StartCoroutine(ScoreUpdater()); } public void Instantiator(int count) { for (int i = 0; i < count; i++) { GameObject temp = Instantiate(playerItemPrefab, Parent); PlayerItem item = temp.GetComponent(); playerItems.Add(item); playerItems[playerItems.Count-1].PlayerScore.text = m_PlayerScoreComponents[i].CurrentScore.ToString(); playerItems[i].PlayerName.text = m_PlayerScoreComponents[i].serverCharacter.uIStateDisplayHandler.m_UIState.playerName.ToString(); } } IEnumerator ScoreUpdater() { yield return new WaitForSeconds(0.5f); Debug.Log("Scoreboard start5"); while (true) { yield return new WaitForSeconds(0.1f); m_PlayerScoreComponents.Sort((p1, p2) => p2.CurrentScore.CompareTo(p1.CurrentScore)); for (int i = 0; i < playerItems.Count; i++) { playerItems[i].transform.SetSiblingIndex(m_PlayerScoreComponents[i].m_index); } } } }