333 lines
14 KiB
C#
333 lines
14 KiB
C#
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 System.Text;
|
||
using System.Threading.Tasks;
|
||
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;
|
||
Transform parent;
|
||
private void Awake()
|
||
{
|
||
mapApi = new MapApi();
|
||
cyclingController = FindObjectOfType<CyclingController>();
|
||
//分页查询当前路数排行榜选手成绩列表
|
||
parent = transform.Find("Panel/PlayerList/Scroll View/Viewport/Content");
|
||
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);
|
||
}
|
||
}
|
||
if (Input.GetKeyDown(KeyCode.Return))
|
||
{
|
||
Search(null);
|
||
}
|
||
|
||
bool enabled = gameObjects.Where(c => c.GetComponent<SeletedPlayerScript>().isUsed).Count() > 0;
|
||
rideButton.enabled = enabled;
|
||
rideButton.interactable = enabled;
|
||
}
|
||
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());
|
||
cyclingController.selectPlayerDic.Add(seletedPlayerScript.UserId, seletedPlayerScript);
|
||
}
|
||
}
|
||
//查询选中人员的骑行记录
|
||
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);
|
||
Reset();
|
||
}
|
||
|
||
private void Reset()
|
||
{
|
||
inputField.text = string.Empty;
|
||
startValue.text = string.Empty;
|
||
endValue.text = string.Empty;
|
||
|
||
pageIndex = 0;
|
||
pageSize = 8;
|
||
totalPages = 0;
|
||
seachName = string.Empty;
|
||
|
||
_startValue = 0;
|
||
_endValue = 0;
|
||
|
||
foreach (var item in gameObjects)
|
||
{
|
||
item.GetComponent<SeletedPlayerScript>().Reset();
|
||
}
|
||
parent.DestroyChildren();
|
||
sort = 0;
|
||
sortImage.sprite = down;
|
||
}
|
||
private void Start()
|
||
{
|
||
//CreateGameObject(cyclingController.mapRouteRankingList);
|
||
//Refresh();
|
||
}
|
||
|
||
public 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)
|
||
{
|
||
|
||
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);
|
||
selectPlayerItemScript.Weight = item.Weight;
|
||
selectPlayerItemScript.BikeWeight = item.BicycleWeight;
|
||
selectPlayerItemScript.UserId = item.UserId;
|
||
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());
|
||
seletedPlayerScript.UserId = selectPlayerItemScript.UserId;
|
||
seletedPlayerScript.Weight = selectPlayerItemScript.Weight;
|
||
seletedPlayerScript.BikeWeight = selectPlayerItemScript.BikeWeight;
|
||
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();
|
||
}
|
||
|
||
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();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|