示例#1
0
        protected virtual void OnEnable()
        {
            targetEnemy = (UDEEnemy)target;

            shotPatterns = serializedObject.FindProperty("shotPatterns");
            scoreOnDeath = serializedObject.FindProperty("scoreOnDeath");
            canBeDamaged = serializedObject.FindProperty("canBeDamaged");
        }
        internal void Initialize(UDEEnemy originEnemy, UDEAbstractBullet[] bulletPrefabs, Func <LambdaShotPattern, List <UDEAbstractBullet>, UDEEnemy, IEnumerator> pattern, RemoveBulletsOnDeath removeBulletsOnDeath)
        {
            this.patternFunc = pattern;
            patternBullets   = new List <UDEAbstractBullet>();
            patternBullets.AddRange(bulletPrefabs);
            this.removeBullets = removeBulletsOnDeath;

            base.Initialize(originEnemy);
        }
示例#3
0
    protected override IEnumerator StagePattern()
    {
        while (true)
        {
            UDEEnemy boss = SummonEnemy(enemies[(int)Enemy.TEST_ENEMY]);
            boss.transform.SetPositionAndRotation(Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 1.2f, 0)), Quaternion.Euler(0, 0, 0));
            boss.transform.Translate(new Vector3(0, 0, 10));
            boss.Initialize();
            // UDETransitionHelper.MoveOnCurve(boss.gameObject, UDECurve.GetCurveByName("First"), 4, UDETransitionHelper.EaseTypeOf(easeType), UDETime.TimeScale.ENEMY, true);

            /*
             * yield return StartCoroutine(UDETime.Instance.WaitForScaledSeconds(1f, UDETime.TimeScale.ENEMY));
             * UDETransitionHelper.MoveOnCurve(boss.gameObject, UDECurve.GetCurveByName("First"), 5, UDETransitionHelper.EaseTypeOf(easeType), UDETime.TimeScale.ENEMY, true);
             * yield return StartCoroutine(UDETime.Instance.WaitForScaledSeconds(7f, UDETime.TimeScale.ENEMY));
             * UDETransitionHelper.MoveOnCurve(boss.gameObject, UDECurve.GetCurveByName("First"), 2, UDETransitionHelper.EaseTypeOf(easeType), UDETime.TimeScale.ENEMY, true);
             */
            yield return(new WaitUntil(() => !boss.Alive));
        }
    }
 public void AddEnemy(UDEEnemy enemy)
 {
     enemies.Add(enemy);
 }
 public void RemoveEnemy(UDEEnemy enemy)
 {
     enemies.Remove(enemy);
 }
示例#6
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);
        }
示例#7
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);
        }
示例#8
0
        private IEnumerator IntroWhiteSpiritPattern(LambdaShotPattern pattern, List <UDEAbstractBullet> bullets, UDEEnemy enemy)
        {
            var trResult = UDETransitionHelper.MoveAmount(enemy.gameObject, new Vector2(-7, 0.6f), 6, UDETransitionHelper.easeOutQuad, UDETime.TimeScale.ENEMY, true);

            yield return(StartCoroutine(UDETime.Instance.WaitForScaledSeconds(0.5f, UDETime.TimeScale.ENEMY)));

            for (int i = 0; i < 5; i++)
            {
                UDEAbstractBullet bullet = UDEBulletPool.Instance.GetBullet(bullets[0]);
                bullet.SummonTime = 0.08f;
                bullet.MoveBulletToDirection(enemy, pattern, enemy.transform.position, 0, new Vector2(-5, 0), true);

                yield return(StartCoroutine(UDETime.Instance.WaitForScaledSeconds(0.8f, UDETime.TimeScale.ENEMY)));
            }

            yield return(new WaitUntil(() => trResult.EndTransition));

            trResult = UDETransitionHelper.MoveAmount(enemy.gameObject, new Vector2(-6, 15), 6, UDETransitionHelper.easeInQuad, UDETime.TimeScale.ENEMY, true);
            yield return(new WaitUntil(() => trResult.EndTransition));

            ((EnemyBase)enemy).OnDestroy();
            Destroy(enemy);

            yield return(null);
        }
示例#9
0
 public override void Initialize(UDEEnemy originEnemy)
 {
     base.Initialize(originEnemy);
     enemyTr = originEnemy.transform;
 }