Example #1
0
        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);
            }
        }
Example #2
0
    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)));
        }
    }