void Update()
        {
            m_AnimDeltaTime = Time.realtimeSinceStartup - m_AnimStartTime;

            if (m_State == 1)
            {
                if (m_AnimDeltaTime < m_AnimSpeed)
                {
                    m_TempVec2               = m_RectTransform.position;
                    m_TempVec2.y             = Tween.CubeOut(m_CurrentPosition, m_OnPos.y, m_AnimDeltaTime, m_AnimSpeed);
                    m_RectTransform.position = m_TempVec2;
                    m_CanvasGroup.alpha      = Tween.CubeInOut(m_CanvasGroup.alpha, 1f, m_AnimDeltaTime, m_AnimSpeed);
                    if (m_MoveFab)
                    {
                        m_FabRectTransform.position = new Vector3(m_FabRectTransform.position.x, m_FabStartPos + (m_RectTransform.position.y - m_OffPos.y), m_FabRectTransform.position.z);
                    }
                }
                else
                {
                    m_RectTransform.position = m_OnPos;
                    if (m_MoveFab)
                    {
                        m_FabRectTransform.position = new Vector3(m_FabRectTransform.position.x, m_FabStartPos + (m_RectTransform.position.y - m_OffPos.y), m_FabRectTransform.position.z);
                    }
                    StartCoroutine(WaitTime());
                    m_State = 0;
                }
            }
            else if (m_State == 2)
            {
                if (m_AnimDeltaTime < m_AnimSpeed)
                {
                    m_TempVec2               = m_RectTransform.position;
                    m_TempVec2.y             = Tween.CubeInOut(m_CurrentPosition, m_OffPos.y, m_AnimDeltaTime, m_AnimSpeed);
                    m_RectTransform.position = m_TempVec2;
                    m_CanvasGroup.alpha      = Tween.CubeIn(m_CanvasGroup.alpha, m_OffAlpha, m_AnimDeltaTime, m_AnimSpeed);
                    if (m_MoveFab)
                    {
                        m_FabRectTransform.position = new Vector3(m_FabRectTransform.position.x, m_FabStartPos + (m_RectTransform.position.y - m_OffPos.y), m_FabRectTransform.position.z);
                    }
                }
                else
                {
                    if (m_MoveFab)
                    {
                        m_FabRectTransform.position = new Vector3(m_FabRectTransform.position.x, m_FabStartPos, m_FabRectTransform.position.z);
                    }
                    m_State = 0;
                    OnAnimDone();
                }
            }
        }
        private void UpdateAnimBar()
        {
            if (rectTransform == null)
            {
                return;
            }
            if (_animBar == 0)
            {
                return;
            }

            Kyub.Performance.SustainedPerformanceManager.Refresh(this);
            if (_animBarStartTime < 0)
            {
                _animBarStartTime = Time.realtimeSinceStartup;
            }
            float deltaTime = Time.realtimeSinceStartup - _animBarStartTime;

            //Hide
            if (_animBar == 1)
            {
                if (deltaTime < AnimationDuration)
                {
                    _lastFillAmount = Tween.CubeOut(_lastFillAmount, 0, deltaTime, AnimationDuration);
                }
                else
                {
                    _lastFillAmount = 0;
                    _animBar        = 0;
                }
            }
            //Show
            else if (_animBar == 2)
            {
                if (deltaTime < AnimationDuration)
                {
                    _lastFillAmount = Tween.CubeIn(_lastFillAmount, m_CurrentProgress, deltaTime, AnimationDuration);
                }
                else
                {
                    _lastFillAmount = m_CurrentProgress;
                    _animBar        = 0;
                }
            }
            UpdateStages(_lastFillAmount);
        }
        /// <summary>
        /// See MonoBehaviour.Update.
        /// </summary>
        void Update()
        {
            m_ScrollPosition = m_ScrollRect.normalizedPosition;

            #region EdgeDetection

            if (m_ScrollPosition.x == 0f)
            {
                if (m_LastScrollPosition.x != 0f)
                {
                    OnEdgeHit(0);
                }
            }
            else if (m_ScrollPosition.x == 1f)
            {
                if (m_LastScrollPosition.x != 1f)
                {
                    OnEdgeHit(1);
                }
            }
            else
            {
                if (m_LastScrollPosition.x == 1f || m_LastScrollPosition.x == 0f)
                {
                    OnEdgeStray(true);
                }
            }

            if (m_ScrollPosition.y == 0f)
            {
                if (m_LastScrollPosition.y != 0f)
                {
                    OnEdgeHit(3);
                }
            }
            else if (m_ScrollPosition.y == 1f)
            {
                if (m_LastScrollPosition.y != 1f)
                {
                    OnEdgeHit(2);
                }
            }
            else
            {
                if (m_LastScrollPosition.y == 1f || m_LastScrollPosition.y == 0f)
                {
                    OnEdgeStray(false);
                }
            }

            #endregion

            #region MouseDetection

            if (Input.GetMouseButtonUp(0))
            {
                if (m_PointerCount >= 1)
                {
                    for (int i = 0; i < 4; i++)
                    {
                        if ((m_ScrollHorizontal && i <= 1) || (m_ScrollVertical && i >= 2))
                        {
                            float tempPosition   = (i <= 1) ? m_ScrollPosition.x : m_ScrollPosition.y;
                            float targetPosition = (i == 0 || i == 3) ? 0f : 1f;

                            if (m_PointerDown[i] && tempPosition == targetPosition)
                            {
                                m_EdgeAnimsCurrent[i]   = m_OverscrollAmounts[i];
                                m_EdgeAnimsPower[i]     = 0;
                                m_EdgeAnimsStartTime[i] = Time.realtimeSinceStartup;
                                m_EdgeAnims[i]          = 3;
                            }
                        }
                    }

                    for (int i = 0; i < m_PointerDown.Length; i++)
                    {
                        m_PointerDown[i] = false;
                    }
                }
                else
                {
                    for (int i = 0; i < 4; i++)
                    {
                        m_PointerDown[i] = false;
                    }

                    m_PointerCount = 1;
                }

                m_PointerCount--;
            }

            #endregion

            #region MouseMovement

            bool[] anims = new bool[4];

            for (int i = 0; i < 4; i++)
            {
                if ((m_ScrollHorizontal && i <= 1) || (m_ScrollVertical && i >= 2))
                {
                    float tempPosition   = (i <= 1) ? m_ScrollPosition.x : m_ScrollPosition.y;
                    float targetPosition = (i == 0 || i == 3) ? 0f : 1f;

                    if (m_PointerDown[i] && tempPosition == targetPosition)
                    {
                        float fingerOffset        = (i <= 1) ? Input.mousePosition.y - m_RectTransform.position.y : Input.mousePosition.x - m_RectTransform.position.x;
                        float tempSize            = (i <= 1) ? m_Size.y : m_Size.x;
                        float tempMouseDifference = (i <= 1) ? (Input.mousePosition.x - m_PointerDownPosition.x) / Screen.width : (Input.mousePosition.y - m_PointerDownPosition.y) / Screen.height;

                        fingerOffset = (fingerOffset >= 0f) ? Tween.Linear(0, tempSize / 4f, fingerOffset, tempSize / 2f) : -Tween.Linear(0, tempSize / 4f, -fingerOffset, tempSize / 2f);

                        m_OverscrollPositions[i] = Mathf.Lerp(m_OverscrollPositions[i], fingerOffset, Time.deltaTime * 10f);

                        if (i == 1 || i == 2)
                        {
                            tempMouseDifference *= -1;
                        }


                        m_OverscrollAmounts[i] = Mathf.Lerp(m_PointerBaseAmounts[i], tempSize / 4f, tempMouseDifference);

                        anims[i] = false;
                    }
                    else
                    {
                        anims[i] = true;
                    }
                }
            }

            #endregion

            #region Animations

            for (int i = 0; i < m_OverscrollRectTransforms.Length; i++)
            {
                if (anims[i])
                {
                    if (m_EdgeAnims[i] == 1)
                    {
                        m_EdgeAnimsDeltaTime[i] = Time.realtimeSinceStartup - m_EdgeAnimsStartTime[i];

                        if (m_EdgeAnimsDeltaTime[i] < m_EdgeAnimDuration)
                        {
                            m_OverscrollAmounts[i] = Tween.CubeOut(m_EdgeAnimsCurrent[i], m_EdgeAnimsPower[i], m_EdgeAnimsDeltaTime[i], m_EdgeAnimDuration);
                        }
                        else
                        {
                            float tempPosition   = (i <= 1) ? m_ScrollPosition.x : m_ScrollPosition.y;
                            float targetPosition = (i == 0 || i == 3) ? 0f : 1f;

                            if (tempPosition == targetPosition)
                            {
                                m_EdgeAnimsCurrent[i]   = m_OverscrollAmounts[i];
                                m_EdgeAnimsPower[i]     = 0;
                                m_EdgeAnimsStartTime[i] = Time.realtimeSinceStartup;
                                m_EdgeAnims[i]          = 2;
                            }
                            else
                            {
                                m_OverscrollAmounts[i] = m_EdgeAnimsPower[i];
                                m_EdgeAnims[i]         = 0;
                            }
                        }
                    }
                    else if (m_EdgeAnims[i] == 2)
                    {
                        m_EdgeAnimsDeltaTime[i] = Time.realtimeSinceStartup - m_EdgeAnimsStartTime[i];

                        if (m_EdgeAnimsDeltaTime[i] < m_EdgeAnimDuration)
                        {
                            m_OverscrollAmounts[i] = Tween.CubeIn(m_EdgeAnimsCurrent[i], m_EdgeAnimsPower[i], m_EdgeAnimsDeltaTime[i], m_EdgeAnimDuration);
                        }
                        else
                        {
                            m_OverscrollAmounts[i] = m_EdgeAnimsPower[i];
                            m_EdgeAnims[i]         = 0;
                        }
                    }
                    else if (m_EdgeAnims[i] == 3)
                    {
                        m_EdgeAnimsDeltaTime[i] = Time.realtimeSinceStartup - m_EdgeAnimsStartTime[i];

                        if (m_EdgeAnimsDeltaTime[i] < m_EdgeAnimDuration * 2f)
                        {
                            m_OverscrollAmounts[i] = Tween.CubeIn(m_EdgeAnimsCurrent[i], m_EdgeAnimsPower[i], m_EdgeAnimsDeltaTime[i], m_EdgeAnimDuration * 2f);
                        }
                        else
                        {
                            m_OverscrollAmounts[i] = m_EdgeAnimsPower[i];
                            m_EdgeAnims[i]         = 0;
                        }
                    }

                    m_OverscrollPositions[i] = Mathf.Lerp(m_OverscrollPositions[i], 0f, Time.deltaTime);
                }
            }

            #endregion

            for (int i = 0; i < m_OverscrollRectTransforms.Length; i++)
            {
                if ((m_ScrollHorizontal && i <= 1) || (m_ScrollVertical && i >= 2))
                {
                    Vector2 tempAnchoredPos = (i <= 1) ? new Vector2(0f, m_OverscrollPositions[i]) : new Vector2(m_OverscrollPositions[i], 0f);
                    float   tempSize        = (i <= 1) ? m_Size.y : m_Size.x;

                    m_OverscrollRectTransforms[i].anchoredPosition = tempAnchoredPos;
                    m_OverscrollRectTransforms[i].sizeDelta        = new Vector2(tempSize * 1.5f, m_OverscrollAmounts[i] * m_OverscrollScale);
                    m_LastScrollPosition        = m_ScrollPosition;
                    m_OverscrollImages[i].color = m_OverscrollColor.WithAlpha((m_OverscrollAmounts[i] / (tempSize / 4f)) * m_OverscrollColor.a);
                }
            }
        }
        protected virtual void Update()
        {
            if (m_State > 0)
            {
                if (m_AnimStartTime < 0)
                {
                    m_AnimStartTime = Time.realtimeSinceStartup;
                }

                m_AnimDeltaTime = Time.realtimeSinceStartup - m_AnimStartTime;

                var v_onWorldPos = m_TargetTransform != null?m_TargetTransform.TransformPoint((Vector3)m_InPos) : m_InPos;

                var v_offWorldPos = m_TargetTransform != null?m_TargetTransform.TransformPoint((Vector3)m_OutPos) : m_OutPos;

                Kyub.Performance.SustainedPerformanceManager.Refresh(this);
                if (m_CurrentWaitTime >= 0)
                {
                    return;
                }
                if (m_State == 1)
                {
                    if (m_AnimDeltaTime < m_AnimSpeed)
                    {
                        m_TempVec2               = m_RectTransform.position;
                        m_TempVec2.y             = Tween.CubeOut(m_CurrentPosition, v_onWorldPos.y, m_AnimDeltaTime, m_AnimSpeed);
                        m_RectTransform.position = m_TempVec2;
                        SetLocalPositionZ(m_RectTransform, 0);
                        m_CanvasGroup.alpha = Tween.CubeInOut(m_CanvasGroup.alpha, 1f, m_AnimDeltaTime, m_AnimSpeed);
                        if (m_MoveFab)
                        {
                            m_FabRectTransform.position = new Vector3(m_FabRectTransform.position.x, m_FabStartPos + (m_RectTransform.position.y - v_offWorldPos.y), m_FabRectTransform.position.z);
                            SetLocalPositionZ(m_FabRectTransform, 0);
                        }
                    }
                    else
                    {
                        m_RectTransform.position = v_onWorldPos;
                        SetLocalPositionZ(m_RectTransform, 0);
                        if (m_MoveFab)
                        {
                            m_FabRectTransform.position = new Vector3(m_FabRectTransform.position.x, m_FabStartPos + (m_RectTransform.position.y - v_offWorldPos.y), m_FabRectTransform.position.z);
                            SetLocalPositionZ(m_FabRectTransform, 0);
                        }
                        StartCoroutine(WaitTime());
                        m_State = 3;
                    }
                }
                else if (m_State == 2)
                {
                    if (m_AnimDeltaTime < m_AnimSpeed)
                    {
                        m_TempVec2               = m_RectTransform.position;
                        m_TempVec2.y             = Tween.CubeInOut(m_CurrentPosition, v_offWorldPos.y, m_AnimDeltaTime, m_AnimSpeed);
                        m_RectTransform.position = m_TempVec2;
                        SetLocalPositionZ(m_RectTransform, 0);
                        m_CanvasGroup.alpha = Tween.CubeIn(m_CanvasGroup.alpha, m_OutAlpha, m_AnimDeltaTime, m_AnimSpeed);
                        if (m_MoveFab)
                        {
                            m_FabRectTransform.position = new Vector3(m_FabRectTransform.position.x, m_FabStartPos + (m_RectTransform.position.y - v_offWorldPos.y), m_FabRectTransform.position.z);
                            SetLocalPositionZ(m_FabRectTransform, 0);
                        }
                    }
                    else
                    {
                        if (m_MoveFab)
                        {
                            m_FabRectTransform.position = new Vector3(m_FabRectTransform.position.x, m_FabStartPos, m_FabRectTransform.position.z);
                            SetLocalPositionZ(m_FabRectTransform, 0);
                        }
                        m_State = 0;
                        OnAnimDone();
                    }
                }
            }
        }
Beispiel #5
0
        private void UpdateAnimBar()
        {
            if (rectTransform == null)
            {
                return;
            }
            if (m_AnimBar == 0)
            {
                return;
            }

            float deltaTime = Time.realtimeSinceStartup - m_AnimBarStartTime;

            m_BarLength = rectTransform.GetProperSize().x;

            if (m_AnimBar == 1)
            {
                if (deltaTime < animDuration)
                {
                    Vector2 tempVector2 = m_BarRectTransform.sizeDelta;
                    tempVector2.x = Tween.CubeIn(m_AnimBarCurrentSize, m_BarLength / 2f, deltaTime, animDuration);
                    m_BarRectTransform.sizeDelta = tempVector2;

                    tempVector2   = m_BarRectTransform.anchoredPosition;
                    tempVector2.x = Tween.CubeIn(m_AnimBarCurrentPos, m_BarLength / 4f, deltaTime, animDuration);
                    m_BarRectTransform.anchoredPosition = tempVector2;
                }
                else
                {
                    Vector2 tempVector2 = m_BarRectTransform.sizeDelta;
                    tempVector2.x = m_BarLength / 2f;
                    m_BarRectTransform.sizeDelta = tempVector2;

                    tempVector2   = m_BarRectTransform.anchoredPosition;
                    tempVector2.x = m_BarLength / 4f;
                    m_BarRectTransform.anchoredPosition = tempVector2;

                    m_AnimBarCurrentSize = m_BarRectTransform.sizeDelta.x;
                    m_AnimBarCurrentPos  = m_BarRectTransform.anchoredPosition.x;
                    m_AnimBarStartTime   = Time.realtimeSinceStartup;
                    m_AnimBar            = 2;
                }
                return;
            }
            if (m_AnimBar == 2)
            {
                if (deltaTime < animDuration)
                {
                    Vector2 tempVector2 = m_BarRectTransform.sizeDelta;
                    tempVector2.x = Tween.CubeOut(m_AnimBarCurrentSize, 0f, deltaTime, animDuration);
                    m_BarRectTransform.sizeDelta = tempVector2;

                    tempVector2   = m_BarRectTransform.anchoredPosition;
                    tempVector2.x = Tween.CubeOut(m_AnimBarCurrentPos, m_BarLength, deltaTime, animDuration);
                    m_BarRectTransform.anchoredPosition = tempVector2;
                }
                else
                {
                    Vector2 tempVector2 = m_BarRectTransform.sizeDelta;
                    tempVector2.x = 0f;
                    m_BarRectTransform.sizeDelta = tempVector2;

                    tempVector2   = m_BarRectTransform.anchoredPosition;
                    tempVector2.x = 0f;
                    m_BarRectTransform.anchoredPosition = tempVector2;

                    m_AnimBarCurrentSize = m_BarRectTransform.sizeDelta.x;
                    m_AnimBarCurrentPos  = m_BarRectTransform.anchoredPosition.x;
                    m_AnimBarStartTime   = Time.realtimeSinceStartup;
                    m_AnimBar            = 1;
                }
                return;
            }
            if (m_AnimBar == 3)
            {
                if (deltaTime < animDuration && Application.isPlaying)
                {
                    Vector2 tempVector2 = m_BarRectTransform.sizeDelta;
                    tempVector2.x = Tween.CubeInOut(m_AnimBarCurrentSize, m_AnimBarTargetSize, deltaTime, animDuration);
                    m_BarRectTransform.sizeDelta = tempVector2;

                    tempVector2   = m_BarRectTransform.anchoredPosition;
                    tempVector2.x = Tween.CubeInOut(m_AnimBarCurrentPos, 0f, deltaTime, animDuration);
                    m_BarRectTransform.anchoredPosition = tempVector2;
                }
                else
                {
                    Vector2 tempVector2 = m_BarRectTransform.sizeDelta;
                    tempVector2.x = m_AnimBarTargetSize;
                    m_BarRectTransform.sizeDelta = tempVector2;

                    tempVector2   = m_BarRectTransform.anchoredPosition;
                    tempVector2.x = 0f;
                    m_BarRectTransform.anchoredPosition = tempVector2;

                    m_AnimBar = 0;
                }
            }
        }