powerfun-unity/Assets/Scripts/UI/Prefab/ResultList/ResultListController.cs
2022-05-31 16:51:07 +08:00

381 lines
13 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.Scripts;
using Assets.Scripts.Apis;
using Assets.Scripts.Apis.Models;
using DG.Tweening;
using Newtonsoft.Json.Linq;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class ResultListController : PFUIPanel
{
[SerializeField]Transform routeResult;
Transform localRouteItem;
Transform scrollContent;
Transform routeScroll, matchScroll, rowerScroll;
Transform routeContent, matchContent, rowerContent;
Transform btnRoute, btnMatch ,btnRower, searchInput;
Color c1, c2;
// Start is called before the first frame update
int pageSize = 20;
string name = "";
Transform[] contents,scrolls,btns;
Dictionary<int, string> filterOptionDict = new Dictionary<int, string>
{
{0,"routes" },{1,"competition" }
};
//交互用
public Transform currentItem { get; set; }
int scrollIndex = 0;
ScrollRect scroll;
void Awake()
{
//ApiBase.SetCookie("73385F5F719B610D132C1ECF3E9143272BF15214D57ED91CD7A9DFD832407471535112AAEB8E9271F75D54FBBF2D99F18FA313C1EEA5676F5D722D7FBB07C926BEC5905591BF9AFDDC6336552DF273112C2DA1794E6FA2F465B11FECD2E82E52");
localRouteItem = Resources.Load<Transform>("UI/Prefab/ResultList/LocalRouteItem");
caches = new Dictionary<string, Texture>();
#if UNITY_ANDROID || UNITY_IOS
routeResult = Resources.Load<Transform>("UI/Prefab/ResultList/RouteItem-Mobile");
localRouteItem = Resources.Load<Transform>("UI/Prefab/ResultList/LocalRouteItem-Mobile");
#endif
InitialColor();
scroll = transform.Find("ListPanel").Find("Scroll").GetComponent<ScrollRect>();
btnMatch = transform.Find("ListPanel").Find("BtnMatch");
btnRoute = transform.Find("ListPanel").Find("BtnRoute");
btnRower = transform.Find("ListPanel").Find("BtnRower");
searchInput = transform.Find("ListPanel").Find("SearchInput");
scrollContent = scroll.transform.Find("Viewport").Find("Content");
routeScroll = scrollContent.Find("RouteList");
routeContent = routeScroll.Find("Viewport").Find("Content");
matchScroll = scrollContent.Find("MatchList");
matchContent = matchScroll.Find("Viewport").Find("Content");
rowerScroll = scrollContent.Find("RowerList");
if (rowerScroll)
{
rowerContent = rowerScroll.Find("Viewport").Find("Content");
}
contents = new Transform[] { routeContent, matchContent, rowerContent};
if (btnRoute != null)
{
UIManager.AddEvent(btnRoute.gameObject, EventTriggerType.PointerClick, (b) =>
{
StartScroll(0);
});
//btnRoute.GetComponent<Button>().onClick.AddListener(() => StartScroll(1));
}
if (btnMatch != null)
{
UIManager.AddEvent(btnMatch.gameObject, EventTriggerType.PointerClick, (b) =>
{
StartScroll(1);
});
//btnMatch.GetComponent<Button>().onClick.AddListener(() => StartScroll(0));
}
if (btnRower != null)
{
UIManager.AddEvent(btnRower.gameObject, EventTriggerType.PointerClick, (b) =>
{
StartScroll(2);
});
}
btns = new Transform[] { btnRoute,btnMatch,btnRower };
if (searchInput != null)
{
UIManager.AddEvent(searchInput.Find("Button").gameObject, EventTriggerType.PointerClick, (b) =>
{
onEndEdit();
});
searchInput.GetComponent<InputField>().onValueChanged.AddListener((v) =>
{
name = v;
});
//searchInput.Find("Button").GetComponent<Button>().onClick.AddListener(() =>
//{
// name = searchInput.GetComponent<InputField>().text;
// Refresh(contents[scrollIndex]);
//});
}
if (routeScroll != null)
{
UIManager.AddEvent(routeScroll.gameObject, UnityEngine.EventSystems.EventTriggerType.EndDrag, OnEndDrag);
}
if (matchScroll != null)
{
UIManager.AddEvent(matchScroll.gameObject, UnityEngine.EventSystems.EventTriggerType.EndDrag, OnEndDrag);
}
if (rowerScroll != null)
{
UIManager.AddEvent(rowerScroll.gameObject, UnityEngine.EventSystems.EventTriggerType.EndDrag, OnEndDrag);
}
scrolls = new Transform[] { routeScroll, matchScroll, rowerScroll };
//GetList(0);
GetList(1);
#if UNITY_ANDROID || UNITY_IOS
GetList(2);
#endif
#region
#if UNITY_ANDROID || UNITY_IOS
btnRower.transform.localPosition = new Vector3(btnRower.transform.localPosition.x, btnRoute.transform.localPosition.y, btnRower.transform.localPosition.z);
btnRoute.gameObject.SetActive(false);
btnMatch.gameObject.SetActive(false);
transform.Find("ListPanel/Line").gameObject.SetActive(false);
transform.Find("ListPanel/Line2").gameObject.SetActive(false);
StartScroll(2);
//scrollContent.localPosition = new Vector3(674 * -2, scrollContent.localPosition.y, scrollContent.localPosition.z);//.DOLocalMoveX(674 * index * -1, 0.3f);
//btnRower.GetComponent<Text>().color = Utils.HexToColor("#ffffff");
#endif
#endregion
}
public void Load()
{
Debug.Log("刷新show");
//Refresh(contents[0]);
if (contents != null && contents.Length == 3)
{
Debug.Log("刷新show进入");
Refresh(contents[scrollIndex]);
}
//if (scroll!=null)
//{
// scroll.transform.Find("Error").gameObject.SetActive(false);
//}
}
private void OnEndDrag(BaseEventData e)
{
ScrollRect scrollrect = null;
if (e != null)
{
var pe = (PointerEventData)e;
scrollrect = pe.pointerDrag.GetComponent<ScrollRect>();
}
else
{
scrollrect = scrolls[scrollIndex].GetComponent<ScrollRect>();
}
if (scrollrect.verticalNormalizedPosition <= 0)
{
Debug.Log(scrollrect.verticalNormalizedPosition);
pageIndex[scrollIndex]++;
GetList();
}
if (scrollrect.verticalNormalizedPosition >= 1)
{
Refresh(contents[scrollIndex]);
}
}
private void Refresh(Transform content)
{
content.transform.DestroyChildren();
isEnd[scrollIndex] = false;
pageIndex[scrollIndex] = 0;
GetList();
DisplayLocalRouteResult(contents[0], 0);//显示本地未上传成功的记录
}
public void Reset()
{
if (searchInput != null)
{
searchInput.GetComponent<InputField>().text = "";
name = "";
Load();
StartScroll(1);
}
}
Dictionary<int, bool> isEnd = new Dictionary<int, bool>
{
{0,false },{1,false },{2,false }
};
Dictionary<int, int> pageIndex = new Dictionary<int, int>
{
{0,0 },{1,0 },{2,0 }
};
async void GetList(int? sindex = null)
{
var index = sindex ?? scrollIndex;
if (isEnd[index]) return;
Debug.Log(sindex);
JsonResult<List<JObject>> r = null;
if (index == 0 || index == 1)
{
r = await ConfigHelper.mapInterruptRecordApi.GetMapInterruptRecord(name, pageIndex[index], 20, filterOptionDict[index]);
}
else
{
r = await ConfigHelper.rowerApi.GetList(pageIndex[index], 20);
}
if (r.result)
{
if (r.data.Count == 0)
{
if (pageIndex[index] != 0)
{
isEnd[index] = true;
scroll.transform.Find("Error").gameObject.SetActive(false);
}
else
{
//contents[index];
if (!sindex.HasValue || (sindex.HasValue && sindex.Value == scrollIndex))
{
scroll.transform.Find("Error").gameObject.SetActive(true);
}
}
}
else
{
isEnd[index] = false;
DisplayRouteResult(r.data, contents[index], index);
scroll.transform.Find("Error").gameObject.SetActive(false);
//DisplayRouteResult(r.data, matchContent);
}
}
else
{
Utils.showToast(gameObject, r.errMsg);
}
}
[HideInInspector]
public Dictionary<string, Texture> caches = null;
void DisplayRouteResult(List<JObject> list,Transform content,int index)
{
if (routeResult != null)
{
foreach (var item in list)
{
var obj = Instantiate(routeResult);
if (index == 0 || index == 1)
{
obj.GetComponent<RouteItem>().Initial(item.ToObject<RouteResult>(), index, transform, true);
}
else
{
obj.GetComponent<RouteItem>().Initial(item.ToObject<RowerResultModel>(), index, transform,true);
}
//obj.SendMessage("Initial", );
obj.transform.parent = content;
obj.transform.localScale = new Vector3(1, 1, 1);
}
}
}
void DisplayLocalRouteResult(Transform content, int index)
{
//查询本地上传失败的文件
var parentPath = PFConstants.MapWorkoutRecordFolder;
var dirList = Directory.GetDirectories(parentPath);
foreach (var item in dirList)
{
if (Directory.Exists(item))
{
//var d = new DirectoryInfo(item);
//var createTime = d.CreationTime;//create time
//var newTime = createTime.AddSeconds(30D);
//if (newTime < DateTime.Now)
{
var obj = Instantiate(localRouteItem);
obj.GetComponent<LocalRouteItem>().Initial(item, 0);
obj.transform.parent = content;
obj.transform.localScale = new Vector3(1, 1, 1);
obj.SetAsFirstSibling();
}
}
}
}
void InitialColor()
{
ColorUtility.TryParseHtmlString("#FFFFFF", out c1);
ColorUtility.TryParseHtmlString("#5C5C6E", out c2);
}
// Update is called once per frame
void onEndEdit()
{
name = searchInput.GetComponent<InputField>().text;
Refresh(contents[scrollIndex]);
}
bool startMouse = false;
void Update()
{
//GoScroll();
if (Input.GetAxis("Mouse ScrollWheel") != 0)
{
if (scrolls[scrollIndex].GetComponent<ScrollRect>().verticalNormalizedPosition <= 0 ||
scrolls[scrollIndex].GetComponent<ScrollRect>().verticalNormalizedPosition >= (pageIndex[scrollIndex] == 0 ? 1.05 : 1))
{
startMouse = true;
}
}
else
{
if (startMouse)
{
startMouse = false;
OnEndDrag(null);
}
}
if (Input.GetKeyDown(KeyCode.KeypadEnter) || Input.GetKeyDown(KeyCode.Return))
{
onEndEdit();
}
}
void StartScroll(int index)
{
#if UNITY_ANDROID || UNITY_IOS
scrollContent.DOLocalMoveX(674*index*-1,0.3f);
#else
scrollContent.DOLocalMoveX(1158*index*-1,0.3f);
#endif
scrollIndex = index;
for (int i = 0; i < btns.Length; i++)
{
if (!btns[i]) continue;
if (i == index)
{
btns[i].GetComponent<Text>().color = c1;
}
else
{
btns[i].GetComponent<Text>().color = c2;
}
}
//if (startScroll) return;
//if (index == 0)
//{
// //翻到比赛页,比赛按钮变白,线路按钮变灰
// scrollIndex = 1;
// startScroll = true;
// btnRoute.GetComponent<Text>().color = c2;
// btnMatch.GetComponent<Text>().color = c1;
//}
//else if (index == 1)
//{
// //反过来
// scrollIndex = 0;
// startScroll = true;
// btnRoute.GetComponent<Text>().color = c1;
// btnMatch.GetComponent<Text>().color = c2;
//}
}
protected override void OnDestroy()
{
caches = null;
Resources.UnloadUnusedAssets();
GC.Collect();
Debug.Log("list empty");
}
}