lishuo 8f0598580d 骑行页面消息通知
在线用户和影子选手用图片显示,缩放等功能按钮微调
2021-05-11 18:21:32 +08:00

158 lines
5.6 KiB
C#

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<CyclingController>();
playerController = FindObjectOfType<PlayerController>();
nearByItem = Resources.Load<GameObject>("UI/Prefab/Ride/NearbyItem");
nearByMajorItem = Resources.Load<GameObject>("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<ScrollRect>().verticalNormalizedPosition <= 0 ||
scroll.GetComponent<ScrollRect>().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<ScrollRect>();
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>();
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<NearByItemScript>();
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);
}
}
}
}
}
}
}