void Awake()
    {
        Screen.SetResolution(360, 640, false);

        cameraTransform = GameObject.Find("Main Camera").transform;

        shouldSnapUp   = false;
        shouldSnapDown = false;
        shouldSnapBack = false;
        isSnapping     = false;
        _menuPosition  = MainMenuPosition.Center;

        swipeTextCanvasGroup = transform.GetChild(4).GetComponent <CanvasGroup>();
        titleTransform       = transform.GetChild(1);
        titleAnimate         = new Animate(titleTransform);

        alienBodyImage        = transform.GetChild(3).GetChild(0).GetComponent <Image>();
        alienBodyImage.sprite = alienBodySprites[Random.Range(0, alienBodySprites.Length)];
        backgroundImage       = new SpriteRenderer[5];
        backgroundImage[0]    = transform.GetChild(5).GetComponent <SpriteRenderer>();
        backgroundImage[1]    = transform.GetChild(6).GetComponent <SpriteRenderer>();
        backgroundImage[2]    = transform.GetChild(7).GetComponent <SpriteRenderer>();
        backgroundImage[3]    = transform.GetChild(8).GetComponent <SpriteRenderer>();
        backgroundImage[4]    = transform.GetChild(9).GetComponent <SpriteRenderer>();

        int randColor = Random.Range(0, backgroundColors.Length);

        for (int i = 0; i < backgroundImage.Length; i++)
        {
            backgroundImage[i].color = backgroundColors[randColor];
        }

        for (int i = 0; i < particleSystems.Length; i++)
        {
            particleSystems[i].startColor = backgroundColors[randColor];
            particleSystems[i].Clear();
            particleSystems[i].Simulate(particleSystems[i].startLifetime);
            particleSystems[i].Play();
        }
    }
    void Update()
    {
        if (shouldSnapUp)
        {
            cameraTransform.position += Vector3.up * snapSpeed * Time.deltaTime * slowDownFactor;
            if (slowDownFactor > minSlowDownFactor)
            {
                slowDownFactor *= 0.925f;
            }
            else
            {
                slowDownFactor = minSlowDownFactor;
            }

            switch (_menuPosition)
            {
            case MainMenuPosition.Bottom:
                if (cameraTransform.position.y > 0f)
                {
                    cameraTransform.position = new Vector3(cameraTransform.position.x, 0f, cameraTransform.position.z);
                    _menuPosition            = MainMenuPosition.Center;
                    shouldSnapUp             = false;
                    isSnapping = false;
                }
                break;

            case MainMenuPosition.Center:
                if (cameraTransform.position.y > maxY)
                {
                    cameraTransform.position = new Vector3(cameraTransform.position.x, maxY, cameraTransform.position.z);
                    _menuPosition            = MainMenuPosition.Top;
                    shouldSnapUp             = false;
                    isSnapping = false;
                }
                break;
            }
        }

        if (shouldSnapDown)
        {
            cameraTransform.position -= Vector3.up * snapSpeed * Time.deltaTime;
            switch (_menuPosition)
            {
            case MainMenuPosition.Top:
                if (cameraTransform.position.y < 0f)
                {
                    cameraTransform.position = new Vector3(cameraTransform.position.x, 0f, cameraTransform.position.z);
                    _menuPosition            = MainMenuPosition.Center;
                    shouldSnapDown           = false;
                    isSnapping = false;
                }
                break;

            case MainMenuPosition.Center:
                if (cameraTransform.position.y < minY)
                {
                    cameraTransform.position = new Vector3(cameraTransform.position.x, minY, cameraTransform.position.z);
                    _menuPosition            = MainMenuPosition.Bottom;
                    shouldSnapDown           = false;
                    isSnapping = false;
                }
                break;
            }
        }

        if (shouldSnapBack)
        {
            switch (_menuPosition)
            {
            case MainMenuPosition.Top:
                _menuPosition = MainMenuPosition.Center;
                shouldSnapUp  = true;
                isSnapping    = true;
                break;

            case MainMenuPosition.Center:
                if (cameraTransform.position.y > 0)
                {
                    _menuPosition  = MainMenuPosition.Top;
                    shouldSnapDown = true;
                    isSnapping     = true;
                }
                else
                {
                    _menuPosition = MainMenuPosition.Bottom;
                    shouldSnapUp  = true;
                    isSnapping    = true;
                }
                break;

            case MainMenuPosition.Bottom:
                _menuPosition  = MainMenuPosition.Center;
                shouldSnapDown = true;
                isSnapping     = true;
                break;
            }

            shouldSnapBack = false;
        }

        swipeTextCanvasGroup.alpha = 1f - Mathf.Abs(cameraTransform.position.y) * alphaMultiplier;
        titleTransform.position    = new Vector3(0f, cameraTransform.position.y * titlePosMultiplier);
        if (titleAnimate.IsExpandContract == false)
        {
            titleAnimate.ExpandContract(2.0f, 1, 1.1f);
        }
    }
    void Awake()
    {
        Screen.SetResolution(360, 640, false);

        cameraTransform = GameObject.Find("Main Camera").transform;

        shouldSnapUp = false;
        shouldSnapDown = false;
        shouldSnapBack = false;
        isSnapping = false;
        _menuPosition = MainMenuPosition.Center;

        swipeTextCanvasGroup = transform.GetChild(4).GetComponent<CanvasGroup>();
        titleTransform = transform.GetChild(1);
        titleAnimate = new Animate(titleTransform);

        alienBodyImage = transform.GetChild(3).GetChild(0).GetComponent<Image>();
        alienBodyImage.sprite = alienBodySprites[Random.Range(0, alienBodySprites.Length)];
        backgroundImage = new SpriteRenderer[5];
        backgroundImage[0] = transform.GetChild(5).GetComponent<SpriteRenderer>();
        backgroundImage[1] = transform.GetChild(6).GetComponent<SpriteRenderer>();
        backgroundImage[2] = transform.GetChild(7).GetComponent<SpriteRenderer>();
        backgroundImage[3] = transform.GetChild(8).GetComponent<SpriteRenderer>();
        backgroundImage[4] = transform.GetChild(9).GetComponent<SpriteRenderer>();

        int randColor = Random.Range(0, backgroundColors.Length);
        for (int i = 0; i < backgroundImage.Length; i++)
        {
            backgroundImage[i].color = backgroundColors[randColor];
        }

        for (int i = 0; i < particleSystems.Length; i++)
        {
            particleSystems[i].startColor = backgroundColors[randColor];
            particleSystems[i].Clear();
            particleSystems[i].Simulate(particleSystems[i].startLifetime);
            particleSystems[i].Play();
        }
    }
    void Update()
    {
        if (shouldSnapUp)
        {
            cameraTransform.position += Vector3.up * snapSpeed * Time.deltaTime * slowDownFactor;
            if (slowDownFactor > minSlowDownFactor)
                slowDownFactor *= 0.925f;
            else
                slowDownFactor = minSlowDownFactor;

            switch(_menuPosition)
            {
            case MainMenuPosition.Bottom:
                if (cameraTransform.position.y > 0f)
                {
                    cameraTransform.position = new Vector3(cameraTransform.position.x, 0f, cameraTransform.position.z);
                    _menuPosition = MainMenuPosition.Center;
                    shouldSnapUp = false;
                    isSnapping = false;
                }
                break;
            case MainMenuPosition.Center:
                if (cameraTransform.position.y > maxY)
                {
                    cameraTransform.position = new Vector3(cameraTransform.position.x, maxY, cameraTransform.position.z);
                    _menuPosition = MainMenuPosition.Top;
                    shouldSnapUp = false;
                    isSnapping = false;
                }
                break;
            }
        }

        if (shouldSnapDown)
        {
            cameraTransform.position -= Vector3.up * snapSpeed * Time.deltaTime;
            switch(_menuPosition)
            {
            case MainMenuPosition.Top:
                if (cameraTransform.position.y < 0f)
                {
                    cameraTransform.position = new Vector3(cameraTransform.position.x, 0f, cameraTransform.position.z);
                    _menuPosition = MainMenuPosition.Center;
                    shouldSnapDown = false;
                    isSnapping = false;
                }
                break;
            case MainMenuPosition.Center:
                if (cameraTransform.position.y < minY)
                {
                    cameraTransform.position = new Vector3(cameraTransform.position.x, minY, cameraTransform.position.z);
                    _menuPosition = MainMenuPosition.Bottom;
                    shouldSnapDown = false;
                    isSnapping = false;
                }
                break;
            }
        }

        if (shouldSnapBack)
        {
            switch(_menuPosition)
            {
            case MainMenuPosition.Top:
                _menuPosition = MainMenuPosition.Center;
                shouldSnapUp = true;
                isSnapping = true;
                break;
            case MainMenuPosition.Center:
                if (cameraTransform.position.y > 0)
                {
                    _menuPosition = MainMenuPosition.Top;
                    shouldSnapDown = true;
                    isSnapping = true;
                }
                else
                {
                    _menuPosition = MainMenuPosition.Bottom;
                    shouldSnapUp = true;
                    isSnapping = true;
                }
                break;
            case MainMenuPosition.Bottom:
                _menuPosition = MainMenuPosition.Center;
                shouldSnapDown = true;
                isSnapping = true;
                break;
            }

            shouldSnapBack = false;
        }

        swipeTextCanvasGroup.alpha = 1f - Mathf.Abs(cameraTransform.position.y) * alphaMultiplier;
        titleTransform.position = new Vector3(0f, cameraTransform.position.y * titlePosMultiplier);
        if (titleAnimate.IsExpandContract == false)
            titleAnimate.ExpandContract(2.0f, 1, 1.1f);
    }