public void Move(int p = 0) { if (Global.MUSIC_TABLE.Count == 0) { return; } selectIndex += p; direction = p; if (selectIndex < 0) { selectIndex = 0; } else if (cards != null && selectIndex >= dataList.Count) { selectIndex = dataList.Count - 1; } songCount.text = (selectIndex + 1) + "/" + Global.MUSIC_TABLE.Count; LoadCover(); reach = REACH_STATE.NONE; }
// Update is called once per frame void FixedUpdate() { if (cards == null || cards.Count == 0 || !initComplete || !isScroll) { return; } if (selectIndex < 0) { selectIndex = 0; } else if (selectIndex >= dataList.Count) { selectIndex = dataList.Count - 1; } float ty = -cards[0].index * cardHeight; float tx = -cards[0].index * xOffset; Vector3 temp = Vector3.one; float selectedY = 0; float selectedX = 0; for (int i = 0; i < cards.Count; i++) { SongCard go = cards[i]; if (go.resetPositionNow) { temp.Set(tx, ty, 0); go.transform.localPosition = temp; go.resetPositionNow = false; } else { temp.Set(tx, go.gameObject.transform.localPosition.y + (ty - go.gameObject.transform.localPosition.y) * speed, 0); go.transform.localPosition = temp; } go.SetHover(go.index == selectIndex); if (reach == REACH_STATE.NONE && Mathf.Abs(ty - go.gameObject.transform.localPosition.y) < 0.1f) { reach = REACH_STATE.REACH; } float targetS = 1; if (go.index == selectIndex) { curCard = go; selectedX = go.transform.localPosition.x; selectedY = go.transform.localPosition.y; targetS = 1.25f; ty -= oneOffset; } else if (go.index == (selectIndex - 1)) { ty -= oneOffset * 1.2f; targetS = 1.1f; } else if (go.index == (selectIndex + 1)) { targetS = 1.1f; ty -= oneOffset * 0.5f; } else if (i == (selectIndex - 2)) { ty -= oneOffset * 0.5f; } temp.Set(go.transform.localScale.x + (targetS - go.transform.localScale.x) * speed, go.transform.localScale.y + (targetS - go.transform.localScale.y) * speed, 1); go.transform.localScale = temp; ty -= (i == selectIndex ? hoverH : normalH) - yOffset; tx -= xOffset; } if (reach == REACH_STATE.REACH) { SongCard g; if (direction < 0) { //向上加 if (cards[0].index > 0) { g = cards[cards.Count - 1]; if (selectIndex <= (dataList.Count - upDownLeave - 1)) { g.SetData(dataList[cards[0].index - 1]); g.resetPositionNow = true; cards.RemoveAt(cards.Count - 1); cards.Insert(0, g); } } } else if (direction > 0) { if ((cards[cards.Count - 1].index + 1) < dataList.Count) { g = cards[0]; if (selectIndex >= upDownLeave) { SongCard sc = cards[cards.Count - 1]; SongData nextData = dataList[sc.data.index + 1]; g.SetData(nextData); g.resetPositionNow = true; cards.RemoveAt(0); cards.Add(g); } } } reach = REACH_STATE.DONE; } temp.Set(transform.localPosition.x + (bornPos.x - selectedX - transform.localPosition.x) * speed, transform.localPosition.y + (-selectedY + hight - transform.localPosition.y) * speed, 0); transform.localPosition = temp; if (firstTime) { speed = .3f; firstTime = false; } }