using Assets.Scenes.Ride.Scripts.Model; using System.Linq; using UnityEngine; using UnityEngine.UI; namespace Assets.Scenes.Ride.Scripts { public class NearByFactory : BaseListFactory { private Text Title { get; set; } private Text OnlineUserNum { get; set; } protected override void Awake() { scroll = transform.Find("NearByScrollView").gameObject; if (scroll != null) { UIManager.AddEvent(scroll, UnityEngine.EventSystems.EventTriggerType.EndDrag, OnEndDrag); } parent = scroll.transform.Find("Viewport/Content"); cyclingController = FindObjectOfType(); playerController = FindObjectOfType(); nearByItem = Resources.Load("UI/Prefab/Ride/NearbyItem"); nearByMajorItem = Resources.Load("UI/Prefab/Ride/NearbyMajorItem"); Title = transform.Find("Title").GetComponent(); OnlineUserNum = transform.Find("NearByView/OnlineUserNum").GetComponent(); pageSize = 999;//开启无线下拉 } protected override void CreateList() { OnlineUserNum.text = MapUDPService.GetNearRiderCount().ToString(); var nearList = MapUDPService.GetNearRiderData(pageIndex, pageSize, new double[] { playerController.Currentlatlong.x, playerController.Currentlatlong.y }); totalPages = MapUDPService.GetNearRiderCount(); for (int i = 0; i < nearList.Count(); i++) { Create(nearList[i]); } } private void Create(NearRiderModel item) { var rankingList = FindObjectsOfType(); var nearByItemscript = rankingList.Where(c => c.UserId == item.Id).FirstOrDefault(); //如果当前有这个用户则更新没有则创建并setslibingindex if (nearByItemscript == null) { //创建 if (bufferSize < pageSize) { //情况一:还有足够的buffer,直接创建 GameObject prefabItem = item.IsSelf ? nearByMajorItem : nearByItem; GameObject newObj = (GameObject)Instantiate(prefabItem, parent); nearByItemscript = newObj.GetComponent(); bufferSize++; } else { //情况二:没有足够的buffer,找到要被淘汰的buffer()最后一名 nearByItemscript = rankingList.OrderByDescending(c => c.distance).FirstOrDefault(); } } nearByItemscript.setUserId(item.Id); nearByItemscript.setName(item.Name); nearByItemscript.setRatio(item.KGWeight + "W/KG"); nearByItemscript.setSpeed(item.Speed.ToString() + "KM/H"); nearByItemscript.setHead(item.Headimage); nearByItemscript.setCountry(cyclingController.GetCountryImageByName(item.Country)); nearByItemscript.setDistance(item.Near.ToString() + "KM"); nearByItemscript.transform.SetSiblingIndex((int)item.Near); } } }