|
|
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using UnityEngine;
-
- public class CreditUIController : MonoBehaviour
- {
-
- [SerializeField]
- private PlayerList m_allPlayers;
-
- [SerializeField]
- private GameObject m_playerPrefab;
-
- [SerializeField]
- private RectTransform winnerPos;
- [SerializeField]
- private RectTransform losePos;
-
- [SerializeField]
- private float waitTime = 1;
-
- [SerializeField]
- private float creditDisplayTime = 1;
-
- [SerializeField]
- public List<CreditReferences> m_CreditReferences;
-
- [SerializeField]
- public List<CreditData> m_Credits;
-
- private int Count;
-
-
- private void Start()
- {
- StartCoroutine(DisplaySlow(waitTime));
- StartCoroutine(DisplayCredits(creditDisplayTime));
- }
-
- [ContextMenu("display All players")]
- private void DisplayAllPlayers()
- {
- int max = m_allPlayers.AllPlayers.Select(p => p.Score).Max();
- int min = m_allPlayers.AllPlayers.Select(p => p.Score).Min();
-
- foreach (var data in m_allPlayers.AllPlayers)
- {
- DisplayScore(data, max, min);
- }
- }
-
-
- private IEnumerator DisplaySlow(float timebetween = 1)
- {
- int max = m_allPlayers.AllPlayers.Select(p => p.Score).Max();
- int min = m_allPlayers.AllPlayers.Select(p => p.Score).Min();
-
- foreach (var data in m_allPlayers.AllPlayers.OrderBy(p => p.Score))
- {
- yield return new WaitForSeconds(timebetween);
- DisplayScore(data, max, min);
- }
- }
-
- private IEnumerator DisplayCredits(float displayTime)
- {
-
- float totalTime = displayTime / m_CreditReferences.Count;
-
-
- while (true)
- {
- CreditReferences reference = m_CreditReferences[Count%m_CreditReferences.Count];
- CreditData data = m_Credits[Count % m_Credits.Count];
- Count++;
-
- reference.Title.text = data.Title;
- reference.Credit.text = data.Credit;
-
- yield return new WaitForSeconds(totalTime);
- }
- }
-
-
- private void DisplayScore(PlayerData player, int maxScore, int minScore)
- {
-
- player.Input.SwitchCurrentActionMap("JoinMenu");
-
- float ratio = 0.5f;
- if (maxScore != minScore)
- ratio = (float)(player.Score - minScore) / (maxScore - minScore);
-
- Vector3 pos = Vector3.Lerp(losePos.position, winnerPos.position, ratio);
- pos.x = Random.Range((Screen.width / 4f), Screen.width);
-
- GameObject newPlayer = Instantiate(m_playerPrefab);
- newPlayer.transform.parent = (m_playerPrefab.transform.parent);
-
- newPlayer.transform.position = pos;
- newPlayer.transform.Rotate(Vector3.forward, Random.Range(-20.0f, 20.0f));
-
- if (Random.Range(0, 2) > 0)
- {
- newPlayer.transform.localScale.Scale(new Vector3(-1, 1, 1));
- newPlayer.GetComponentInChildren<TMPro.TextMeshProUGUI>().transform.localScale.Scale(new Vector3(-1, 1, 1));
- }
-
-
-
- newPlayer.GetComponent<PlayerJoinIcon>().Initialise(player);
- newPlayer.GetComponentInChildren<TMPro.TextMeshProUGUI>().text = player.Score.ToString();
-
- newPlayer.SetActive(true);
- }
-
- [System.Serializable]
- public struct CreditReferences
- {
- public TMPro.TextMeshProUGUI Title;
- public TMPro.TextMeshProUGUI Credit;
- }
-
-
- [System.Serializable]
- public struct CreditData
- {
- public string Title;
- public string Credit;
- }
-
- }
|