Ejemplo n.º 1
0
    public override IEnumerator StartSpell()
    {
        yield return(new WaitForSeconds(1f));

        const int numInCircle = 8;

        PlayerBounds b = StageController.Player.GetComponent <PlayerController>().Bounds;

        Vector2 posBL = new Vector2(b.xMin, b.yMin);
        Vector2 posTR = new Vector2(b.xMax, b.yMax);

        User.GoToWaypoint(Vector2.Lerp(posBL, posTR, 0.5f));

        string[] tags = { "BubbleLightBlue", "BubbleOrange",
                          "BubbleRed",       "BubblePink",
                          "BubbleWhite",     "BubbleGray",
                          "BubbleRed",       "BubbleYellow",
                          "BubblePurple",    "BubbleOrange",
                          "BubbleBlue",      "BubbleOrange",
                          "Star",            "BubbleGray" };
        int[]    angleOffsets = { -50, -50,
                                  -12,    -95,
                                  0,      -45,
                                  -41,    -41,
                                  -35,    -19,
                                  37,     -62,
                                  0, 0 };

        int skipCount = 14;

        for (int i = 0; i < System.Enum.GetNames(typeof(SkeleBulletType)).Length - 3; i++)
        {
            if (skipCount > 0)
            {
                skipCount--;
                continue;
            }

            if (i >= tags.Length)
            {
                break;
            }

            GameObject bullet = ObjectPooler.Spawn(tags[i], (i % 2 == 0) ? posBL : posTR, Quaternion.identity);

            GravitateMovement gm = bullet.AddComponent <GravitateMovement>();

            gm.card = this;

            if (i % 2 == 1)
            {
                gm.AngleOffset       = 180;
                gm.EndCircleDelay    = 0.5f;
                gm.EndCircleRotation = 360f / numInCircle / 2;
            }

            gm.AngleOffset += angleOffsets[i];
            gm.BulletType   = (SkeleBulletType)i;

            if (i % 2 == 1)
            {
                yield return(new WaitForSeconds(20));
            }
        }

        Vector2 posBC = Vector2.Lerp(posBL, new Vector2(b.xMax, b.yMin), 0.5f);
        Vector2 posTL = new Vector2(b.xMin, b.yMax);

        Vector2 dest = new Vector2((posBC.x + posTL.x + posTR.x) / 3f, (posBC.y + posTL.y + posTR.y) / 3f);

        User.GoToWaypoint(dest);

        GameObject chronos = ObjectPooler.Spawn("BubbleLightBlue", posTL, Quaternion.identity);
        GameObject cider   = ObjectPooler.Spawn("BubblePink", posTR, Quaternion.identity);
        GameObject zephyr  = ObjectPooler.Spawn("BubbleGreen", posBC, Quaternion.identity);

        GravitateMovement gm_chronos = chronos.AddComponent <GravitateMovement>();
        GravitateMovement gm_cider   = cider.AddComponent <GravitateMovement>();
        GravitateMovement gm_zephyr  = zephyr.AddComponent <GravitateMovement>();

        gm_chronos.card = this;
        gm_cider.card   = this;
        gm_zephyr.card  = this;

        gm_chronos.OverrideDest = true;
        gm_cider.OverrideDest   = true;
        gm_zephyr.OverrideDest  = true;

        gm_chronos.dest = dest;
        gm_cider.dest   = dest;
        gm_zephyr.dest  = dest;

        gm_zephyr.AngleOffset = 180;
        gm_cider.AngleOffset  = 90;

        gm_cider.EndCircleDelay  = 0.5f;
        gm_zephyr.EndCircleDelay = 1f;

        gm_chronos.BulletType = SkeleBulletType.CHRONOS;
        gm_cider.BulletType   = SkeleBulletType.CIDER;
        gm_zephyr.BulletType  = SkeleBulletType.ZEPHYR;

        // TODO: Custom Circles
    }
Ejemplo n.º 2
0
    public IEnumerator ShootCircles(float EndCircleDelay, string BulletTag, float EndCircleRotation, Vector2 pos, Color?rainbowcol = null, SkeleBulletType type = SkeleBulletType.SANS)
    {
        yield return(new WaitForSeconds(EndCircleDelay));

        StageController.AudioManager.PlaySFX("shootbullet", 0.3f);

        const float velocity    = 5.5f;
        const int   numInCircle = 8;

        for (int i = 0; i < numInCircle; i++)
        {
            GameObject bullet = ObjectPooler.Spawn(BulletTag, pos, Quaternion.identity);

            if (BulletTag == "Kunai" || BulletTag == "Star")
            {
                switch (type)
                {
                case SkeleBulletType.INK:
                    float hue = 360f / numInCircle * i / 360f;
                    rainbowcol = Color.HSVToRGB(hue, 0.7f, 1);
                    break;

                case SkeleBulletType.ERROR:
                    int r = Random.Range(0, 7);

                    if (r == 0)
                    {
                        rainbowcol = Color.blue;
                    }
                    else if (r == 1)
                    {
                        rainbowcol = Color.yellow;
                    }
                    else if (r == 2)
                    {
                        rainbowcol = Color.red;
                    }
                    else
                    {
                        rainbowcol = GravitateMovement.GetCol(74, 74, 74);
                    }
                    break;

                case SkeleBulletType.DREAM:
                    rainbowcol = GravitateMovement.GetCol(255, 252, 186);
                    break;
                }

                bullet.GetComponent <SpriteRenderer>().color = rainbowcol.Value;
            }

            bullet.transform.Rotate(new Vector3(0, 0, (360 / numInCircle * i) - 90 + EndCircleRotation));
            bullet.GetComponent <Rigidbody2D>().velocity = bullet.transform.up * velocity;

            if (type == SkeleBulletType.ZEPHYR)
            {
                ZephyrBullets.Add(bullet);
            }
        }

        if (type == SkeleBulletType.ZEPHYR)
        {
            StartCoroutine(ZephyrCircle());
        }
    }