protected override void Awake() { base.Awake(); subWeapons[0].gameObject.SetActive(false); subWeapons[1].gameObject.SetActive(false); subWeapons[2].gameObject.SetActive(false); subWeapons[3].gameObject.SetActive(false); float innerAngle = subWeaponAngle * 0.5f; float outerAngle = subWeaponAngle * 1.5f; var sb1 = UDEMath.Polar2Cartesian(subWeaponsDistance, innerAngle); var sb3 = UDEMath.Polar2Cartesian(subWeaponsDistance, outerAngle); subWeapons[0].localPosition = new Vector3(-sb1.x, sb1.y, 0); subWeapons[1].localPosition = new Vector3(-sb1.x, -sb1.y, 0); subWeapons[2].localPosition = new Vector3(-sb3.x, sb3.y, 0); subWeapons[3].localPosition = new Vector3(-sb3.x, -sb3.y, 0); UDECartesianPolarMovementBuilder builder = UDECartesianPolarMovementBuilder.Create(); builder.Speed(arrowBulletSpeed * subHomingBulletSpeedSlowMultiplier).Angle(subWeaponShotAngle * 2); homingMove1 = builder.Build(); homingMoveSlow1 = builder.Angle(subWeaponShotAngle * 2 * subWeaponShotAngleSlowMultiplier).Build(); homingMove2 = builder.Angle(-subWeaponShotAngle * 2).Build(); homingMoveSlow2 = builder.Angle(-subWeaponShotAngle * 2 * subWeaponShotAngleSlowMultiplier).Build(); }
private IEnumerator Wave1FairyPattern(LambdaShotPattern pattern, List <UDEAbstractBullet> bullets, UDEEnemy enemy) { var trResult = UDETransitionHelper.MoveAmount(enemy.gameObject, new Vector2(-3, 0), 0.3f, UDETransitionHelper.easeOutQuad, UDETime.TimeScale.ENEMY, true); yield return(new WaitUntil(() => trResult.EndTransition)); Transform enemyTr = enemy.transform; Transform player = GameManager.player.transform; Vector2 direction = player.position - enemyTr.position; direction /= direction.magnitude; (_, float angle) = UDEMath.Cartesian2Polar(direction); UDECartesianPolarMovementBuilder builder = UDECartesianPolarMovementBuilder.Create().Speed(9.0f).MinSpeed(3.0f).TangentialAccel(-17.0f); int bulletCnt = 25; float delta = 360f / bulletCnt; for (int i = 0; i < bulletCnt; i++) { float moveAngle = angle + delta * i; (float x, float y) = UDEMath.Polar2Cartesian(0.4f, moveAngle); UDEAbstractBullet bullet = UDEBulletPool.Instance.GetBullet(bullets[0]); bullet.SummonTime = 0.12f; bullet.Initialize(enemyTr.position + new Vector3(x, y), enemyTr.position, 0, enemy, pattern, builder.Angle(moveAngle).Build()); } builder.Angle(angle); for (int i = 1; i < 6; i++) { (float x, float y) = UDEMath.Polar2Cartesian(0.4f, angle); UDEAbstractBullet bullet = UDEBulletPool.Instance.GetBullet(bullets[0]); bullet.SummonTime = 0.12f; bullet.Initialize(enemyTr.position + new Vector3(x, y), enemyTr.position, 0, enemy, pattern, builder.MinSpeed(3.0f + 0.6f * i).Build()); } yield return(StartCoroutine(UDETime.Instance.WaitForScaledSeconds(0.5f, UDETime.TimeScale.ENEMY))); Vector2 movePoint = Camera.main.ViewportToWorldPoint(new Vector3(-0.1f, 0)); movePoint.y = enemyTr.position.y; trResult = UDETransitionHelper.MoveTo(enemy.gameObject, movePoint, 10f, UDETransitionHelper.easeInCubic, UDETime.TimeScale.ENEMY, true); yield return(new WaitUntil(() => trResult.EndTransition)); ((EnemyBase)enemy).OnDestroy(); Destroy(enemy); yield return(null); }
public override IEnumerator ShootBullet() { UDEBulletMovement move1 = UDECartesianPolarMovementBuilder.Create().Speed(10).Angle(90).TangentialAccel(-10).Build(); UDEBulletMovement move2_1 = UDECartesianPolarMovementBuilder.Create().Speed(10).Angle(45).TangentialAccel(-10).NormalAccel(-30).Build(); UDEBulletMovement move3_1 = UDECartesianPolarMovementBuilder.Create().Speed(10).Angle(135).TangentialAccel(-10).NormalAccel(30).Build(); UDEBulletMovement move2_2 = UDECartesianPolarMovementBuilder.Create().Speed(10).Angle(67).TangentialAccel(-10).NormalAccel(-50).Build(); UDEBulletMovement move3_2 = UDECartesianPolarMovementBuilder.Create().Speed(10).Angle(113).TangentialAccel(-10).NormalAccel(50).Build(); UDEBulletPool bulletPool = UDEBulletPool.Instance; Transform tr = gameObject.transform; while (true) { if (Input.GetKey(shoot)) { UDEHomingBullet bullet1 = (UDEHomingBullet)bulletPool.GetBullet(bullet); bullet1.Initialize(tr.position, this, move1); UDEHomingBullet bullet2 = (UDEHomingBullet)bulletPool.GetBullet(bullet); UDEHomingBullet bullet3 = (UDEHomingBullet)bulletPool.GetBullet(bullet); if (Input.GetKey(slowMode)) { bullet2.Initialize(tr.position, this, move2_2); bullet3.Initialize(tr.position, this, move3_2); } else { bullet2.Initialize(tr.position, this, move2_1); bullet3.Initialize(tr.position, this, move3_1); } if (!laserFiring) { FireLaser(); } } else { if (laserFiring) { RemoveLaser(); } } yield return(StartCoroutine(UDETime.Instance.WaitForScaledSeconds(BulletFireInterval, UDETime.TimeScale.PLAYER))); } }
private IEnumerator Wave2FairyPattern(LambdaShotPattern pattern, List <UDEAbstractBullet> bullets, UDEEnemy enemy) { UDETransitionHelper.MoveAmount(enemy.gameObject, new Vector2(-3, 0), 1f, UDETransitionHelper.easeOutQuad, UDETime.TimeScale.ENEMY, true); yield return(StartCoroutine(UDETime.Instance.WaitForScaledSeconds(0.3f, UDETime.TimeScale.ENEMY))); Transform enemyTr = enemy.transform; float angle = 25; var easeInOut = UDETransitionHelper.easeInOutQuad.Composite(t => t / 4); float dt = 0.4f; UDECartesianPolarMovementBuilder builder = UDECartesianPolarMovementBuilder.Create().Speed(4.5f).Angle(180); UDEBulletMovement central = builder.Build(); float accTime = 0; for (int i = 0; i < (int)(8 / dt); i++) { if (accTime <= 4) { angle = 25 - 50 * easeInOut(accTime); } else { angle = -25 + 50 * easeInOut(accTime - 4); } UDEBulletMovement upper = builder.Angle(180 - angle).Build(); UDEBulletMovement lower = builder.Angle(180 + angle).Build(); UDEAbstractBullet bullet = UDEBulletPool.Instance.GetBullet(bullets[0]); // Upper bullet.SummonTime = 0.05f; bullet.transform.localScale = new Vector3(0.85f, 0.85f); bullet.Initialize(enemyTr.position, enemyTr.position, 0, enemy, pattern, upper); bullet = UDEBulletPool.Instance.GetBullet(bullets[1]); // Lower bullet.SummonTime = 0.05f; bullet.transform.localScale = new Vector3(0.85f, 0.85f); bullet.Initialize(enemyTr.position, enemyTr.position, 0, enemy, pattern, lower); float accTimeD = accTime + 1f; if (accTimeD >= 8) { accTimeD -= 8; } if (accTimeD <= 4) { angle = 25 - 50 * easeInOut(accTimeD); } else { angle = -25 + 50 * easeInOut(accTimeD - 4); } upper.angle = 180 - angle * 2f; bullet = UDEBulletPool.Instance.GetBullet(bullets[2]); bullet.SummonTime = 0.05f; bullet.transform.localScale = new Vector3(0.85f, 0.85f); bullet.Initialize(enemyTr.position, enemyTr.position, 0, enemy, pattern, upper); lower.angle = 180 + angle * 2f; bullet = UDEBulletPool.Instance.GetBullet(bullets[2]); bullet.SummonTime = 0.05f; bullet.transform.localScale = new Vector3(0.85f, 0.85f); bullet.Initialize(enemyTr.position, enemyTr.position, 0, enemy, pattern, lower); accTime += dt; yield return(StartCoroutine(UDETime.Instance.WaitForScaledSeconds(dt, UDETime.TimeScale.ENEMY))); } Vector2 movePoint = Camera.main.ViewportToWorldPoint(new Vector3(-0.1f, 0)); movePoint.y = enemyTr.position.y; var trResult = UDETransitionHelper.MoveTo(enemy.gameObject, movePoint, 6f, UDETransitionHelper.easeInQuad, UDETime.TimeScale.ENEMY, true); yield return(new WaitUntil(() => trResult.EndTransition)); ((EnemyBase)enemy).OnDestroy(); Destroy(enemy); yield return(null); }
protected override IEnumerator ShotPattern() { /* * float AngleDeg = (360f / NumberOfBullets); * float AngleRef = 0f; * float RefOmega = 0f; * while (true) * { * for (int i = 0; i < NumberOfBullets; i++) * { * UDEBaseBullet bullet = UDEBulletPool.Instance.GetBullet(baseBullets[0]); * UDEBulletMovement movement = UDEPolarMovementBuilder.Create().RadialSpeed(BulletSpeed).InitialAngle(i * AngleDeg + AngleRef).Build(); * Vector2 origin = originEnemy.transform.position; * var formLocTuple = UDEMath.Polar2Cartesian(0.7f, movement.angle); * Vector2 formLocation = new Vector2(formLocTuple.x, formLocTuple.y) + origin; * bullet.Initialize(formLocation, origin, 0, originEnemy, this, true, movement); * } * AngleRef += RefOmega; * RefOmega += 0.2f; * if (RefOmega >= 360) * RefOmega -= 360; * if (AngleRef >= 360) * AngleRef -= 360; * yield return StartCoroutine(UDETime.Instance.WaitForScaledSeconds(0.07f, UDETime.TimeScale.ENEMY)); * } */ float angle = 360f / NumberOfBullets; var result = UDETransitionHelper.MoveTo(originEnemy.gameObject, (Vector2)Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 0.85f)), 1.5f, UDETransitionHelper.easeOutCubic, UDETime.TimeScale.ENEMY, true); yield return(new WaitUntil(() => result.EndTransition)); yield return(StartCoroutine(UDETime.Instance.WaitForScaledSeconds(0.5f, UDETime.TimeScale.ENEMY))); for (int i = 0; true; i++) { float extraAngle = Random.Range(-3f, 3f); UDECartesianPolarMovementBuilder builder = UDECartesianPolarMovementBuilder.Create().Speed(BulletSpeed); UDECartesianPolarMovementBuilder builderSlower = UDECartesianPolarMovementBuilder.Create(true).TangentialAccel(-8).MinSpeed(BulletSpeed * 0.6f).StartTime(0.3f); for (int j = 0; j < NumberOfBullets; j++) { UDEAbstractBullet bullet = UDEBulletPool.Instance.GetBullet(patternBullets[0]); UDEBulletMovement movement = builder.Angle(extraAngle + angle * j).Build(); UDEBulletMovement movementSlow = builderSlower.Angle(extraAngle + angle * j).Build(); Vector2 origin = originEnemy.transform.position; Vector2 formLocation = UDEMath.Polar2Cartesian(0.7f, movement.angle).ToVector2() + origin; bullet.Initialize(formLocation, origin, 0, originEnemy, this, new UDEBulletMovement[] { movement, movementSlow }); if (i % 4 == 0) { UDEAbstractBullet extraBullet = UDEBulletPool.Instance.GetBullet(patternBullets[1]); UDEBulletMovement movement2 = builder.Speed(BulletSpeed * 0.35f).Angle(extraAngle + angle * j).Build(); builder.Speed(BulletSpeed); extraBullet.Initialize(formLocation, origin, 0, originEnemy, this, movement2); } } if (i % 4 == 0) { switch ((i % 16) / 4) { case 0: case 3: UDETransitionHelper.MoveAmount(originEnemy.gameObject, new Vector2(2, 0), 0.95f, UDETransitionHelper.easeOutQuad, UDETime.TimeScale.ENEMY, true); break; case 1: case 2: UDETransitionHelper.MoveAmount(originEnemy.gameObject, new Vector2(-2, 0), 0.95f, UDETransitionHelper.easeOutQuad, UDETime.TimeScale.ENEMY, true); break; } } yield return(StartCoroutine(UDETime.Instance.WaitForScaledSeconds(0.25f, UDETime.TimeScale.ENEMY))); } }
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))); } }