private IEnumerator SubWeaponTransit() { if (isSlowMode) { float dstAngleInner = subWeaponAngle * subWeaponAngleSlowMultiplier * 0.5f; float dstAngleOuter = subWeaponAngle * subWeaponAngleSlowMultiplier * 1.5f; bool sub1Fin = false, sub2Fin = false, sub3Fin = false, sub4Fin = false; while (true) { Vector2 sub1 = subWeapons[0].localPosition; Vector2 sub2 = subWeapons[1].localPosition; Vector2 sub3 = subWeapons[2].localPosition; Vector2 sub4 = subWeapons[3].localPosition; float sub1Angle = UDEMath.Deg(-sub1.x, sub1.y); float sub2Angle = UDEMath.Deg(-sub2.x, -sub2.y); float sub3Angle = UDEMath.Deg(-sub3.x, sub3.y); float sub4Angle = UDEMath.Deg(-sub4.x, -sub4.y); float timeScale = UDETime.Instance.PlayerTimeScale; float deltaTime = Time.deltaTime; sub1Angle -= subWeaponAngle * 4 * deltaTime * timeScale; sub2Angle -= subWeaponAngle * 4 * deltaTime * timeScale; sub3Angle -= subWeaponAngle * 8 * deltaTime * timeScale; sub4Angle -= subWeaponAngle * 8 * deltaTime * timeScale; if (sub1Angle <= dstAngleInner) { sub1Angle = dstAngleInner; sub1Fin = true; } if (sub2Angle <= dstAngleInner) { sub2Angle = dstAngleInner; sub2Fin = true; } if (sub3Angle <= dstAngleOuter) { sub3Angle = dstAngleOuter; sub3Fin = true; } if (sub4Angle <= dstAngleOuter) { sub4Angle = dstAngleOuter; sub4Fin = true; } var sb1 = UDEMath.Polar2Cartesian(subWeaponsDistance, sub1Angle); var sb2 = UDEMath.Polar2Cartesian(subWeaponsDistance, sub2Angle); var sb3 = UDEMath.Polar2Cartesian(subWeaponsDistance, sub3Angle); var sb4 = UDEMath.Polar2Cartesian(subWeaponsDistance, sub4Angle); subWeapons[0].localPosition = new Vector3(-sb1.x, sb1.y, 0); subWeapons[1].localPosition = new Vector3(-sb2.x, -sb2.y, 0); subWeapons[2].localPosition = new Vector3(-sb3.x, sb3.y, 0); subWeapons[3].localPosition = new Vector3(-sb4.x, -sb4.y, 0); if (sub1Fin && sub2Fin && sub3Fin && sub4Fin) { break; } yield return(null); } yield return(null); } else { float dstAngleInner = subWeaponAngle * 0.5f; float dstAngleOuter = subWeaponAngle * 1.5f; bool sub1Fin = false, sub2Fin = false, sub3Fin = false, sub4Fin = false; while (true) { Vector2 sub1 = subWeapons[0].localPosition; Vector2 sub2 = subWeapons[1].localPosition; Vector2 sub3 = subWeapons[2].localPosition; Vector2 sub4 = subWeapons[3].localPosition; float sub1Angle = UDEMath.Deg(-sub1.x, sub1.y); float sub2Angle = UDEMath.Deg(-sub2.x, -sub2.y); float sub3Angle = UDEMath.Deg(-sub3.x, sub3.y); float sub4Angle = UDEMath.Deg(-sub4.x, -sub4.y); float timeScale = UDETime.Instance.PlayerTimeScale; float deltaTime = Time.deltaTime; sub1Angle += subWeaponAngle * 4 * deltaTime * timeScale; sub2Angle += subWeaponAngle * 4 * deltaTime * timeScale; sub3Angle += subWeaponAngle * 8 * deltaTime * timeScale; sub4Angle += subWeaponAngle * 8 * deltaTime * timeScale; if (sub1Angle >= dstAngleInner) { sub1Angle = dstAngleInner; sub1Fin = true; } if (sub2Angle >= dstAngleInner) { sub2Angle = dstAngleInner; sub2Fin = true; } if (sub3Angle >= dstAngleOuter) { sub3Angle = dstAngleOuter; sub3Fin = true; } if (sub4Angle >= dstAngleOuter) { sub4Angle = dstAngleOuter; sub4Fin = true; } var sb1 = UDEMath.Polar2Cartesian(subWeaponsDistance, sub1Angle); var sb2 = UDEMath.Polar2Cartesian(subWeaponsDistance, sub2Angle); var sb3 = UDEMath.Polar2Cartesian(subWeaponsDistance, sub3Angle); var sb4 = UDEMath.Polar2Cartesian(subWeaponsDistance, sub4Angle); subWeapons[0].localPosition = new Vector3(-sb1.x, sb1.y, 0); subWeapons[1].localPosition = new Vector3(-sb2.x, -sb2.y, 0); subWeapons[2].localPosition = new Vector3(-sb3.x, sb3.y, 0); subWeapons[3].localPosition = new Vector3(-sb4.x, -sb4.y, 0); if (sub1Fin && sub2Fin && sub3Fin && sub4Fin) { break; } yield return(null); } yield return(null); } }
protected override IEnumerator ShotPattern() { var result = UDETransitionHelper.MoveTo(originEnemy.gameObject, Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 0.5f)), 2, UDETransitionHelper.easeOutCubic, UDETime.TimeScale.ENEMY, true); originEnemy.CanBeDamaged = false; yield return(new WaitUntil(() => result.EndTransition)); originEnemy.CanBeDamaged = true; StartCoroutine(GravityBullets()); UDECartesianPolarMovementBuilder builder = UDECartesianPolarMovementBuilder.Create().Speed(4f); while (true) { for (int i = 0; i < 3; i++) { Vector2 playerPosition = GameObject.FindGameObjectWithTag("Player").transform.position; Vector2 enemyPosition = originEnemy.transform.position; float angle = UDEMath.Deg(playerPosition - enemyPosition); Vector2 origin = enemyPosition; Vector2 formOriginDispl = UDEMath.Polar2Cartesian(0.3f, angle).ToVector2(); Vector2 formOrigin = origin + formOriginDispl; builder.Angle(angle); UDEBulletMovement movement = builder.Build(); Vector2 formHalfDispl = UDEMath.Polar2Cartesian(0.105f, angle + 90).ToVector2(); for (int n = 1; n <= 6; n++) { if (n % 2 == 0) { for (int j = 0; j < n / 2; j++) { UDEAbstractBullet negBullet = UDEBulletPool.Instance.GetBullet(patternBullets[1]); UDEAbstractBullet posBullet = UDEBulletPool.Instance.GetBullet(patternBullets[1]); negBullet.Initialize(formOrigin - (formHalfDispl * (j * 2 + 1)), origin, 0, originEnemy, this, movement); posBullet.Initialize(formOrigin + (formHalfDispl * (j * 2 + 1)), origin, 0, originEnemy, this, movement); } } else { UDEAbstractBullet middleBullet = UDEBulletPool.Instance.GetBullet(patternBullets[1]); middleBullet.Initialize(formOrigin, origin, 0, originEnemy, this, movement); for (int j = 0; j < n / 2; j++) { UDEAbstractBullet negBullet = UDEBulletPool.Instance.GetBullet(patternBullets[1]); UDEAbstractBullet posBullet = UDEBulletPool.Instance.GetBullet(patternBullets[1]); negBullet.Initialize(formOrigin - (formHalfDispl * (j + 1) * 2), origin, 0, originEnemy, this, movement); posBullet.Initialize(formOrigin + (formHalfDispl * (j + 1) * 2), origin, 0, originEnemy, this, movement); } } yield return(StartCoroutine(UDETime.Instance.WaitForScaledSeconds(0.11f, UDETime.TimeScale.ENEMY))); } yield return(StartCoroutine(UDETime.Instance.WaitForScaledSeconds(0.24f, UDETime.TimeScale.ENEMY))); } yield return(StartCoroutine(UDETime.Instance.WaitForScaledSeconds(2f, UDETime.TimeScale.ENEMY))); } }