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 }
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()); } }