using Assets.Scenes.Ride.Scripts.Model; using Assets.Scenes.Ride.Scripts.Model.CyclingModels; using Assets.Scripts; using System.Collections.Generic; using System.Linq; using UnityEngine; namespace Assets.Scenes.Ride.Scripts { public class TopRankingFactory : BaseListFactory { private List rankingList {get;set;} private AbstractPlayer currentPlayer { get; set; } private int topSize = 6;//取前6名 protected override void Awake() { //base.Awake(); scroll = transform.Find("List").gameObject; if (scroll != null) { UIManager.AddEvent(scroll, UnityEngine.EventSystems.EventTriggerType.EndDrag, OnEndDrag); } parent = scroll.transform.Find("Viewport/Content"); cyclingController = FindObjectOfType(); playerController = FindObjectOfType(); currentPlayer = cyclingController.currentPlayer; #if UNITY_IOS || UNITY_ANDROID nearByItem = Resources.Load("UI/Prefab/Match/Mobile/TopRankingItem"); nearByMajorItem = Resources.Load("UI/Prefab/Match/Mobile/CompetitionRankingMajorItem"); #else nearByItem = Resources.Load("UI/Prefab/Match/TopRankingItem"); nearByMajorItem = Resources.Load("UI/Prefab/Match/CompetitionRankingMajorItem"); #endif } protected override void CreateList() { CompetitionModel s = cyclingController.cyclingController as CompetitionModel; var ss = s?.competitionRankingModel; rankingList = ss?.TopList; if (rankingList == null) return; ////删除 //var currentTopRankingList = FindObjectsOfType(); //foreach (var o in currentTopRankingList) //{ // var e = rankingList.Where(c => c.UserId == o.UserId).FirstOrDefault(); // if (e == null) // { // o.transform.gameObject.SetActive(false);//TODO:这里暂时不删除,删除对应的图片和脚本依赖这个对象;脚本提供一个dispose // bufferSize--; // } //} Utils.DestroyChildren(parent); for (int i = 0; i < rankingList.Count(); i++) { Create(rankingList[i]); } } private void Create(CompetitionTopModel item) { //var rankingList = FindObjectsOfType(); //var competitionRankingItem = rankingList.Where(c => c.rank == item.Index).FirstOrDefault(); ////如果当前有这个用户则更新没有则创建并setslibingindex //if (competitionRankingItem == null) //{ // //创建 // if (bufferSize < pageSize) // { // //情况一:还有足够的buffer,直接创建 // GameObject prefabItem = nearByItem; // GameObject newObj = (GameObject)Instantiate(prefabItem, parent); // competitionRankingItem = newObj.GetComponent(); // bufferSize++; // } // else // { // //情况二:没有足够的buffer,找到要被淘汰的buffer()最后一名 // competitionRankingItem = rankingList.OrderByDescending(c => c.rank).FirstOrDefault(); // } //} GameObject newObj = (GameObject)Instantiate(nearByItem, parent); var competitionRankingItem = newObj.GetComponent(); competitionRankingItem.setHead(item.Head); competitionRankingItem.setTimer(item.TripTime); competitionRankingItem.SetRank(item.Index); competitionRankingItem.setName(item.Name); competitionRankingItem.setUserId(item.UserId); var countryTexture = cyclingController.GetCountryImageByName(item.Country); competitionRankingItem.setCountry(countryTexture); competitionRankingItem.transform.SetSiblingIndex(item.Index); } } }