//左右のスクロールから戻るアニメーションを行い、新しいStateを返す public Card.State GetNextStateAfterAnimation() { Card.State result = m_CurrentState; float duration = 0.4f; float targetX = 0; m_currentHorizontalScrollMode = HorizontalScrollMode.Non; switch (m_CurrentState) { case State.Defection: //閾値以上のドラッグかつメンバーがマックスに到達していなければカードがアクティブになる if (m_Body.rectTransform.anchoredPosition.x > m_ThresholdHorizontal) { targetX = m_ThresholdHorizontal; result = SetJoin(); } else { targetX = 0; result = SetDefection(); } break; case State.Join: targetX = 0; result = SetDefection(); break; } //トゥイーンアニメーション m_Body.transform.DOLocalMoveX(targetX, duration, true).SetEase(Ease.OutBack); //テキストが揺れる m_NameText.Play(); return(result); }
//左右のスクロール中に呼ばれ続ける public void DragHorizontal(Vector2 deltaPosition, bool isMemberMax) { //戦闘参加メンバーがマックスの場合、アクティブでなければスワイプ不可 if (isMemberMax && m_CurrentState != State.Join) { return; } //基本右にしか行けないようにする m_Body.rectTransform.anchoredPosition += deltaPosition; m_Body.rectTransform.anchoredPosition = new Vector2(Mathf.Max(m_Body.rectTransform.anchoredPosition.x, 0), 0); if (m_currentHorizontalScrollMode == HorizontalScrollMode.Non) { if (m_Body.rectTransform.anchoredPosition.x > 0) { m_currentHorizontalScrollMode = HorizontalScrollMode.Right; } } // アクティブを表すパネルの表示 switch (m_CurrentState) { case State.Defection: if (m_Body.rectTransform.anchoredPosition.x > m_ThresholdHorizontal) { SetJoin(); } else { SetDefection(); } break; case State.Join: SetDefection(); break; } }