新版本动画:上下滑动切换有箭头
This commit is contained in:
1 parent
7780dc5ee5
commit
874dec5ec6
7 files changed
+6316
-3357
No files matched your search
@@ -14,7 +14,7 @@ public class RowerMultiModeScript : MonoBehaviour
|
||||
{
|
||||
// Start is called before the first frame update
|
||||
[SerializeField]
|
||||
GameObject rank;
|
||||
GameObject rank,trace;
|
||||
|
||||
Transform scroll,m2;
|
||||
Vector3 startPosition,boatStartPosition;
|
||||
@@ -65,22 +65,23 @@ public class RowerMultiModeScript : MonoBehaviour
|
||||
AddTouchEvent();
|
||||
m2 = transform.Find("Rower/Modes/Scroll/M2");
|
||||
caches = new Dictionary<string, Texture>();
|
||||
traceList = new List<Trace>()
|
||||
{
|
||||
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<float>
|
||||
{
|
||||
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,
|
||||
};
|
||||
traceList = new List<Trace>();
|
||||
//traceList = new List<Trace>()
|
||||
//{
|
||||
// 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<float>
|
||||
//{
|
||||
// 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<ScrollRect>();
|
||||
var countryJson = Resources.Load<TextAsset>("UI/flags-mini").text;
|
||||
countryList = JsonConvert.DeserializeObject<List<CountryModel>>(countryJson);
|
||||
@@ -130,6 +131,14 @@ public class RowerMultiModeScript : MonoBehaviour
|
||||
{
|
||||
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;
|
||||
}
|
||||
@@ -160,6 +169,7 @@ public class RowerMultiModeScript : MonoBehaviour
|
||||
{
|
||||
public int rank { get; set; }
|
||||
public int diff { get; set; }
|
||||
public int sumdiff { get; set; }
|
||||
}
|
||||
public Dictionary<int, RankDiff> rankDiffDict;
|
||||
public async void GetShadowList(RowerTaskPanel.RowerType rowerType)
|
||||
@@ -168,11 +178,11 @@ public class RowerMultiModeScript : MonoBehaviour
|
||||
currentSecond = -1;
|
||||
var res = await ConfigHelper.rowerApi.GetShadowList(rowerType);
|
||||
shadowList = res.data;
|
||||
foreach (var t in traceList)
|
||||
{
|
||||
t.userId = 0;
|
||||
t.trace.gameObject.SetActive(false);
|
||||
}
|
||||
//foreach (var t in traceList)
|
||||
//{
|
||||
// t.userId = 0;
|
||||
// t.trace.gameObject.SetActive(false);
|
||||
//}
|
||||
var _tmpList = shadowList.Select(x => new TraceData
|
||||
{
|
||||
list = x.list,
|
||||
@@ -191,7 +201,8 @@ public class RowerMultiModeScript : MonoBehaviour
|
||||
myData.Avatar = App.CurrentUser.WxHeadImg;
|
||||
myData.isMine = true;
|
||||
myData.Country = App.CurrentUser.Country;
|
||||
_tmpList.Add(myData);
|
||||
_tmpList.Insert(_tmpList.Count / 2, myData);
|
||||
//_tmpList.Add(myData);
|
||||
userList = _tmpList.OrderByDescending(x => x.currentDistance).ToList();
|
||||
rankDiffDict = new Dictionary<int, RankDiff>();
|
||||
for (int i = 0; i < userList.Count; i++)
|
||||
@@ -200,186 +211,417 @@ public class RowerMultiModeScript : MonoBehaviour
|
||||
rankDiffDict.Add(userList[i].UserId, new RankDiff { rank = userList[i].currentRank, diff = 0 });
|
||||
}
|
||||
DisplayUserRanks(true);
|
||||
DisplayTraces();
|
||||
DisplayTraces(true);
|
||||
}
|
||||
private void DisplayTraces()
|
||||
private void DisplayTrace(Transform t,TraceData data,TraceData mineData,bool isAni = false)
|
||||
{
|
||||
var list = HandleData();
|
||||
//CompareTraceList(traceList, list);
|
||||
int i = 0;
|
||||
var mineData = list.FirstOrDefault(x => x.isMine);
|
||||
for (i = 0; i < list.Count;i++)
|
||||
if (string.IsNullOrEmpty(data.Avatar))
|
||||
{
|
||||
var sq = DOTween.Sequence();
|
||||
var item = traceList[i];
|
||||
var data = list[i];
|
||||
var t = item.trace.Find("p2");
|
||||
TweenCallback callback = () =>
|
||||
{
|
||||
if (string.IsNullOrEmpty(data.Avatar))
|
||||
{
|
||||
t.Find("Left/Avatar").GetComponent<RawImage>().texture = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
Utils.DisplayImageTempDict(t.Find("Left/Avatar").GetComponent<RawImage>(), data.Avatar, caches);
|
||||
}
|
||||
var _c = countryList.SingleOrDefault(x => x.country == data.Country);
|
||||
if (_c != null)
|
||||
{
|
||||
t.Find("Left/Avatar/Country").GetComponent<Image>().sprite = Resources.Load<Sprite>(_c.source);
|
||||
}
|
||||
t.Find("Left/NickName").GetComponent<Text>().text = data.NickName;
|
||||
t.Find("Left/Avatar").GetComponent<RawImage>().texture = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
Utils.DisplayImageTempDict(t.Find("Left/Avatar").GetComponent<RawImage>(), data.Avatar, caches);
|
||||
}
|
||||
var _c = countryList.SingleOrDefault(x => x.country == data.Country);
|
||||
if (_c != null)
|
||||
{
|
||||
t.Find("Left/Avatar/Country").GetComponent<Image>().sprite = Resources.Load<Sprite>(_c.source);
|
||||
}
|
||||
t.Find("Left/NickName").GetComponent<Text>().text = data.NickName;
|
||||
|
||||
if (data.list.Count == 0)
|
||||
{
|
||||
t.Find("Left/Time").GetComponent<Text>().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>().text = TimeSpan.FromSeconds(_d.Pace).ToString(@"mm\:ss");
|
||||
}
|
||||
else
|
||||
{
|
||||
var _d = data.list[data.list.Count - 1];
|
||||
t.Find("Left/Time").GetComponent<Text>().text = TimeSpan.FromSeconds(_d.Pace).ToString(@"mm\:ss");
|
||||
}
|
||||
var diff = data.currentDistance - mineData.currentDistance;
|
||||
if (diff > 0)
|
||||
{
|
||||
t.Find("Main/Diff").GetComponent<Text>().text = diff.ToString("+#0M");
|
||||
}
|
||||
else if (diff == 0)
|
||||
{
|
||||
t.Find("Main/Diff").GetComponent<Text>().text = data.isMine ? "" : diff.ToString("#0M");
|
||||
}
|
||||
else
|
||||
{
|
||||
t.Find("Main/Diff").GetComponent<Text>().text = diff.ToString("#0M");
|
||||
}
|
||||
if (data.isMine)
|
||||
{
|
||||
t.transform.Find("Left/Time").GetComponent<Text>().color = Utils.HexToColorHtml("#f93086");
|
||||
t.transform.Find("Left/NickName").GetComponent<Text>().color = Utils.HexToColorHtml("#f93086");
|
||||
}
|
||||
else
|
||||
{
|
||||
t.transform.Find("Left/Time").GetComponent<Text>().color = Utils.HexToColorHtml("#ffffff");
|
||||
t.transform.Find("Left/NickName").GetComponent<Text>().color = Utils.HexToColorHtml("#ffffff");
|
||||
}
|
||||
};
|
||||
if (!item.trace.gameObject.activeInHierarchy)
|
||||
if (data.list.Count == 0)
|
||||
{
|
||||
t.Find("Left/Time").GetComponent<Text>().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>().text = TimeSpan.FromSeconds(_d.Pace).ToString(@"mm\:ss");
|
||||
}
|
||||
else
|
||||
{
|
||||
var _d = data.list[data.list.Count - 1];
|
||||
t.Find("Left/Time").GetComponent<Text>().text = TimeSpan.FromSeconds(_d.Pace).ToString(@"mm\:ss");
|
||||
}
|
||||
var diff = data.currentDistance - mineData.currentDistance;
|
||||
if (diff > 0)
|
||||
{
|
||||
t.Find("Main/Diff").GetComponent<Text>().text = diff.ToString("+#0M");
|
||||
}
|
||||
else if (diff == 0)
|
||||
{
|
||||
if (data.isMine)
|
||||
{
|
||||
t = item.trace.Find("p1");
|
||||
item.trace.gameObject.SetActive(true);
|
||||
callback();
|
||||
continue;
|
||||
}
|
||||
//var rotatesq = item.trace.GetComponent<RowerTraceAnimated>().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<RowerTraceAnimated>().startAnimation(0.8f, callback);
|
||||
if (rotatesq != null)
|
||||
var originstr = $"<color=#f93086>{userList.FindIndex(x => x.isMine) + 1}</color> / {userList.Count}";
|
||||
var str = originstr;
|
||||
var mytxt = t.Find("Main/Diff").GetComponent<Text>();
|
||||
if (rankDiffDict[data.UserId].diff != 0)
|
||||
{
|
||||
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 myranksq = DOTween.Sequence();
|
||||
myranksq.AppendCallback(() =>
|
||||
{
|
||||
//上次划桨次数和这次不一样 说明需要划桨一次
|
||||
var spDict = GetComponent<RowerHomeScript>().spriteDict;
|
||||
int spDictIndex = 0;
|
||||
sq.Join(DOTween.To(() => spDictIndex, x => t.Find("Main/Boat").GetComponent<Image>().sprite = spDict[x], 14, 0.3f));
|
||||
sq.AppendCallback(() =>
|
||||
{
|
||||
int spDictIndex2 = 14;
|
||||
DOTween.To(() => spDictIndex2, x => t.Find("Main/Boat").GetComponent<Image>().sprite = spDict[x], 0, 0.6f);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
var width = t.Find("Main").GetComponent<RectTransform>().sizeDelta.x - t.Find("Main/Boat").GetComponent<RectTransform>().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);
|
||||
mytxt.DOFade(0, 0);
|
||||
if (rankDiffDict[data.UserId].diff > 0) str = "<color=#f93086>↑</color>";
|
||||
else if (rankDiffDict[data.UserId].diff < 0) str = "<color=#2fb95b>↓</color>";
|
||||
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
|
||||
{
|
||||
sq.Join(t.Find("Main/Boat").DOLocalMoveX(21.5f + tWidth, 0.9f));
|
||||
}
|
||||
|
||||
mytxt.text = originstr;
|
||||
}
|
||||
}
|
||||
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);
|
||||
t.Find("Main/Diff").GetComponent<Text>().text = diff.ToString("#0M");
|
||||
}
|
||||
//排名变化
|
||||
var diffTransfrom = transform.Find("Rower/Modes/Scroll/M2/Track/RankDiff"+item.trace.name).GetComponent<Text>();
|
||||
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++)
|
||||
else
|
||||
{
|
||||
traceList[i].userId = 0;
|
||||
traceList[i].trace.gameObject.SetActive(false);
|
||||
t.Find("Main/Diff").GetComponent<Text>().text = diff.ToString("#0M");
|
||||
}
|
||||
if (data.isMine)
|
||||
{
|
||||
t.transform.Find("Left/Time").GetComponent<Text>().color = Utils.HexToColorHtml("#f93086");
|
||||
t.transform.Find("Left/NickName").GetComponent<Text>().color = Utils.HexToColorHtml("#f93086");
|
||||
}
|
||||
else
|
||||
{
|
||||
t.transform.Find("Left/Time").GetComponent<Text>().color = Utils.HexToColorHtml("#ffffff");
|
||||
t.transform.Find("Left/NickName").GetComponent<Text>().color = Utils.HexToColorHtml("#ffffff");
|
||||
}
|
||||
|
||||
var width = t.Find("Main").GetComponent<RectTransform>().sizeDelta.x - t.Find("Main/Boat").GetComponent<RectTransform>().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 (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)
|
||||
{
|
||||
var _pred = data.list[currentSecond - 1];
|
||||
if (_pred.StrokeCount != _d.StrokeCount)
|
||||
{
|
||||
//上次划桨次数和这次不一样 说明需要划桨一次
|
||||
var spDict = GetComponent<RowerHomeScript>().spriteDict;
|
||||
int spDictIndex = 0;
|
||||
ani.Join(DOTween.To(() => spDictIndex, x => t.Find("Main/Boat").GetComponent<Image>().sprite = spDict[x], 14, 0.2f));
|
||||
ani.AppendCallback(() =>
|
||||
{
|
||||
int spDictIndex2 = 14;
|
||||
DOTween.To(() => spDictIndex2, x => t.Find("Main/Boat").GetComponent<Image>().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<GameObject>(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;
|
||||
traceList.Add(new Trace { userId = data.UserId, trace = g.transform.Find("T1") });
|
||||
}
|
||||
listc.DOLocalMoveY(47 * sindex + 115.5f, 0.8f);
|
||||
return;
|
||||
}
|
||||
var allsq = DOTween.Sequence();
|
||||
|
||||
if (currentSecond % 2 == 1)
|
||||
{
|
||||
allsq.Append(listc.DOLocalMoveY(47 * sindex + 115.5f, 0.5f).SetEase(Ease.InBounce));
|
||||
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<CanvasGroup>().DOFade(0, 0.5f).SetEase(Ease.OutSine));
|
||||
}
|
||||
if (data.UserId != App.CurrentUser.Id)
|
||||
{
|
||||
sq1.Append(t.GetComponent<CanvasGroup>().DOFade(0.68f, 0.45f).SetEase(Ease.InSine));
|
||||
sq1.AppendCallback(() =>
|
||||
{
|
||||
DisplayTrace(t.Find("p1"), data, mineData);
|
||||
});
|
||||
sq1.Append(t.GetComponent<CanvasGroup>().DOFade(1, 0.45f));
|
||||
}
|
||||
else
|
||||
{
|
||||
mysq.Join(t.GetComponent<RowerTraceAnimated>().startAnimation(0.5f, () =>
|
||||
{
|
||||
DisplayTrace(t.Find("p2"), data, mineData);
|
||||
}, rankDiffDict[data.UserId].sumdiff >= 0 ? 1 : 0));
|
||||
allsq.Append(mysq);
|
||||
}
|
||||
}
|
||||
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<RowerTraceAnimated>().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<RowerTraceAnimated>().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<RowerHomeScript>().spriteDict;
|
||||
// int spDictIndex = 0;
|
||||
// sq.Join(DOTween.To(() => spDictIndex, x => t.Find("Main/Boat").GetComponent<Image>().sprite = spDict[x], 14, 0.3f));
|
||||
// sq.AppendCallback(() =>
|
||||
// {
|
||||
// int spDictIndex2 = 14;
|
||||
// DOTween.To(() => spDictIndex2, x => t.Find("Main/Boat").GetComponent<Image>().sprite = spDict[x], 0, 0.6f);
|
||||
// });
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// var width = t.Find("Main").GetComponent<RectTransform>().sizeDelta.x - t.Find("Main/Boat").GetComponent<RectTransform>().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<Text>();
|
||||
//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<Trace> traceList, List<TraceData> list)
|
||||
@@ -586,87 +828,87 @@ public class RowerMultiModeScript : MonoBehaviour
|
||||
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;
|
||||
//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;
|
||||
};
|
||||
}
|
||||
}
|
||||
// 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<CountryModel> countryList;
|
||||
|
||||
@@ -12,7 +12,21 @@ public class RowerTraceAnimated : MonoBehaviour
|
||||
{
|
||||
//print(v1.Value.ToString() + v2.Value.ToString() + v3.Value.ToString());
|
||||
}
|
||||
public Sequence startAnimation(float time, TweenCallback callback)
|
||||
private void Awake()
|
||||
{
|
||||
if (!v1.HasValue) v1 = transform.localPosition;
|
||||
if (!v2.HasValue) v2 = transform.Find("p1").localPosition;
|
||||
if (!v3.HasValue) v3 = transform.Find("p2").localPosition;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="time"></param>
|
||||
/// <param name="callback"></param>
|
||||
/// <param name="type"></param>
|
||||
/// <returns></returns>
|
||||
public Sequence startAnimation(float time, TweenCallback callback, int type = 0)
|
||||
{
|
||||
//if (sq != null && sq.IsPlaying())
|
||||
//{
|
||||
@@ -20,19 +34,22 @@ public class RowerTraceAnimated : MonoBehaviour
|
||||
//}
|
||||
Transform c = transform, c1 = c.Find("p1"), c2 = c.Find("p2");
|
||||
var rect = c.GetComponent<RectTransform>();
|
||||
|
||||
var dirOffset = 0f;
|
||||
if (type == 1) dirOffset = -1f * rect.sizeDelta.y;
|
||||
|
||||
var offset = rect.sizeDelta.y / 2;
|
||||
var sq = DOTween.Sequence();
|
||||
sq.AppendCallback(() =>
|
||||
{
|
||||
if (!v1.HasValue) v1 = transform.localPosition;
|
||||
if (!v2.HasValue) v2 = transform.Find("p1").localPosition;
|
||||
if (!v3.HasValue) v3 = transform.Find("p2").localPosition;
|
||||
c2.localPosition = v3.Value + new Vector3(0, dirOffset, 0);
|
||||
c2.localRotation = Quaternion.Euler(new Vector3(type == 1 ? 270 : 90, 0, 0));
|
||||
callback();
|
||||
//print(c.localPosition.ToString() + c.Find("p1").localPosition.ToString() + c.Find("p2").localPosition.ToString());
|
||||
});
|
||||
var sq1 = DOTween.Sequence();
|
||||
sq1.Join(c.DORotate(new Vector3(-90, 0, 0), time));
|
||||
sq1.Join(c.DOLocalMoveY(v1.Value.y - offset, time));
|
||||
sq1.Join(c.DORotate(new Vector3(type == 1 ? 90 : -90, 0, 0), time));
|
||||
sq1.Join(c.DOLocalMoveY(v1.Value.y + (type == 0 ? -offset : offset), time));
|
||||
sq1.Join(c.DOLocalMoveZ(v1.Value.z + offset, time));
|
||||
//var sq2 = DOTween.Sequence();
|
||||
//sq2.Append(c.DOLocalMoveZ(v1.Value.z + offset*0.14f, time * 0.5f));
|
||||
@@ -48,10 +65,10 @@ public class RowerTraceAnimated : MonoBehaviour
|
||||
c2.name = "p2";
|
||||
c.localPosition = v1.Value;
|
||||
c1.localPosition = v2.Value;
|
||||
c2.localPosition = v3.Value;
|
||||
c2.localPosition = v3.Value + new Vector3(0, dirOffset, 0);
|
||||
c.localRotation = Quaternion.Euler(Vector3.zero);
|
||||
c1.localRotation = Quaternion.Euler(Vector3.zero);
|
||||
c2.localRotation = Quaternion.Euler(new Vector3(90, 0, 0));
|
||||
c2.localRotation = Quaternion.Euler(new Vector3(type == 1 ? 270 : 90, 0, 0));
|
||||
});
|
||||
sq.Play();
|
||||
return sq;
|
||||
|
||||
Reference in new issue
Block a user