public void CreateTap(List <string> sentence, List <string> showWords, float sentenceDuration, int sentenceIndex)
    {
        List <BossTap> tapDic = new List <BossTap>();
        List <string>  keys   = new List <string>();
        int            number = sentence.Count;

        for (int i = 0; i < number; i++)
        {
            if (!keys.Contains(sentence[i]))
            {
                BossTap tap = new BossTap();
                tap.Init(showWords[i], sentence[i], Vector3.zero, sentenceIndex);
                tapDic.Add(tap);
                keys.Add(sentence[i]);
            }
        }
        m_TapDic = tapDic;
        StaticMonoBehaviour.Instance.StartCoroutine(ResetTapPosition());
    }
    List <PossibleRange> GetPossibleRange(BossTap tap)
    {
        List <PossibleRange> result = new List <PossibleRange>();
        float width = tap.GetScaler().x + WidthExtra;

        if (width < MinWidth)
        {
            width = MinWidth;
        }
        for (int i = 0; i < m_LineHeight.Length; i++)
        {
            if (m_Lines[i].Space.Count == 0)
            {
                PossibleRange posRan = new PossibleRange();
                posRan.LineIndex        = i;
                posRan.LeftToRightRange = new KeyValuePair <float, float>(m_RectCenter - RectWidth * 0.5f, m_RectCenter + RectWidth * 0.5f);
                result.Add(posRan);
                continue;
            }
            else
            {
                for (int j = 0; j < m_Lines[i].Space.Count; j++)
                {
                    float leftEdge, rightEdge;
                    if (j == 0)
                    {
                        leftEdge = m_RectCenter - RectWidth * 0.5f;
                    }
                    else
                    {
                        leftEdge = m_Lines[i].Space[j - 1].Value;
                    }

                    if (j == m_Lines[i].Space.Count - 1)
                    {
                        rightEdge = m_RectCenter + RectWidth * 0.5f;
                    }
                    else
                    {
                        rightEdge = m_Lines[i].Space[j + 1].Key;
                    }


                    if (m_Lines[i].Space[j].Key - leftEdge > width)
                    {
                        PossibleRange posRan = new PossibleRange();
                        posRan.LineIndex        = i;
                        posRan.LeftToRightRange = new KeyValuePair <float, float>(leftEdge, m_Lines[i].Space[j].Key);
                        result.Add(posRan);
                    }

                    if (j == m_Lines[i].Space.Count - 1)
                    {
                        if (rightEdge - m_Lines[i].Space[j].Value > width)
                        {
                            PossibleRange posRan = new PossibleRange();
                            posRan.LineIndex        = i;
                            posRan.LeftToRightRange = new KeyValuePair <float, float>(m_Lines[i].Space[j].Value, rightEdge);
                            result.Add(posRan);
                        }
                    }
                }
            }
        }
        return(result);
    }