using Assets.Scenes.Ride.Scripts.Model; using Assets.Scripts; using System; using System.Linq; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; namespace Assets.Scenes.Ride.Scripts { public class NearByFactory : MonoBehaviour { PlayerController playerController; private GameObject nearByItem; private GameObject nearByMajorItem; private GameObject scroll; GameObject body; private int bufferSize = 0; private int pageIndex = 1; private int pageSize =7; private int preNum = 0;//前面的数量 private int offset = 8;//显示区域的数量 CyclingController cyclingController; private void Awake() { cyclingController = FindObjectOfType(); playerController = FindObjectOfType(); nearByItem = Resources.Load("UI/Prefab/Ride/NearbyItem"); nearByMajorItem = Resources.Load("UI/Prefab/Ride/NearbyMajorItem"); scroll = transform.parent.parent.gameObject; if (scroll != null) { UIManager.AddEvent(scroll, UnityEngine.EventSystems.EventTriggerType.EndDrag, OnEndDrag); } } bool startMouse = false; float t =1f; private void Update() { if (Input.GetAxis("Mouse ScrollWheel") != 0) { if (scroll.GetComponent().verticalNormalizedPosition <= 0 || scroll.GetComponent().verticalNormalizedPosition >= (pageIndex == 0 ? 1.2 : 1)) { startMouse = true; } } else { if (startMouse) { startMouse = false; OnEndDrag(null); } } t -= Time.deltaTime; while (t < 0) { Utils.DestroyChildren(transform); 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]); } t = 1; } } private int totalPages = 0; private void OnEndDrag(BaseEventData arg0) { var scrollrect = scroll.GetComponent(); if (scrollrect.verticalNormalizedPosition <= 0) { var p = pageIndex + 1; if (p * pageSize <= totalPages) { pageIndex++; } //RefreshList(); } if (scrollrect.verticalNormalizedPosition >= (pageIndex == 0 ? 1.2 : 1)) { var p = pageIndex - 1; if (p > 0) { pageIndex--; } //if (pageIndex > 0) // pageIndex--; //RefreshList(); } } private void RefreshList() { var nearList = MapUDPService.GetNearRiderData(pageIndex, pageSize, new double[] { playerController.Currentlatlong.x, playerController.Currentlatlong.y }); for (int i = 0; i < nearList.Count(); i++) { if (bufferSize < pageSize) { Create(nearList[i]); } else { UpdateItem(nearList[i],i); } } } private void Create(NearRiderModel item) { //创建 GameObject prefabItem = item.IsSelf ? nearByMajorItem : nearByItem; GameObject newObj = (GameObject)Instantiate(prefabItem, transform); var nearByItemscript = newObj.GetComponent(); 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"); bufferSize++; } private void UpdateItem(NearRiderModel item,int index) { for (int i = 0; i < transform.childCount; i++) { var child = transform.GetChild(i); if (child != null) { NearByItemScript nearByItemscript = child.GetComponent(); if (nearByItemscript.UserId == 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(item.CountryImg); nearByItemscript.setDistance(item.Near.ToString() + "KM"); if (index != i)//重排序 { child.SetSiblingIndex(index); } } } } } } }