Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
    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)));
        }
    }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
    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)));
        }
    }
Exemplo n.º 6
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)));
        }
    }