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

298 lines
12 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Assets.Scenes.Ride.Scripts.Model;
using Assets.Scripts;
using Assets.Scripts.Apis;
using Assets.Scripts.Apis.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace Assets.Scenes.Ride.Scripts
{
public class SelectPlayerFactory : MonoBehaviour
{
GameObject prefab;
GameObject scroll;
GameObject selectPanel;
GameObject nearPanel;
Transform content;
Button rideButton;
Button cancelButton;
Button closeButton;
Button searchButton;
Button sortButton;
Image sortImage;
GameObject reviewPanel;
GameObject noRecord;
InputField inputField;
InputField startValue;
InputField endValue;
private int pageIndex = 0;
private int pageSize = 8;
private int totalPages = 0;
private string seachName = string.Empty;
private double _startValue;
private double _endValue;
CyclingController cyclingController;
public List<GameObject> gameObjects = new List<GameObject>();
List<SelectPlayerItemScript> selectPlayerItemScripts = new List<SelectPlayerItemScript>();
MapApi mapApi;
Sprite down;
Sprite up;
private void Awake()
{
mapApi = new MapApi();
cyclingController = FindObjectOfType<CyclingController>();
//分页查询当前路数排行榜选手成绩列表
prefab = Resources.Load<GameObject>("UI/Prefab/Ride/SelectPlayerItem");
down = Resources.Load<Sprite>("Images/DOWN");
up = Resources.Load<Sprite>("Images/UP");
scroll = transform.Find("Panel/PlayerList/Scroll View").gameObject;
content = transform.Find("Panel/PlayerList/Scroll View/Viewport/Content");
rideButton = transform.Find("Panel/RideButton").GetComponent<Button>();
cancelButton = transform.Find("Panel/CancelButton").GetComponent<Button>();
closeButton = transform.Find("Panel/Close").GetComponent<Button>();
searchButton = transform.Find("Panel/SearchButton").GetComponent<Button>();
inputField = transform.Find("Panel/InputField").GetComponent<InputField>();
startValue = transform.Find("Panel/StartValue").GetComponent<InputField>();
endValue = transform.Find("Panel/EndValue").GetComponent<InputField>();
reviewPanel = transform.parent.Find("ReviewPanel").gameObject;
selectPanel = transform.parent.Find("SelectPanel").gameObject;
nearPanel = transform.parent.Find("NearPanel").gameObject;
noRecord = transform.Find("Panel/PlayerList/Scroll View/Viewport/NoRecord").gameObject;
sortButton = transform.Find("Panel/SortButton").GetComponent<Button>();
sortImage = transform.Find("Panel/SortButton/Image").GetComponent<Image>();
inputField.onValueChanged.AddListener(InputTextChanged);
startValue.onValueChanged.AddListener(StartvalueChanged);
endValue.onValueChanged.AddListener(EndvalueChanged);
UIManager.AddEvent(rideButton.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, PreStart);
UIManager.AddEvent(cancelButton.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, Cancel);
UIManager.AddEvent(closeButton.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, Cancel);
UIManager.AddEvent(searchButton.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, Search);
UIManager.AddEvent(sortButton.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, SortWKG);
UIManager.AddEvent(scroll, UnityEngine.EventSystems.EventTriggerType.EndDrag, OnEndDrag);
gameObjects.Add(transform.Find("Panel/Player1").gameObject);
gameObjects.Add(transform.Find("Panel/Player2").gameObject);
gameObjects.Add(transform.Find("Panel/Player3").gameObject);
gameObjects.Add(transform.Find("Panel/Player4").gameObject);
gameObjects.Add(transform.Find("Panel/Player5").gameObject);
//功体比默认条件
//var currentUserWkg = Math.Round((App.CurrentUser.FTP / App.CurrentUser.Weight),2);
//_startValue = currentUserWkg - 0.5<0?0 : currentUserWkg - 0.5;
//_endValue = currentUserWkg + 0.5;
//startValue.text = _startValue.ToString();
//endValue.text = _endValue.ToString();
}
bool startMouse = false;
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);
}
}
}
private void StartvalueChanged(string input)
{
if (!string.IsNullOrWhiteSpace(input))
{
_startValue = Convert.ToDouble(input);
}
}
private void EndvalueChanged(string input)
{
if (!string.IsNullOrWhiteSpace(input))
{
_endValue = Convert.ToDouble(input);
}
}
private void InputTextChanged(string input)
{
seachName = input;
}
private int sort = 0;//0:正序 1降序
private void SortWKG(BaseEventData baseEventData)
{
if (sort == 0)
{
sortImage.sprite = up;
sort = 1;
}
else
{
sort = 0;
sortImage.sprite = down;
}
Utils.DestroyChildren(content);
Refresh();
}
private void Search(BaseEventData baseEventData)
{
Utils.DestroyChildren(content);
Refresh();
}
//开始伴侣骑行的面板
private void PreStart(BaseEventData baseEventData)
{
transform.gameObject.SetActive(false);
foreach (var item in gameObjects)
{
var seletedPlayerScript = item.GetComponent<SeletedPlayerScript>();
if (seletedPlayerScript.isUsed)
{
cyclingController.selectParamModel.RankingsId.Add(seletedPlayerScript.GetRankingId());
}
}
//查询选中人员的骑行记录
var rankingList = mapApi.GetRecordFileFromServer(cyclingController.selectParamModel.RankingsId);
cyclingController.SetCyclingModel(CyclingModel.Review);
if (!reviewPanel.activeSelf)
{
reviewPanel.SetActive(true);
}
else
{
var reviewFactory = reviewPanel.GetComponent<ReviewFactory>();
reviewFactory.Refresh();
reviewFactory.SetReview(rankingList);
}
reviewPanel.transform.Find("ReviewArea").gameObject.SetActive(true);
reviewPanel.transform.Find("SingleArea").gameObject.SetActive(false);
nearPanel.SetActive(true);
}
//取消和关闭都进入单人骑行界面
private void Cancel(BaseEventData baseEventData)
{
//cyclingController.cyclingModel = CyclingModel.Single;
transform.gameObject.SetActive(false);
reviewPanel.SetActive(false);
selectPanel.SetActive(true);
nearPanel.SetActive(false);
}
private void Start()
{
//CreateGameObject(cyclingController.mapRouteRankingList);
Refresh();
}
private void Refresh()
{
var list = mapApi.GetShadowList(App.RouteIdParam, seachName, pageIndex, pageSize);
totalPages = list.data.TotalPages;
var data = list.data.list;//.Where(c => c.WeightKg >= _startValue && c.WeightKg <= _endValue).ToList();
if (_startValue > 0)
{
data = data.Where(c => c.WeightKg >= _startValue).ToList();
}
if (_endValue > 0)
{
data = data.Where(c => c.WeightKg <= _endValue).ToList();
}
if (sort == 0)
{
data = data.OrderByDescending(c => c.WeightKg).ToList();
}
else
{
data = data.OrderBy(c => c.WeightKg).ToList();
}
CreateGameObject(data);
}
private void CreateGameObject(List<MapRouteRanking> list)
{
//if (list.Count == 0)
//{
// noRecord.SetActive(true);
//}
//else
//{
// noRecord.SetActive(false);
//}
var parent = transform.Find("Panel/PlayerList/Scroll View/Viewport/Content");
int index = 0;
foreach (var item in list)
{
index++;
GameObject newObj = (GameObject)Instantiate(prefab, parent);
var selectPlayerItemScript = newObj.GetComponent<SelectPlayerItemScript>();
selectPlayerItemScript.SetRankingId(item.Id.ToString());
selectPlayerItemScript.SetName(item.NickName);
selectPlayerItemScript.SetTimer(item.TotalTime);
selectPlayerItemScript.SetWeightKg(item.WeightKg.ToString());
selectPlayerItemScript.SetHeadImage(item.WxHeadImg);
selectPlayerItemScripts.Add(selectPlayerItemScript);
//UIManager.AddEventWithoutCursor(selectPlayerItemScript.GetButton().gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, OnSelectClick);
selectPlayerItemScript.GetButton().onClick.AddListener(delegate () { this.OnSelectClick(selectPlayerItemScript); });
}
}
private void OnSelectClick(SelectPlayerItemScript selectPlayerItemScript)
{
var seletedScriptList = FindObjectsOfType<SeletedPlayerScript>();
var exisitList = seletedScriptList.Where(c => c.GetRankingId().Equals(selectPlayerItemScript.GetRankingId()));
if(exisitList.Count() == 0)
{
var seletedPlayerScript = seletedScriptList.Where(c=>!c.isUsed).OrderBy(c=>c.transform.GetSiblingIndex()).FirstOrDefault();
if (seletedPlayerScript != null)
{
seletedPlayerScript.SetHead(selectPlayerItemScript.GetImageTexture(), true);
seletedPlayerScript.SetName(selectPlayerItemScript.GetName());
seletedPlayerScript.SetRankingId(selectPlayerItemScript.GetRankingId());
UIManager.AddEvent(seletedPlayerScript.GetButton().gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, OnCloseClick);
selectPlayerItemScript.isSelected = true;
}
}
}
private void OnCloseClick(BaseEventData baseEventData)
{
var seletedPlayerScript = baseEventData.selectedObject.transform.parent.GetComponent<SeletedPlayerScript>();
var seletPlayerItemScript = selectPlayerItemScripts.Where(c => c.GetRankingId() == seletedPlayerScript.GetRankingId()).FirstOrDefault();
if (seletPlayerItemScript != null)
{
seletPlayerItemScript.isSelected = false;
}
seletedPlayerScript.Reset();
}
//TODO BUG
private void OnEndDrag(BaseEventData arg0)
{
var scrollrect = scroll.GetComponent<ScrollRect>();
if (scrollrect.verticalNormalizedPosition <= 0)
{
if (pageIndex < totalPages-1 )
{
pageIndex++;
Refresh();
}
}
if (scrollrect.verticalNormalizedPosition >= (pageIndex == 0 ? 1.2 : 1))
{
if (pageIndex >0)
{
pageIndex--;
Refresh();
}
}
}
}
}