// Update is called once per frame
 void Update()
 {
     /* Testing */
     if (Input.GetKeyDown(KeyCode.Keypad1))
     {
         Form = deformType.Front;
     }
     if (Input.GetKeyDown(KeyCode.Keypad2))
     {
         Form = deformType.FrontRight;
     }
     if (Input.GetKeyDown(KeyCode.Keypad3))
     {
         Form = deformType.Right;
     }
     if (Input.GetKeyDown(KeyCode.Keypad4))
     {
         Form = deformType.BackRight;
     }
     if (Input.GetKeyDown(KeyCode.Keypad5))
     {
         Form = deformType.Back;
     }
     if (Input.GetKeyDown(KeyCode.Keypad6))
     {
         Form = deformType.BackLeft;
     }
     if (Input.GetKeyDown(KeyCode.Keypad7))
     {
         Form = deformType.Left;
     }
     if (Input.GetKeyDown(KeyCode.Keypad8))
     {
         Form = deformType.FrontLeft;
     }
     if (Input.GetKeyDown(KeyCode.Keypad9))
     {
         Form = deformType.All;
     }
     if (Input.GetKeyDown(KeyCode.Keypad0))
     {
         Form = deformType.Recover;
     }
     deform();
 }
    IEnumerator transformTimer(float time, float minValue, float maxValue, bool recover)
    {
        transforming = true;
        float normalizedTime = 0;

        fullLerpValue = halfLerpValue = minValue;
        while (normalizedTime < 1)
        {
            normalizedTime += Time.deltaTime / time;
            fullLerpValue   = Mathf.Lerp(minValue, maxValue, normalizedTime);
            halfLerpValue   = recover? Mathf.Lerp(minValue / 2, maxValue, normalizedTime): Mathf.Lerp(minValue, maxValue / 2, normalizedTime);
            yield return(null);
        }
        fullLerpValue = maxValue;
        halfLerpValue = maxValue / 2;
        transforming  = false;
        Form          = deformType.None;
        yield return(null);
    }
    void deform()
    {
        if (Form != deformType.None)
        {
            // Obtain transform value
            if (!transforming)
            {
                // Transform
                if (Form != deformType.Recover)
                {
                    StartCoroutine(transformTimer(transformTime, minimumY, maximumY, false));
                }
                // Recover
                else
                {
                    StartCoroutine(transformTimer(transformTime, maximumY, minimumY, true));
                }
            }
            // Set the transform values
            switch (Form)
            {
            case deformType.Front:
                prevForm = deformType.Front;
                deformCore.leftTopFront.y  = fullLerpValue;
                deformCore.rightTopFront.y = fullLerpValue;
                break;

            case deformType.FrontRight:
                prevForm = deformType.FrontRight;
                deformCore.leftTopFront.y  = halfLerpValue;
                deformCore.rightTopFront.y = fullLerpValue;
                deformCore.rightTopBack.y  = halfLerpValue;
                break;

            case deformType.Right:
                prevForm = deformType.Right;
                deformCore.rightTopFront.y = fullLerpValue;
                deformCore.rightTopBack.y  = fullLerpValue;
                break;

            case deformType.BackRight:
                prevForm = deformType.BackRight;
                deformCore.rightTopFront.y = halfLerpValue;
                deformCore.rightTopBack.y  = fullLerpValue;
                deformCore.leftTopBack.y   = halfLerpValue;
                break;

            case deformType.Back:
                prevForm = deformType.Back;
                deformCore.rightTopBack.y = fullLerpValue;
                deformCore.leftTopBack.y  = fullLerpValue;
                break;

            case deformType.BackLeft:
                prevForm = deformType.BackLeft;
                deformCore.rightTopBack.y = halfLerpValue;
                deformCore.leftTopBack.y  = fullLerpValue;
                deformCore.leftTopFront.y = halfLerpValue;
                break;

            case deformType.Left:
                prevForm = deformType.Left;
                deformCore.leftTopFront.y = fullLerpValue;
                deformCore.leftTopBack.y  = fullLerpValue;
                break;

            case deformType.FrontLeft:
                prevForm = deformType.FrontLeft;
                deformCore.leftTopBack.y   = halfLerpValue;
                deformCore.leftTopFront.y  = fullLerpValue;
                deformCore.rightTopFront.y = halfLerpValue;
                break;

            case deformType.All:
                prevForm = deformType.All;
                deformCore.leftTopFront.y  = fullLerpValue;
                deformCore.leftTopBack.y   = fullLerpValue;
                deformCore.rightTopFront.y = fullLerpValue;
                deformCore.rightTopBack.y  = fullLerpValue;
                break;

            case deformType.Recover:
                Form = prevForm;
                break;
            }
            // Update transform
            deformCore.btnDeform();
        }
    }
 void Start()
 {
     Form         = prevForm = deformType.None;
     transforming = false;
 }