using Assets.Scripts; using System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; using Assets.Scripts.Apis.Models; using System; using System.Linq; using UnityEngine.UI; using Assets.Scripts.UI.Prefab.Login; using Newtonsoft.Json; public class RowerMultiModeScript : MonoBehaviour { // Start is called before the first frame update [SerializeField] GameObject rank,trace; Transform scroll,m2; Vector3 startPosition,boatStartPosition; TKPanRecognizer pan; ScrollRect scrollRank; Dictionary caches; public class Trace { public int userId { get; set; } public Transform trace { get; set; } } public class TraceData { public List list { get; set; } public string NickName { get; set; } public string Avatar { get; set; } public int UserId { get; set; } public bool isMine { get; set; } public int currentDistance { get; set; } public string Country { get; set; } public int currentRank { get; set; } } List traceList; List initialPosYList; void Awake() { scroll = transform.Find("Rower/Modes/Scroll"); startPosition = scroll.localPosition; if (PlayerPrefs.GetFloat("RowerMultiModeLocationX") != 0f) { scroll.localPosition = new Vector3(PlayerPrefs.GetFloat("RowerMultiModeLocationX"), startPosition.y, startPosition.z); foreach (Transform t in transform.Find("Rower/Dots")) { t.GetComponent().color = Utils.HexToColorHtml("#ffffff"); } if (scroll.localPosition.x >= startPosition.x - (730 / 2)) { transform.Find("Rower/Dots/d1").GetComponent().color = Utils.HexToColorHtml("#f93086"); } else { transform.Find("Rower/Dots/d2").GetComponent().color = Utils.HexToColorHtml("#f93086"); } } AddTouchEvent(); m2 = transform.Find("Rower/Modes/Scroll/M2"); caches = new Dictionary(); traceList = new List(); //traceList = new List() //{ // new Trace{ userId=0, trace=m2.Find("Track/T1") }, // new Trace{ userId=0, trace=m2.Find("Track/T2") }, // new Trace{ userId=0, trace=m2.Find("Track/T3") }, // new Trace{ userId=0, trace=m2.Find("Track/T4") }, // new Trace{ userId=0, trace=m2.Find("Track/T5") }, //}; //initialPosYList = new List //{ // m2.Find("Track/T1").localPosition.y, // m2.Find("Track/T2").localPosition.y, // m2.Find("Track/T3").localPosition.y, // m2.Find("Track/T4").localPosition.y, // m2.Find("Track/T5").localPosition.y, //}; scrollRank = transform.Find("Rower/Modes/Scroll/M2/Rank/Scroll View").GetComponent(); var countryJson = Resources.Load("UI/flags-mini").text; countryList = JsonConvert.DeserializeObject>(countryJson); } public void HandleTimeTick(RowerChartModel data) { //rowerType = GetComponent().rowerType; currentSecond++; myData.list.Add(data); SortByCurrentDistance(); DisplayUserRanks(); DisplayTraces(); } private void SortByCurrentDistance() { if (currentSecond >= 0) { userList.ForEach(x => { var _list = x.list; var _distance = 0; if (_list.Count == 0) { _distance = 0; } else if (currentSecond >= _list.Count) { _distance = _list[_list.Count - 1].Distance; } else { _distance = _list[currentSecond].Distance; } x.currentDistance = _distance; if (x.isMine && rowerType.type == 1 && x.currentDistance > rowerType.value) { x.currentDistance = (int)rowerType.value; } }); } userList = userList.OrderByDescending(x => x.currentDistance).ToList(); for (int i = 0; i < userList.Count; i++) { int rank = i + 1, userId = userList[i].UserId; if (rankDiffDict.ContainsKey(userId)) { rankDiffDict[userId].rank = rank; rankDiffDict[userId].diff = userList[i].currentRank - rank; if (currentSecond % 2 == 0) { rankDiffDict[userId].sumdiff = rankDiffDict[userId].diff; } else { rankDiffDict[userId].sumdiff += rankDiffDict[userId].diff; } } userList[i].currentRank = rank; } print(string.Join(",", rankDiffDict.OrderBy(x=>x.Value.rank).Select(x => x.Value.diff))); } private List HandleData() { //仅取5个 var mineIndex = userList.FindIndex(x => x.isMine); if (mineIndex < 2) { return userList.Where((x, i) => i < 5).ToList(); } else if (mineIndex > userList.Count - 3) { return userList.Where((x, i) => i >= userList.Count - 5).ToList(); } else { return userList.Where((x, i) => i >= mineIndex - 2 && i <= mineIndex + 2).ToList(); } } List userList; TraceData myData; public List shadowList { get; private set; } public class RankDiff { public int rank { get; set; } public int diff { get; set; } public int sumdiff { get; set; } } public Dictionary rankDiffDict; public async void GetShadowList(RowerTaskPanel.RowerType rowerType, RowerResultModel reRowData) { this.rowerType = rowerType; currentSecond = -1; var res = reRowData ==null? await ConfigHelper.rowerApi.GetShadowList(rowerType): await ConfigHelper.rowerApi.GetReRowShadowList(reRowData.Id); shadowList = res.data; //foreach (var t in traceList) //{ // t.userId = 0; // t.trace.gameObject.SetActive(false); //} var _tmpList = shadowList.Select(x => new TraceData { list = x.list, NickName = x.NickName, Avatar = x.WxHeadImg, UserId = x.UserId, isMine = false, currentDistance = 0, Country = x.Country }).ToList(); myData = new TraceData(); myData.list = new List(); myData.UserId = App.CurrentUser.Id; myData.NickName = App.CurrentUser.Nickname; myData.Avatar = App.CurrentUser.WxHeadImg; myData.isMine = true; myData.Country = App.CurrentUser.Country; _tmpList.Insert(_tmpList.Count / 2, myData); //_tmpList.Add(myData); userList = _tmpList.OrderByDescending(x => x.currentDistance).ToList(); rankDiffDict = new Dictionary(); for (int i = 0; i < userList.Count; i++) { userList[i].currentRank = i + 1; rankDiffDict.Add(userList[i].UserId, new RankDiff { rank = userList[i].currentRank, diff = 0 }); } DisplayUserRanks(true); DisplayTraces(true); } private void DisplayTrace(Transform t,TraceData data,TraceData mineData,bool isAni = false) { if (string.IsNullOrEmpty(data.Avatar)) { t.Find("Left/Avatar").GetComponent().texture = null; } else { Utils.DisplayImageTempDict(t.Find("Left/Avatar").GetComponent(), data.Avatar, caches); } var _c = countryList.SingleOrDefault(x => x.country == data.Country); if (_c != null) { t.Find("Left/Avatar/Country").GetComponent().sprite = Resources.Load(_c.source); } t.Find("Left/NickName").GetComponent().text = data.NickName; if (data.list.Count == 0) { t.Find("Left/Time").GetComponent().text = TimeSpan.FromSeconds(0).ToString(@"mm\:ss"); } else if (currentSecond >= 0 && currentSecond < data.list.Count) { var _d = data.list[currentSecond]; t.Find("Left/Time").GetComponent().text = TimeSpan.FromSeconds(_d.Pace).ToString(@"mm\:ss"); } else { var _d = data.list[data.list.Count - 1]; t.Find("Left/Time").GetComponent().text = TimeSpan.FromSeconds(_d.Pace).ToString(@"mm\:ss"); } t.Find("Mine").gameObject.SetActive(data.isMine); var diff = data.currentDistance - mineData.currentDistance; if (diff > 0) { t.Find("Main/Diff").GetComponent().text = diff.ToString("+#0M"); } else if (diff == 0) { if (data.isMine) { var originstr = $"{userList.FindIndex(x => x.isMine) + 1} / {userList.Count}"; var str = originstr; var mytxt = t.Find("Main/Diff").GetComponent(); if (rankDiffDict[data.UserId].diff != 0) { var myranksq = DOTween.Sequence(); myranksq.AppendCallback(() => { mytxt.DOFade(0, 0); if (rankDiffDict[data.UserId].diff > 0) str = "↑"; else if (rankDiffDict[data.UserId].diff < 0) str = "↓"; mytxt.text = str; }); myranksq.Append(mytxt.DOFade(1, 0.2f)); myranksq.AppendInterval(0.3f); myranksq.Append(mytxt.DOFade(0, 0.2f)); myranksq.AppendCallback(() => { mytxt.text = originstr; }); myranksq.Append(mytxt.DOFade(1, 0.2f)); myranksq.Play(); } else { mytxt.text = originstr; } } else { t.Find("Main/Diff").GetComponent().text = diff.ToString("#0M"); } } else { t.Find("Main/Diff").GetComponent().text = diff.ToString("#0M"); } if (data.isMine) { t.transform.Find("Left/Time").GetComponent().color = Utils.HexToColorHtml("#f93086"); t.transform.Find("Left/NickName").GetComponent().color = Utils.HexToColorHtml("#f93086"); } else { t.transform.Find("Left/Time").GetComponent().color = Utils.HexToColorHtml("#ffffff"); t.transform.Find("Left/NickName").GetComponent().color = Utils.HexToColorHtml("#ffffff"); } var width = t.Find("Main").GetComponent().sizeDelta.x - t.Find("Main/Boat").GetComponent().sizeDelta.x; var diffWidth = data.currentDistance - mineData.currentDistance + 50; if (data.currentDistance <= 50 && mineData.currentDistance <= 50) { diffWidth = data.currentDistance; } else if (rowerType.type == 1 && rowerType.value - data.currentDistance <= 50) { diffWidth = 100 - ((int)rowerType.value - data.currentDistance); } if (diffWidth >= 0 && diffWidth <= 100) { var tWidth = (diffWidth / 100f) * width; t.Find("Main/Boat").gameObject.SetActive(true); if (isAni) { t.Find("Main/Boat").DOLocalMoveX(21.5f + tWidth, 0.6f); } else { t.Find("Main/Boat").localPosition = new Vector3(21.5f + tWidth, t.Find("Main/Boat").localPosition.y, t.Find("Main/Boat").localPosition.z); } } else { t.Find("Main/Boat").localPosition = new Vector3(-21.5f, t.Find("Main/Boat").localPosition.y, t.Find("Main/Boat").localPosition.z); t.Find("Main/Boat").gameObject.SetActive(false); } if (isAni && currentSecond >= 0 && currentSecond < data.list.Count) { var ani = DOTween.Sequence(); var _d = data.list[currentSecond]; if (currentSecond > 0 && _d.Pace > 0) { var spDict = GetComponent().spriteDict; int spDictIndex = 0; ani.Join(DOTween.To(() => spDictIndex, x => t.Find("Main/Boat").GetComponent().sprite = spDict[x], 14, 0.2f)); ani.AppendCallback(() => { int spDictIndex2 = 14; DOTween.To(() => spDictIndex2, x => t.Find("Main/Boat").GetComponent().sprite = spDict[x], 0, 0.4f); }); ani.Play(); //var _pred = data.list[currentSecond - 1]; //if (_pred.StrokeCount != _d.StrokeCount) //{ // //上次划桨次数和这次不一样 说明需要划桨一次 // var spDict = GetComponent().spriteDict; // int spDictIndex = 0; // ani.Join(DOTween.To(() => spDictIndex, x => t.Find("Main/Boat").GetComponent().sprite = spDict[x], 14, 0.2f)); // ani.AppendCallback(() => // { // int spDictIndex2 = 14; // DOTween.To(() => spDictIndex2, x => t.Find("Main/Boat").GetComponent().sprite = spDict[x], 0, 0.4f); // }); // ani.Play(); //} } } } private int getStartIndexByMineData() { var list = userList; var mineIndex = list.FindIndex(x => x.isMine); if (mineIndex < 2) return 0; else if (mineIndex >= list.Count - 2) { mineIndex = list.Count - 5; if (mineIndex < 0) mineIndex = 0; return mineIndex; } else { return mineIndex - 2; } } private int[] getStartRangeByMineData() { var list = userList; var mineIndex = list.FindIndex(x => x.isMine); if (mineIndex < 2) { int sindex = 0,eIndex = 4; if (eIndex > list.Count - 1) eIndex = list.Count - 1; return new int[] { sindex, eIndex }; } else if (mineIndex >= list.Count - 2) { mineIndex = list.Count - 5; if (mineIndex < 0) mineIndex = 0; return new int[] { mineIndex, list.Count - 1 }; } else { return new int[] { mineIndex - 2, mineIndex + 2 }; } } private void DisplayTraces(bool isRefresh = false) { var list = userList; var listc = transform.Find("Rower/Modes/Scroll/M2/Track/Container/List"); print(listc.localPosition.ToString()); var mineData = list.FirstOrDefault(x => x.isMine); var sindex = getStartIndexByMineData(); int i = 0; if (isRefresh) { traceList.Clear(); listc.DestroyChildren(); for (i = 0; i < list.Count; i++) { var data = list[i]; var g = Instantiate(trace); g.name = i.ToString(); DisplayTrace(g.transform.Find("T1/p1"), data, mineData); g.transform.SetParent(listc); g.SetActive(true); g.transform.localScale = Vector3.one; g.transform.localPosition = new Vector3(0, -21.5f - 47f * i); traceList.Add(new Trace { userId = data.UserId, trace = g.transform.Find("T1") }); } listc.GetComponent().sizeDelta = new Vector2(550f, 43 + 47 * (list.Count - 1)); listc.DOLocalMoveY(47 * sindex + 115.5f, 0.8f); return; } var allsq = DOTween.Sequence(); // -21.5 allsq.Join(listc.DOLocalMoveY(47 * sindex + 115.5f, 0.9f)); var sq = DOTween.Sequence(); for (i = 0; i < list.Count; i++) { var data = list[i]; var t = traceList.FirstOrDefault(x=>x.userId == data.UserId).trace; var diff = rankDiffDict[data.UserId]; DisplayTrace(t.Find("p1"), data, mineData, true); if (diff.diff != 0) { if (diff.diff > 0) { t.parent.SetAsLastSibling(); } sq.Join(t.parent.DOLocalMoveY(-47 * (diff.rank - 1) - 21.5f, 0.9f)); var sq1 = DOTween.Sequence(); sq1.Append(t.GetComponent().DOFade(0.2f, 0.45f)); sq1.Append(t.GetComponent().DOFade(1f, 0.45f)); //sq1.SetEase(Ease.InOutCubic); sq.Join(sq1); sq.SetEase(Ease.InOutCubic); //sq.Append(t.GetComponent) } //t.parent.name = i.ToString(); } //for (i = 0; i < list.Count; i++) //{ // traceList[i].trace = traceList[i].trace.parent.parent.Find($"{i.ToString()}/T1"); //} allsq.Join(sq); allsq.Play(); //return; //if (currentSecond % 2 == 1) //{ // //0-0.5 // allsq.Append(listc.DOLocalMoveY(47 * sindex + 115.5f, 0.5f)); // var indexRange = getStartRangeByMineData(); // var sq = DOTween.Sequence(); // for (i = 0; i < list.Count; i++) // { // var sq1 = DOTween.Sequence(); // var data = list[i]; // var t = traceList[i].trace; // if (i >= indexRange[0] && i <= indexRange[1]) // { // //需要做动画 // if (data.UserId != traceList[i].userId) // { // //var mysq = DOTween.Sequence(); // //if (traceList[i].userId == App.CurrentUser.Id) // //{ // // mysq.Join(t.GetComponent().DOFade(0, 0.5f).SetEase(Ease.OutSine)); // //} // //if (data.UserId != App.CurrentUser.Id) // //{ // // sq1.Append(t.GetComponent().DOFade(0.68f, 0.45f).SetEase(Ease.InSine)); // // sq1.AppendCallback(() => // // { // // DisplayTrace(t.Find("p1"), data, mineData); // // }); // // sq1.Append(t.GetComponent().DOFade(1, 0.45f)); // //} // //else // //{ // // mysq.Join(t.GetComponent().startAnimation(0.5f, () => // // { // // DisplayTrace(t.Find("p2"), data, mineData); // // }, rankDiffDict[data.UserId].sumdiff >= 0 ? 1 : 0)); // // allsq.Append(mysq); // //} // sq1.Append(t.GetComponent().startAnimation(0.8f, () => // { // DisplayTrace(t.Find("p2"), data, mineData); // }, rankDiffDict[data.UserId].sumdiff >= 0 ? 1 : 0).SetEase(Ease.OutBounce)); // //sq1.Append(t.GetComponent().startAnimation(0.8f, () => // //{ // // DisplayTrace(t.Find("p2"), data, mineData); // //}, 0).SetEase(Ease.OutBounce)); // } // else // { // sq1.AppendCallback(() => // { // DisplayTrace(t.Find("p1"), data, mineData, true); // }); // } // traceList[i].userId = data.UserId; // } // else // { // DisplayTrace(t.Find("p1"), data, mineData); // } // sq.Join(sq1); // } // allsq.Append(sq); // allsq.Play(); //} //else //{ // for (i = 0; i < list.Count; i++) // { // var data = list[i]; // var _trace = traceList.FirstOrDefault(x=>x.userId == data.UserId); // if (_trace != null) // { // DisplayTrace(_trace.trace.Find("p1"), data, mineData, true); // } // } //} ////for (i = 0; i < list.Count; i++) ////{ //// var sq = DOTween.Sequence(); //// var item = traceList[i]; //// var data = list[i]; //// var t = item.trace.Find("p2"); ////} //return; //var list = HandleData(); //CompareTraceList(traceList, list); //for (i = 0; i < list.Count;i++) //{ // var sq = DOTween.Sequence(); // var item = traceList[i]; // var data = list[i]; // var t = item.trace.Find("p2"); // TweenCallback callback = () => // { // }; // if (!item.trace.gameObject.activeInHierarchy) // { // t = item.trace.Find("p1"); // item.trace.gameObject.SetActive(true); // callback(); // continue; // } // //var rotatesq = item.trace.GetComponent().startAnimation(0.8f, callback); // //if (rotatesq != null) // //{ // // sq.Join(rotatesq); // //} // var isRotate = item.userId != data.UserId; // if (isRotate) // { // t = item.trace.Find("p2"); // var rotatesq = item.trace.GetComponent().startAnimation(0.8f, callback); // if (rotatesq != null) // { // sq.Join(rotatesq); // } // } // else // { // t = item.trace.Find("p1"); // sq.AppendCallback(callback); // } // item.userId = data.UserId; // if (currentSecond >= 0 && currentSecond < list[i].list.Count) // { // var _d = data.list[currentSecond]; // if (currentSecond > 0) // { // var _pred = data.list[currentSecond - 1]; // if (_pred.StrokeCount != _d.StrokeCount) // { // //上次划桨次数和这次不一样 说明需要划桨一次 // var spDict = GetComponent().spriteDict; // int spDictIndex = 0; // sq.Join(DOTween.To(() => spDictIndex, x => t.Find("Main/Boat").GetComponent().sprite = spDict[x], 14, 0.3f)); // sq.AppendCallback(() => // { // int spDictIndex2 = 14; // DOTween.To(() => spDictIndex2, x => t.Find("Main/Boat").GetComponent().sprite = spDict[x], 0, 0.6f); // }); // } // } // } // var width = t.Find("Main").GetComponent().sizeDelta.x - t.Find("Main/Boat").GetComponent().sizeDelta.x; // var diffWidth = data.currentDistance - mineData.currentDistance + 50; // if (data.currentDistance <= 50) // { // diffWidth = data.currentDistance; // } // else if (rowerType.type == 1 && rowerType.value - data.currentDistance <= 50) // { // diffWidth = 100 - ((int)rowerType.value - data.currentDistance); // } // //if (data.isMine) // //{ // // print("diff:" + diffWidth + ";"+ rowerType.type); // //} // if (diffWidth >= 0 && diffWidth <= 100) // { // var tWidth = (diffWidth / 100f) * width; // t.Find("Main/Boat").gameObject.SetActive(true); // //t.Find("Main/Boat").localPosition = new Vector3(25 + tWidth, t.Find("Main/Boat").localPosition.y, t.Find("Main/Boat").localPosition.z); // if (isRotate) // { // t.Find("Main/Boat").localPosition = new Vector3(21.5f + tWidth, t.Find("Main/Boat").localPosition.y, t.Find("Main/Boat").localPosition.z); // } // else // { // sq.Join(t.Find("Main/Boat").DOLocalMoveX(21.5f + tWidth, 0.9f)); // } // } // else // { // t.Find("Main/Boat").localPosition = new Vector3(-21.5f, t.Find("Main/Boat").localPosition.y, t.Find("Main/Boat").localPosition.z); // t.Find("Main/Boat").gameObject.SetActive(false); // } //排名变化 //var diffTransfrom = transform.Find("Rower/Modes/Scroll/M2/Track/RankDiff"+item.trace.name).GetComponent(); //if (rankDiffDict[data.UserId].diff > 0) //{ // diffTransfrom.text = "+" + rankDiffDict[data.UserId].diff; // var rankDiffSQ = DOTween.Sequence(); // rankDiffSQ.Append(diffTransfrom.DOColor(Utils.HexToColorHtml("#bd362bff"), 0.3f)); // rankDiffSQ.AppendInterval(0.4f); // rankDiffSQ.Append(diffTransfrom.DOColor(Utils.HexToColorHtml("#ffffff00"), 0.3f)); // sq.Join(rankDiffSQ); //} //else if (rankDiffDict[data.UserId].diff < 0) //{ // diffTransfrom.text = "" + rankDiffDict[data.UserId].diff; // var rankDiffSQ = DOTween.Sequence(); // rankDiffSQ.Append(diffTransfrom.DOColor(Utils.HexToColorHtml("#27bac0ff"), 0.3f)); // rankDiffSQ.AppendInterval(0.4f); // rankDiffSQ.Append(diffTransfrom.DOColor(Utils.HexToColorHtml("#ffffff00"), 0.3f)); // sq.Join(rankDiffSQ); //} //sq.Play(); //} //for (; i < traceList.Count; i++) //{ // traceList[i].userId = 0; // traceList[i].trace.gameObject.SetActive(false); //} } private void CompareTraceList(List traceList, List list) { if (traceList.Count(x => x.userId == 0) == 5) return; var originUserList = traceList.Select(x => x.userId).ToList(); var newUserList = list.Select(x => x.UserId).ToList(); if (newUserList.Count != 5) { for (int i = newUserList.Count; i < 5; i++) { newUserList.Add(0); } } var diffRank = new List(); for (int i = 0; i < 5; i++) { int _origin = originUserList[i], _new = newUserList[i]; if (_origin == _new) { //相等 则排名没变化 diffRank.Add(0); } else { //不相等 分情况 var newIndex = originUserList.FindIndex(x => x == _new); if (newIndex != -1) { diffRank.Add(newIndex - _origin); } else { diffRank.Add(null); } } } } private void SetRank(GameObject game, TraceData item,int i) { game.transform.Find("Content/Rank").GetComponent().text = item.currentRank.ToString("00"); game.transform.Find("Content/NickName").GetComponent().text = item.NickName; //Utils.DisplayImageTempDict(game.transform.Find("Content/Avatar").GetComponent(), item.Avatar, caches); //var _c = countryList.FirstOrDefault(x => item.Country == x.country); //if (_c != null) //{ // game.transform.Find("Content/Country").GetComponent().sprite = Resources.Load(_c.source); //} int _d = 0, _p = 0; if (currentSecond < 0 || item.list.Count == 0) { } else if (currentSecond >= 0 && currentSecond < item.list.Count) { _d = item.list[currentSecond].Distance; _p = item.list[currentSecond].Power; } else { _d = item.list[item.list.Count - 1].Distance; _p = item.list[item.list.Count - 1].Power; } if (item.isMine && rowerType.type == 1 && _d > rowerType.value) { _d = (int)rowerType.value; } game.transform.Find("Content/Time").GetComponent().text = $"{_d}M"; game.transform.Find("Content/Power").GetComponent().text = $"{_p}W"; if (item.isMine) { game.transform.Find("Content/Time").GetComponent().color = Utils.HexToColorHtml("#f93086"); game.transform.Find("Content/Power").GetComponent().color = Utils.HexToColorHtml("#f93086"); game.transform.Find("Content/NickName").GetComponent().color = Utils.HexToColorHtml("#f93086"); game.transform.Find("Content/Rank").GetComponent().color = Utils.HexToColorHtml("#f93086"); } else { game.transform.Find("Content/Time").GetComponent().color = Utils.HexToColorHtml("#ffffff"); game.transform.Find("Content/Power").GetComponent().color = Utils.HexToColorHtml("#ffffff"); game.transform.Find("Content/NickName").GetComponent().color = Utils.HexToColorHtml("#ffffff"); game.transform.Find("Content/Rank").GetComponent().color = Utils.HexToColorHtml("#ffffff"); } } private List Get8UserList() { var resRanks = userList; var ind = resRanks.FindIndex(x => x.UserId == App.CurrentUser.Id); if (ind >= 8) { var tops = resRanks.Take(3).ToList(); List mys = null; if (resRanks.Count - 1 - ind < 2) { mys = resRanks.GetRange(resRanks.Count - 5, 5); } else { mys = resRanks.GetRange(ind - 2, 5); } resRanks = tops.Concat(mys).ToList(); } else { resRanks = resRanks.Take(8).ToList(); } return resRanks; } private void DisplayUserRanks(bool isRefresh = false) { if (isRefresh) { scrollRank.content.DestroyChildren(); } var list = Get8UserList(); if (scrollRank.content.childCount == 0) { for (int i = 0; i < list.Count; i++) { var item = list[i]; var game = Instantiate(rank); SetRank(game, item, i); game.transform.SetParent(scrollRank.content); game.transform.localScale = Vector3.one; game.SetActive(true); } } else { int i = 0; foreach (Transform t in scrollRank.content) { var item = list[i]; SetRank(t.gameObject, item, i); i++; } } transform.Find("Rower/Modes/Scroll/M2/Rank/MyRank").GetComponent().text = $"{userList.FindIndex(x => x.isMine) + 1} / {userList.Count}"; } private void AddTouchEvent() { pan = new TKPanRecognizer(); pan.gestureRecognizedEvent += (r) => { var startPoint = r.startPoint; if (((RectTransform)transform.Find("Rower/Modes")).isPointInTransfrom(startPoint)) { if (scroll.localPosition.x < startPosition.x - (730 / 2) && ((RectTransform)transform.Find("RankS")).isPointInTransfrom(startPoint)) { return; } var offset = pan.deltaTranslation; if (scroll.localPosition.x >= 30 || scroll.localPosition.x <= -760) return; scroll.localPosition += new Vector3(offset.x, 0, 0); } }; pan.gestureCompleteEvent += (r) => { float x = 0; string selDot = ""; if (Color.Equals(transform.Find("Rower/Dots/d1").GetComponent().color, Utils.HexToColorHtml("#f93086"))) { if (scroll.localPosition.x >= startPosition.x - ((730 * 1) / 10)) { x = startPosition.x; selDot = "d1"; } else { print(491); x = startPosition.x - 730; selDot = "d2"; } } else { if (scroll.localPosition.x >= startPosition.x - ((730 * 9) / 10)) { x = startPosition.x; selDot = "d1"; } else { x = startPosition.x - 730; selDot = "d2"; } } foreach (Transform t in transform.Find("Rower/Dots")) { t.GetComponent().color = Utils.HexToColorHtml("#ffffff"); } transform.Find($"Rower/Dots/{selDot}").GetComponent().color = Utils.HexToColorHtml("#f93086"); scroll.DOLocalMoveX(x, 0.5f); PlayerPrefs.SetFloat("RowerMultiModeLocationX", x); }; TouchKit.addGestureRecognizer(pan); print("注册触摸事件"); } private void OnDestroy() { TouchKit.removeAllGestureRecognizers(); } //交换A,B索引的赛道 //void ChangeTrace(int indexA, int indexB) //{ // if (indexA >= traceList.Count || indexB >= traceList.Count) // { // return; // } // if (traceList.Count(x => x.trace.gameObject.activeInHierarchy) == 0) return; // Trace a = traceList[indexA], b = traceList[indexB]; // //2个排名 // //先视觉交换 // float aniTime = 0.3f; // Vector3 aloc = a.trace.localPosition; // var sq = DOTween.Sequence(); // sq.Join(a.trace.DOLocalMoveY(b.trace.localPosition.y, aniTime)); // sq.Join(b.trace.DOLocalMoveY(aloc.y, aniTime)); // //逻辑交换 // var tmp = traceList[indexA]; // traceList[indexA] = traceList[indexB]; // traceList[indexB] = tmp; // var sq1 = DOTween.Sequence(); // if (traceList.Count(x => x.trace.gameObject.activeInHierarchy) != 5) return; // if (indexA == 1 && indexB == 2) // { // for (int i = 0; i < 5; i++) // { // if (i == 4) // { // sq1.Join(traceList[i].trace.DOLocalMoveY(initialPosYList[4] - 50.4f, aniTime)); // } // else // { // sq1.Join(traceList[i].trace.DOLocalMoveY(initialPosYList[i + 1], aniTime)); // } // } // sq1.AppendCallback(() => // { // traceList[4].trace.localPosition = new Vector3(traceList[0].trace.localPosition.x, initialPosYList[0] + 49.5f, traceList[0].trace.localPosition.z); // }); // sq1.Append(traceList[4].trace.DOLocalMoveY(initialPosYList[0], aniTime)); // sq.Append(sq1); // sq.Play().onComplete = () => // { // tmp = traceList[4]; // for (int i = 4; i >= 1; i--) // { // traceList[i] = traceList[i - 1]; // } // traceList[0] = tmp; // }; // } // else if (indexA == 2 && indexB == 3) // { // for (int i = 0; i < 5; i++) // { // if (i == 0) // { // sq1.Join(traceList[i].trace.DOLocalMoveY(initialPosYList[0] + 50.4f, aniTime)); // } // else // { // sq1.Join(traceList[i].trace.DOLocalMoveY(initialPosYList[i - 1], aniTime)); // } // } // sq1.AppendCallback(() => // { // traceList[0].trace.localPosition = new Vector3(traceList[0].trace.localPosition.x, initialPosYList[4] - 49.5f, traceList[0].trace.localPosition.z); // }); // sq1.Append(traceList[0].trace.DOLocalMoveY(initialPosYList[4], aniTime)); // sq.Append(sq1); // sq.Play().onComplete = () => // { // tmp = traceList[0]; // for (int i = 0; i < 4; i++) // { // traceList[i] = traceList[i + 1]; // } // traceList[4] = tmp; // }; // } //} float timer = 1f; int currentSecond = -1; private List countryList; public RowerTaskPanel.RowerType rowerType { get; set; } // Update is called once per frame void Update() { #if UNITY_EDITOR //return; timer -= Time.deltaTime; if (timer < 0) { //var r = new System.Random(); //int a = r.Next(1, 3); //print($"{a},{a+1}"); //ChangeTrace(a, a+1); HandleTimeTick(new RowerChartModel() { Distance = 15, }); timer += 1f; } #endif } }