public void Populate()
        {
            m_hasCalledPopulate = true;
            state = FadeShowDestroy.Hidden;
            m_secondsSincePrevState = 0;
            m_doUpdate = false;

            if (m_canvGroup == null)
            {
                m_canvGroup = GetComponent <CanvasGroup>();
            }
            if (m_canvGroup)
            {
                m_canvGroup.alpha = 0;
            }


            m_layoutElem = GetComponent <LayoutElement>();

            if (m_layoutElem)
            {
                m_startPrefHeight = m_layoutElem.preferredHeight;
            }

            OnSelected.AddListener(() => state = FadeShowDestroy.FadeOut);
        }
 private void ShowUpdate(float t)
 {
     if (t >= 1)
     {
         state = FadeShowDestroy.FadeOut;
     }
 }
        public void StartAnimation()
        {
            if (!m_hasCalledPopulate)
            {
                Populate();
            }

            m_doUpdate = true;
            state      = FadeShowDestroy.FadeIn;
        }
 // for each of these, 0 <= t <= 1
 private void FadeInUpdate(float t)
 {
     if (t >= 1)
     {
         state = FadeShowDestroy.Show;
         return;
     }
     if (m_canvGroup)
     {
         m_canvGroup.alpha = Mathf.Lerp(0, 1, t);
     }
 }
        private void FadeOutUpdate(float t)
        {
            if (t >= 1)
            {
                state = FadeShowDestroy.Destroy;
                return;
            }

            if (m_canvGroup)
            {
                m_canvGroup.alpha = Mathf.Lerp(1, 0, t);
            }
        }