using Assets.Scenes.Ride.Scripts.Model.CyclingModels; using Assets.Scripts; 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; private void Awake() { cyclingController = FindObjectOfType(); var closeBtn = transform.Find("Close").gameObject; Head = transform.Find("Mine/Head").GetComponent(); Ranking = transform.Find("Mine/Ranking").GetComponent(); Timer = transform.Find("Mine/Timer").GetComponent(); UIManager.AddEvent(closeBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, Close); } float time = 1; private void Update() { time -= Time.deltaTime; while (time < 0) { Refresh(); time = 1; } } 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"); //当前用户排名 var currentRanking = list.Where(c => c.UserId == cyclingController.currentPlayer.UserId).FirstOrDefault(); if (currentRanking != null) { Utils.DisplayImage(Head, App.CurrentUser.WxHeadImg, true);//TODO:改造数据结构结果增加头像字段 Ranking.text = currentRanking.Index.ToString().PadLeft(3,'0'); Timer.text = currentRanking.TripTime; } //排名列表 var rankingList = FindObjectsOfType(); foreach (var item in list) { var finalRankingItemScript = rankingList.Where(c => c.UserId == item.UserId).FirstOrDefault(); //没有就创建 if (finalRankingItemScript == null) { var finalRankingItem = Instantiate(Resources.Load("UI/Prefab/Match/FinalRankingItem"), parent); finalRankingItemScript = finalRankingItem.GetComponent(); } //有就更新 finalRankingItemScript.setGap(item.Gap); finalRankingItemScript.setSource(item.DeviceType); finalRankingItemScript.setUserId(item.UserId); finalRankingItemScript.setRanking(item.Index); finalRankingItemScript.setHeartRate(item.HeartRate.ToString("f0")); 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"); } } }