Exemplo n.º 1
0
    IEnumerator RunOrange()
    {
        foreach (var i in Times(10))
        {
            AnimateRect(Direction.Down, 1, Vector2.one * 0.5f, orange, CameraHelper.RandomXOffset(0.9f), level: 0);
            yield return(Rest(1));
        }

        int   ornamentation = 1;
        float boundFactor   = 0.1f;

        foreach (var i in Times(20))
        {
            var progress = i / 20f;

            // Gradually add ornamentation
            var offset = CameraHelper.RandomXOffset(0.6f);
            var scale  = Vector2.one * Random.Range(0.2f, 0.5f); // the big one
            var speed  = 1;

            var boundingRect = CameraHelper.BoundingRectOnPerimeter(
                Location.Top, CameraHelper.Width * boundFactor, CameraHelper.Height * boundFactor, offset);
            var foundationRect = RectHelper.RectFromCenterAndSize(boundingRect.center, scale);
            var formation      = GenerateFormation(foundationRect, boundingRect, Random.Range(1, 3));
            foreach (var rect in formation)
            {
                var lineSpeed = speed * Random.Range(1f - 0.3f * progress, 1f + 0.3f * progress);
                var level     = 0;
                if (rect == formation[0])
                {
                    lineSpeed = speed;
                    level     = -1;
                }
                AnimateRect(
                    Direction.Down,
                    lineSpeed,
                    rect.size,
                    new Color[] { orange, blue, red }[Random.Range(0, Mathf.CeilToInt(3 * progress))],
                    rect.center,
                    0);
            }
            yield return(Rest(2));

            ornamentation++;
            boundFactor += 0.05f;
        }
    }