public void Hide(GlobalEvent evt)
 {
     if (landscapePaintingStatus == LandscapePaintingStatus.CombineDisplay)
     {
         landscapePaintingStatus = LandscapePaintingStatus.HideAfterDisplay;
     }
 }
 public void Combine(GlobalEvent evt)
 {
     if (landscapePaintingStatus == LandscapePaintingStatus.SplitDisplay)
     {
         landscapePaintingStatus = LandscapePaintingStatus.CombineDisplay;
     }
 }
        public void UpdatePosition(LandscapePaintingStatus status, float lerpSpeed, bool shouldHide)
        {
            if (lastStatus != status)
            {
                lastStatus     = status;
                positionStable = false;
                rotationStable = false;
            }
            switch (status)
            {
            case LandscapePaintingStatus.Hide:
                if (!positionStable)
                {
                    targetBlock.localPosition = Vector3.Lerp(targetBlock.localPosition, combineLocalPosition, Time.deltaTime * lerpSpeed);
                    if (Vector3.Distance(targetBlock.localPosition, combineLocalPosition) < 0.001f)
                    {
                        positionStable = true;
                    }
                }
                if (!rotationStable)
                {
                    targetBlock.localRotation = Quaternion.Lerp(targetBlock.localRotation, combineLocalRotation, Time.deltaTime * lerpSpeed);
                    Quaternion v = targetBlock.localRotation * Quaternion.Inverse(combineLocalRotation);
                    Vector3    e = v.eulerAngles;
                    if (e.magnitude < 0.001f)
                    {
                        rotationStable = true;
                    }
                }
                if (shouldHide)
                {
                    Hide();
                }
                else
                {
                    Show();
                }
                break;

            case LandscapePaintingStatus.CombineDisplay:
                if (!positionStable)
                {
                    targetBlock.localPosition = Vector3.Lerp(targetBlock.localPosition, combineLocalPosition, Time.deltaTime * lerpSpeed);
                    if (Vector3.Distance(targetBlock.localPosition, combineLocalPosition) < 0.001f)
                    {
                        positionStable = true;
                    }
                }
                if (!rotationStable)
                {
                    targetBlock.localRotation = Quaternion.Lerp(targetBlock.localRotation, combineLocalRotation, Time.deltaTime * lerpSpeed);
                    Quaternion v = targetBlock.localRotation * Quaternion.Inverse(combineLocalRotation);
                    Vector3    e = v.eulerAngles;
                    if (e.magnitude < 0.001f)
                    {
                        rotationStable = true;
                    }
                }
                Show();
                break;

            case LandscapePaintingStatus.SplitDisplay:
                if (!positionStable)
                {
                    targetBlock.localPosition = Vector3.Lerp(targetBlock.localPosition, splitLocalPoint.localPosition, Time.deltaTime * lerpSpeed);
                    if (Vector3.Distance(targetBlock.localPosition, splitLocalPoint.localPosition) < 0.001f)
                    {
                        positionStable = true;
                    }
                }
                if (!rotationStable)
                {
                    targetBlock.localRotation = Quaternion.Lerp(targetBlock.localRotation, splitLocalPoint.localRotation, Time.deltaTime * lerpSpeed);
                    Quaternion v = targetBlock.localRotation * Quaternion.Inverse(splitLocalPoint.localRotation);
                    Vector3    e = v.eulerAngles;
                    if (e.magnitude < 0.001f)
                    {
                        rotationStable = true;
                    }
                }
                Show();
                break;

            case LandscapePaintingStatus.HideAfterDisplay:
                if (!positionStable)
                {
                    targetBlock.localPosition = Vector3.Lerp(targetBlock.localPosition, combineLocalPosition, Time.deltaTime * lerpSpeed);
                    if (Vector3.Distance(targetBlock.localPosition, combineLocalPosition) < 0.001f)
                    {
                        positionStable = true;
                    }
                }
                if (!rotationStable)
                {
                    targetBlock.localRotation = Quaternion.Lerp(targetBlock.localRotation, combineLocalRotation, Time.deltaTime * lerpSpeed);
                    Quaternion v = targetBlock.localRotation * Quaternion.Inverse(combineLocalRotation);
                    Vector3    e = v.eulerAngles;
                    if (e.magnitude < 0.001f)
                    {
                        rotationStable = true;
                    }
                }
                if (shouldHide)
                {
                    Hide();
                }
                else
                {
                    Show();
                }
                break;

            default: break;
            }
        }
    void UpdateState()
    {
        if (lastStatus != landscapePaintingStatus)
        {
            lastStatus     = landscapePaintingStatus;
            positionStable = false;
            rotationStable = false;
            scaleStable    = false;
        }
        switch (landscapePaintingStatus)
        {
        case LandscapePaintingStatus.Hide:
            if (!positionStable)
            {
                transform.position = Vector3.Lerp(transform.position, hidePoint.position, Time.deltaTime * lerpSpeed);
                if (Vector3.Distance(transform.position, hidePoint.position) < 0.001f)
                {
                    positionStable     = true;
                    transform.position = hidePoint.position;
                }
            }
            if (!rotationStable)
            {
                transform.rotation = Quaternion.Lerp(transform.rotation, hidePoint.rotation, Time.deltaTime * lerpSpeed);
                Quaternion v = transform.rotation * Quaternion.Inverse(hidePoint.rotation);
                Vector3    e = v.eulerAngles;
                if (e.magnitude < 0.001f)
                {
                    rotationStable     = true;
                    transform.rotation = hidePoint.rotation;
                }
            }
            if (!scaleStable)
            {
                transform.localScale = Vector3.Lerp(transform.localScale, originalScale, Time.deltaTime * lerpSpeed);
                if (Vector3.Distance(transform.localScale, originalScale) < 0.001f)
                {
                    scaleStable          = true;
                    transform.localScale = originalScale;
                }
            }
            if (positionStable && rotationStable)
            {
                childHide = true;
            }
            break;

        case LandscapePaintingStatus.CombineDisplay:
            if (!positionStable)
            {
                transform.position = Vector3.Lerp(transform.position, displayPoint.position, Time.deltaTime * lerpSpeed);
                if (Vector3.Distance(transform.position, displayPoint.position) < 0.001f)
                {
                    positionStable     = true;
                    transform.position = displayPoint.position;
                }
            }
            if (!rotationStable)
            {
                transform.rotation = Quaternion.Lerp(transform.rotation, displayPoint.rotation, Time.deltaTime * lerpSpeed);
                Quaternion v = transform.rotation * Quaternion.Inverse(displayPoint.rotation);
                Vector3    e = v.eulerAngles;
                if (e.magnitude < 0.001f)
                {
                    rotationStable     = true;
                    transform.rotation = displayPoint.rotation;
                }
            }
            if (!scaleStable)
            {
                transform.localScale = Vector3.Lerp(transform.localScale, displayScale, Time.deltaTime * lerpSpeed);
                if (Vector3.Distance(transform.localScale, displayScale) < 0.001f)
                {
                    scaleStable          = true;
                    transform.localScale = displayScale;
                }
            }

            if (positionStable && rotationStable && scaleStable)
            {
                var   p      = InputPlatform.Singleton.GetMoveVector() * InputPlatform.Singleton.ScreenSizeRatio;
                float deltaX = p.x * 0.2f;
                //float deltaY = p.y * 0.2f;
                Vector3 eulerAngles = transform.rotation.eulerAngles;
                eulerAngles       += new Vector3(0, -deltaX, 0);
                transform.rotation = Quaternion.Euler(eulerAngles);
            }
            childHide = false;
            break;

        case LandscapePaintingStatus.SplitDisplay:
            if (!positionStable)
            {
                transform.position = Vector3.Lerp(transform.position, displayPoint.position, Time.deltaTime * lerpSpeed);
                if (Vector3.Distance(transform.position, displayPoint.position) < 0.001f)
                {
                    positionStable     = true;
                    transform.position = displayPoint.position;
                }
            }
            if (!rotationStable)
            {
                transform.rotation = Quaternion.Lerp(transform.rotation, displayPoint.rotation, Time.deltaTime * lerpSpeed);
                Quaternion v = transform.rotation * Quaternion.Inverse(displayPoint.rotation);
                Vector3    e = v.eulerAngles;
                if (e.magnitude < 0.001f)
                {
                    rotationStable     = true;
                    transform.rotation = displayPoint.rotation;
                }
            }

            if (!scaleStable)
            {
                transform.localScale = Vector3.Lerp(transform.localScale, displayScale, Time.deltaTime * lerpSpeed);
                if (Vector3.Distance(transform.localScale, displayScale) < 0.001f)
                {
                    scaleStable          = true;
                    transform.localScale = displayScale;
                }
            }
            childHide = false;
            break;

        case LandscapePaintingStatus.HideAfterDisplay:
            if (!positionStable)
            {
                transform.position = Vector3.Lerp(transform.position, hidePoint.position, Time.deltaTime * lerpSpeed);
                if (Vector3.Distance(transform.position, hidePoint.position) < 0.001f)
                {
                    positionStable     = true;
                    transform.position = hidePoint.position;
                }
            }
            if (!rotationStable)
            {
                transform.rotation = Quaternion.Lerp(transform.rotation, hidePoint.rotation, Time.deltaTime * lerpSpeed);
                Quaternion v = transform.rotation * Quaternion.Inverse(hidePoint.rotation);
                Vector3    e = v.eulerAngles;
                if (e.magnitude < 0.001f)
                {
                    rotationStable     = true;
                    transform.rotation = hidePoint.rotation;
                }
            }
            if (!scaleStable)
            {
                transform.localScale = Vector3.Lerp(transform.localScale, originalScale, Time.deltaTime * lerpSpeed);
                if (Vector3.Distance(transform.localScale, originalScale) < 0.001f)
                {
                    scaleStable          = true;
                    transform.localScale = originalScale;
                }
            }

            if (positionStable && rotationStable)
            {
                childHide = true;
            }
            else
            {
                childHide = false;
            }
            break;

        default: break;
        }

        foreach (var sb in splitingBlocks)
        {
            sb.UpdatePosition(landscapePaintingStatus, lerpSpeed, childHide);
        }
        lastStatus = landscapePaintingStatus;
    }