powerfun-unity/Assets/Scenes/Ride/Scripts/SelectPlayerFactory.cs

333 lines
14 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 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();
}
}
}
}
}