using Assets.Scenes.Ride.Scripts.Model.CyclingModels; using Assets.Scripts; using Assets.Scripts.UI.UIEffect; using System.Linq; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.SceneManagement; using UnityEngine.UI; namespace Assets.Scenes.Ride.Scripts { public class CompetitionResultFactory : MonoBehaviour { CyclingController cyclingController; RawImage Head; Text Ranking; Text Timer; GameObject Mine { get; set; } GameObject TitleImage { get; set; } GameObject WatchTitle { get; set; } GameObject RankingPanel { get; set; } RawImage TopHead { get; set; } RawImage SecondHead { get; set; } RawImage ThirdHead { get; set; } Image Top { get; set; } Sprite SpriteTop { get; set; } Sprite SpriteSecond { get; set; } Sprite SpriteThrid { get; set; } Text RankingTitle { get; set; } Text TimerTitle { get; set; } Text CloseTime { get; set; } Text CloseTitle { get; set; } private void Awake() { cyclingController = FindObjectOfType(); var closeBtn = transform.Find("Close").gameObject; Head = transform.Find("Mine/Head").GetComponent(); Ranking = transform.Find("Mine/Ranking").GetComponent(); RankingTitle = transform.Find("Mine/RankingTitle").GetComponent(); TimerTitle = transform.Find("Mine/TimerTitle").GetComponent(); Timer = transform.Find("Mine/Timer").GetComponent(); Top = transform.Find("Mine/TOP").GetComponent(); Mine = transform.Find("Mine").gameObject; RankingPanel = transform.Find("Ranking").gameObject; TopHead = transform.Find("Ranking/TopHead").GetComponent(); SecondHead = transform.Find("Ranking/SecondHead").GetComponent(); ThirdHead = transform.Find("Ranking/ThirdHead").GetComponent(); TitleImage = transform.Find("TitleImage").gameObject; WatchTitle = transform.Find("WatchTitle").gameObject; CloseTitle = transform.Find("CloseTitle").GetComponent(); CloseTime = transform.Find("CloseTime").GetComponent(); SpriteTop = Resources.Load("Images/Ride/Match/top-1"); SpriteSecond = Resources.Load("Images/Ride/Match/top-2"); SpriteThrid = Resources.Load("Images/Ride/Match/top-3"); UIManager.AddEvent(closeBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, Close); } float time = 1; private void Update() { var model = cyclingController.cyclingController as CompetitionModel; if (model != null) { var s = model.EndCountDown(); //显示关门时间 var isshow = s.Item3 && s.Item1 >= 0 && !cyclingController.isWatch; CloseTime.text = Helper.FormatTicks(s.Item1); CloseTitle.gameObject.SetActive(isshow); CloseTime.gameObject.SetActive(isshow); } time -= Time.deltaTime; while (time < 0) { Refresh(); time += 1; } } private Color RED = new Color(0.9764706f, 0.1882353f, 0.5254902f); private Color SHALLOW_RED = new Color(1f, 0.454902f, 0.5215687f); private Color PURPLE = new Color(0.1568628f, 0.4431373f, 0.8745098f); private Color SHALLOW_PURPLE = new Color(0.3843137f, 0.7764706f, 1f); private Color BLUE = new Color(0.4352941f, 0.3333333f, 0.9372549f); private Color SHALLOW_BLUE = new Color(0.772549f, 0.5529412f, 1f); private Color WHITE = new Color(1f, 1f, 1f); public void Refresh() { if (cyclingController.cyclingController is CompetitionModel model) { var list = model?.competitionRankingModel?.Results; if (list == null) return; var parent = transform.Find("ScrollView/Viewport/Content"); Mine.SetActive(!cyclingController.isWatch); RankingPanel.SetActive(cyclingController.isWatch); TitleImage.SetActive(!cyclingController.isWatch); WatchTitle.SetActive(cyclingController.isWatch); if (!cyclingController.isWatch) { //当前用户排名 var currentRanking = list.Where(c => c.UserId == cyclingController.currentPlayer.UserId).FirstOrDefault(); if (currentRanking != null) { Utils.DisplayImage(Head, currentRanking.WxHeadImg, true); Ranking.text = currentRanking.Index.ToString().PadLeft(3, '0'); Timer.text = currentRanking.TripTime; var uigradient = Mine.transform.GetComponent(); if (currentRanking.Index <=3) { TimerTitle.color = WHITE; RankingTitle.color = WHITE; } if (currentRanking.Index == 1) { uigradient.color1 = RED; uigradient.color2 = SHALLOW_RED; Top.sprite = SpriteTop; Top.gameObject.SetActive(true); } if (currentRanking.Index == 2) { uigradient.color1 = PURPLE; uigradient.color2 = SHALLOW_PURPLE; Top.sprite = SpriteSecond; Top.gameObject.SetActive(true); } if (currentRanking.Index == 3) { uigradient.color1 = BLUE; uigradient.color2 = SHALLOW_BLUE; Top.sprite = SpriteThrid; Top.gameObject.SetActive(true); } } } else { //观察者模式左边显示前三名 var topList = list.OrderBy(c=>c.Index).Take(3); foreach (var item in topList) { if (item.Index == 1) { Utils.DisplayImage(TopHead, item.WxHeadImg, true); var name = TopHead.transform.Find("Name").GetComponent(); name.text = item.Name; TopHead.gameObject.SetActive(true); } if (item.Index == 2) { Utils.DisplayImage(SecondHead, item.WxHeadImg, true); var name = SecondHead.transform.Find("Name").GetComponent(); name.text = item.Name; SecondHead.gameObject.SetActive(true); } if (item.Index == 3) { Utils.DisplayImage(ThirdHead, item.WxHeadImg, true); var name = ThirdHead.transform.Find("Name").GetComponent(); name.text = item.Name; ThirdHead.gameObject.SetActive(true); } } } //排名列表 var rankingList = FindObjectsOfType(); foreach (var item in list) { var finalRankingItemScript = rankingList.Where(c => c.UserId == item.UserId).FirstOrDefault(); //没有就创建 if (finalRankingItemScript == null) { #if UNITY_IOS || UNITY_ANDROID var finalRankingItem = Instantiate(Resources.Load("UI/Prefab/Match/Mobile/FinalRankingItem"), parent); #else var finalRankingItem = Instantiate(Resources.Load("UI/Prefab/Match/FinalRankingItem"), parent); #endif finalRankingItemScript = finalRankingItem.GetComponent(); } //有就更新 finalRankingItemScript.setGap(item.Gap); finalRankingItemScript.setSource(item.DeviceType); finalRankingItemScript.setUserId(item.UserId,item.WxHeadImg); finalRankingItemScript.setRanking(item.Index); finalRankingItemScript.setHeartRate(item.HeartRate); finalRankingItemScript.setName(item.Name); finalRankingItemScript.setPower(item.Power.ToString()); finalRankingItemScript.setRatio(item.WeightKg.ToString("f2")); finalRankingItemScript.setTimer(item.TripTime); finalRankingItemScript.transform.SetSiblingIndex(item.Index); } } } private void Close(BaseEventData baseEventData) { this.gameObject.SetActive(false); this.Destroy(); SceneManager.LoadScene("MainScene"); App.MainSceneParam["Name"] = "RaceHomePanel"; } } }