Esempio n. 1
0
 public void Lerp(LerpData ld, bool canSkipLerp)
 {
     if (this == currentCenterMesh)
     {
         positionLerp.Lerp(ld);
         scaleLerp.Lerp(ld);
     }
 }
        public void Lerp(LerpData ld, bool canSkipLerp = false)
        {
            #region Drag

            UpdateCoverImage();

            if (this == _dragging)
            {
                if (isFading || !Shortcuts.editingNodes || !Input.GetMouseButton(0))
                {
                    _dragging = null;
                }
                else
                {
                    Vector3 pos;
                    if (UpPlane.MouseToPlane(out pos, MainCamera))
                    {
                        transform.localPosition          = pos + _dragOffset;
                        ActiveConfig.targetLocalPosition = transform.localPosition;
                    }
                }

                SetDirty();
            }


            #endregion

            #region Lerp Visual
            if (includedInLerp)
            {
                var ac = ActiveConfig;

                var needShaderUpdate = false;

                if (!lerpsFinished && (this != _dragging))
                {
                    needShaderUpdate = true;

                    _shBlur = Mathf.Lerp(_shBlur,
                                         Mathf.Clamp01((transform.localPosition - _localPos.targetValue).magnitude * 5),
                                         Time.deltaTime * 10);

                    fadePortion = Mathf.Lerp(fadePortion, isFading ? 0 : 1, ld.MinPortion);

                    var scale = _localScale.CurrentValue;

                    if (scale.x > 0)
                    {
                        _shSquare.x = scale.x > scale.y ? ((scale.x - scale.y) / scale.x) : 0;
                    }
                    else
                    {
                        _shSquare.x = 0;
                    }
                    if (scale.y > 0)
                    {
                        _shSquare.y = scale.y > scale.x ? ((scale.y - scale.x) / scale.y) : 0;
                    }
                    else
                    {
                        _shSquare.y = 0;
                    }

                    var textSize = new Vector2(17 + scale.x * 3, 5f + Mathf.Max(0, (scale.y - 1f) * 3f));

                    textA.rectTransform.sizeDelta = textSize;
                    textB.rectTransform.sizeDelta = textSize;
                }

                if (!lerpsFinished && (this != _dragging) && ld.MinPortion == 1 && LerpPosition)
                {
                    lerpsFinished = true;
                }

                if (newText != null || _activeTextAlpha < 1)
                {
                    lerpsFinished = false;

                    _activeTextAlpha = newText == null
                        ? Mathf.Lerp(_activeTextAlpha, 1, ld.Portion())
                        : LerpUtils.LerpBySpeed(_activeTextAlpha, 1, 4);

                    if (_activeTextAlpha == 1 && newText != null)
                    {
                        _activeTextIsA   = !_activeTextIsA;
                        ActiveText.text  = newText;
                        gameObject.name  = newText;
                        _activeTextAlpha = 0;
                        newText          = null;
                    }

                    needShaderUpdate = true;
                }

                bool skipLerpPossible = (_canJumpToPosition && fadePortion < 0.1f && !isFading);

                bgColor = Color.Lerp(bgColor, ac.targetColor, ld.Portion(skipLerpPossible));
                _textColor.Lerp(ld, skipLerpPossible);

                if (LerpPosition)
                {
                    _localPos.Lerp(ld);
                }

                _localScale.Lerp(ld, skipLerpPossible);
                _shadeCorners.Lerp(ld, skipLerpPossible);
                _shadeSelected.Lerp(ld, skipLerpPossible);
                _textureFadeIn.Lerp(ld, skipLerpPossible);
                _texTransition.Lerp(ld, skipLerpPossible);

                if (needShaderUpdate)
                {
                    OnShaderParametersChanged();
                }


                if (fadePortion == 0 && isFading && Application.isPlaying)
                {
                    BoxButtons.inst.Deactivate(this);
                }
            }
            #endregion

            #region Link

            bool gotLinkTarget = false;

            if (!_latestParent)
            {
                if (source != null && source.parentNode != null && source.parentNode == CurrentNode)
                {
                    _latestParent = source.parentNode.visualRepresentation as NodeCircleController;
                }
            }

            if (_latestParent)
            {
                if (_latestParent.gameObject.activeSelf)
                {
                    if (!_latestParent.isFading && (_latestParent.source != null) &&
                        (source != null) && (_latestParent.source == source.parentNode))
                    {
                        linkRenderer.startColor = linkRenderer.startColor.LerpBySpeed(bgColor, 5);
                        linkRenderer.endColor   = linkRenderer.endColor.LerpBySpeed(_latestParent.bgColor, 5);

                        if (!linkRenderer.gameObject.activeSelf)
                        {
                            linkRenderer.gameObject.SetActive(true);
                        }

                        gotLinkTarget = true;
                    }

                    linkRenderer.SetPosition(0, transform.position + Vector3.down * 0.1f);
                    linkRenderer.SetPosition(1, _latestParent.transform.position + Vector3.down * 0.1f);
                }
            }

            if (!gotLinkTarget)
            {
                linkRenderer.LerpAlpha_DisableIfZero(0, 1);
            }

            #endregion

            if (LevelArea)
            {
                LevelArea.Lerp(ld, false);
            }

            if (_mouseDown && ((Time.time - _overDownTime) > 0.2f))
            {
                _mouseDown    = false;
                lerpsFinished = false;
                audioSource.Stop();
                Debug.Log("Stopping on leave");
                audioSource.PlayOneShot(Shortcuts.Assets.onMouseLeaveSound);
            }
        }