コード例 #1
0
        public static ObjectAction SpawnSniperEnemy(
            Dictionary <string, DTDanmakuImage> spriteNameToImageDictionary,
            Dictionary <string, EnemyObjectTemplate> enemyObjectTemplates,
            Dictionary <string, DTDanmakuSound> soundNameToSoundDictionary,
            GuidGenerator guidGenerator)
        {
            ObjectAction moveAction = SniperEnemyGenerator.GetMoveAction(
                guidGenerator: guidGenerator);

            ObjectAction shootAction = GetShootBulletAction(
                spriteNameToImageDictionary: spriteNameToImageDictionary,
                enemyObjectTemplates: enemyObjectTemplates,
                guidGenerator: guidGenerator);

            ObjectAction destroyAction = ObjectActionGenerator.DestroyWhenHpIsZeroAndMaybeDropPowerUp(
                chanceToDropPowerUpInMilliPercent: 15 * 1000,
                spriteNameToImageDictionary: spriteNameToImageDictionary,
                enemyObjectTemplates: enemyObjectTemplates,
                soundNameToSoundDictionary: soundNameToSoundDictionary,
                guidGenerator: guidGenerator);

            string spriteName = guidGenerator.NextGuid();

            spriteNameToImageDictionary.Add(spriteName, DTDanmakuImage.SniperEnemyShip);

            List <ObjectBox> damageBoxes = new List <ObjectBox>();

            damageBoxes.Add(new ObjectBox(lowerXMillis: -46500, upperXMillis: 46500, lowerYMillis: -10000, upperYMillis: 30000));
            damageBoxes.Add(new ObjectBox(lowerXMillis: -31500, upperXMillis: 31500, lowerYMillis: -35000, upperYMillis: 30000));

            List <ObjectBox> collisionBoxes = new List <ObjectBox>();

            collisionBoxes.Add(new ObjectBox(lowerXMillis: -10000, upperXMillis: 10000, lowerYMillis: -25000, upperYMillis: 25000));
            collisionBoxes.Add(new ObjectBox(lowerXMillis: -25000, upperXMillis: 25000, lowerYMillis: -10000, upperYMillis: 10000));

            EnemyObjectTemplate enemyObjectTemplate = EnemyObjectTemplate.Enemy(
                action: ObjectAction.Union(moveAction, shootAction, destroyAction),
                initialMilliHP: MathExpression.Add(MathExpression.Constant(6000), MathExpression.RandomInteger(MathExpression.Constant(5000))),
                damageBoxes: damageBoxes,
                collisionBoxes: collisionBoxes,
                spriteName: spriteName);

            string templateName = guidGenerator.NextGuid();

            enemyObjectTemplates.Add(templateName, enemyObjectTemplate);

            return(ObjectAction.SpawnChild(
                       childXMillis: MathExpression.Constant(-100 * 1000),
                       childYMillis: MathExpression.Constant(-100 * 1000),
                       childObjectTemplateName: templateName,
                       childInitialNumericVariables: null,
                       childInitialBooleanVariables: null));
        }
コード例 #2
0
        public static GenerateEnemiesResult GenerateEnemies(
            long elapsedMillisecondsPerIteration,
            IDTDeterministicRandom rng,
            GuidGenerator guidGenerator)
        {
            List <EnemyObject> enemyObjects = new List <EnemyObject>();
            Dictionary <string, DTDanmakuImage>      spriteNameToImageDictionary = new Dictionary <string, DTDanmakuImage>();
            Dictionary <string, EnemyObjectTemplate> enemyObjectTemplates        = new Dictionary <string, EnemyObjectTemplate>();
            Dictionary <string, DTDanmakuSound>      soundNameToSoundDictionary  = new Dictionary <string, DTDanmakuSound>();

            ObjectAction spawnWave1Enemy = GenerateWave1Enemy(
                spriteNameToImageDictionary: spriteNameToImageDictionary,
                enemyObjectTemplates: enemyObjectTemplates,
                soundNameToSoundDictionary: soundNameToSoundDictionary,
                guidGenerator: guidGenerator);

            ObjectAction spawnWave2Enemy = GenerateWave2Enemy(
                spriteNameToImageDictionary: spriteNameToImageDictionary,
                enemyObjectTemplates: enemyObjectTemplates,
                soundNameToSoundDictionary: soundNameToSoundDictionary,
                guidGenerator: guidGenerator);

            ObjectAction spawnWave3Enemy = GenerateWave3Enemy(
                spriteNameToImageDictionary: spriteNameToImageDictionary,
                enemyObjectTemplates: enemyObjectTemplates,
                soundNameToSoundDictionary: soundNameToSoundDictionary,
                guidGenerator: guidGenerator);

            ObjectAction spawnWave4Enemy = GenerateWave4Enemy(
                spriteNameToImageDictionary: spriteNameToImageDictionary,
                enemyObjectTemplates: enemyObjectTemplates,
                soundNameToSoundDictionary: soundNameToSoundDictionary,
                guidGenerator: guidGenerator);

            ObjectAction spawnSniperEnemy = SniperEnemyGenerator.SpawnSniperEnemy(
                spriteNameToImageDictionary: spriteNameToImageDictionary,
                enemyObjectTemplates: enemyObjectTemplates,
                soundNameToSoundDictionary: soundNameToSoundDictionary,
                guidGenerator: guidGenerator);

            ObjectAction spawnEliteSniperEnemy = EliteSniperEnemyGenerator.SpawnEliteSniperEnemy(
                spriteNameToImageDictionary: spriteNameToImageDictionary,
                enemyObjectTemplates: enemyObjectTemplates,
                soundNameToSoundDictionary: soundNameToSoundDictionary,
                guidGenerator: guidGenerator);

            ObjectAction spawnOrbiterEnemy = OrbiterEnemyGenerator.SpawnOrbiterEnemy(
                xMillis: MathExpression.Add(MathExpression.Constant(300 * 1000), MathExpression.RandomInteger(400 * 1000)),
                spriteNameToImageDictionary: spriteNameToImageDictionary,
                enemyObjectTemplates: enemyObjectTemplates,
                soundNameToSoundDictionary: soundNameToSoundDictionary,
                guidGenerator: guidGenerator);

            ObjectAction spawnEliteOrbiterEnemy = EliteOrbiterEnemyGenerator.SpawnEliteOrbiterEnemy(
                xMillis: MathExpression.Add(MathExpression.Constant(300 * 1000), MathExpression.RandomInteger(400 * 1000)),
                spriteNameToImageDictionary: spriteNameToImageDictionary,
                enemyObjectTemplates: enemyObjectTemplates,
                soundNameToSoundDictionary: soundNameToSoundDictionary,
                guidGenerator: guidGenerator);

            ObjectAction spawnBarrageEnemy = BarrageEnemyGenerator.SpawnBarrageEnemy(
                xMillis: MathExpression.Add(MathExpression.Constant(300 * 1000), MathExpression.RandomInteger(400 * 1000)),
                spriteNameToImageDictionary: spriteNameToImageDictionary,
                enemyObjectTemplates: enemyObjectTemplates,
                soundNameToSoundDictionary: soundNameToSoundDictionary,
                guidGenerator: guidGenerator);

            ObjectAction spawnEliteBarrageEnemy = EliteBarrageEnemyGenerator.SpawnEliteBarrageEnemy(
                xMillis: MathExpression.Add(MathExpression.Constant(300 * 1000), MathExpression.RandomInteger(400 * 1000)),
                spriteNameToImageDictionary: spriteNameToImageDictionary,
                enemyObjectTemplates: enemyObjectTemplates,
                soundNameToSoundDictionary: soundNameToSoundDictionary,
                guidGenerator: guidGenerator);

            ObjectAction spawnBoss = BossEnemyGenerator.SpawnBossEnemy(
                spriteNameToImageDictionary: spriteNameToImageDictionary,
                enemyObjectTemplates: enemyObjectTemplates,
                soundNameToSoundDictionary: soundNameToSoundDictionary,
                guidGenerator: guidGenerator);

            for (int i = 0; i < 10; i++)
            {
                enemyObjects.Add(CreateActionExecutor(
                                     millisecondsToWait: 1000 * i,
                                     action: spawnWave1Enemy,
                                     elapsedMillisecondsPerIteration: elapsedMillisecondsPerIteration,
                                     rng: rng,
                                     guidGenerator: guidGenerator));
            }

            for (int i = 0; i < 10; i++)
            {
                enemyObjects.Add(CreateActionExecutor(
                                     millisecondsToWait: 3000 + 1000 * i,
                                     action: spawnWave2Enemy,
                                     elapsedMillisecondsPerIteration: elapsedMillisecondsPerIteration,
                                     rng: rng,
                                     guidGenerator: guidGenerator));
            }

            for (int i = 0; i < 6; i++)
            {
                enemyObjects.Add(CreateActionExecutor(
                                     millisecondsToWait: 16000 + 1000 * i,
                                     action: spawnSniperEnemy,
                                     elapsedMillisecondsPerIteration: elapsedMillisecondsPerIteration,
                                     rng: rng,
                                     guidGenerator: guidGenerator));
            }

            for (int i = 0; i < 6; i++)
            {
                enemyObjects.Add(CreateActionExecutor(
                                     millisecondsToWait: 20000 + 6000 * i,
                                     action: spawnOrbiterEnemy,
                                     elapsedMillisecondsPerIteration: elapsedMillisecondsPerIteration,
                                     rng: rng,
                                     guidGenerator: guidGenerator));
            }

            for (int i = 0; i < 6; i++)
            {
                enemyObjects.Add(CreateActionExecutor(
                                     millisecondsToWait: 23000 + 1500 * i,
                                     action: spawnWave3Enemy,
                                     elapsedMillisecondsPerIteration: elapsedMillisecondsPerIteration,
                                     rng: rng,
                                     guidGenerator: guidGenerator));
            }

            for (int i = 0; i < 6; i++)
            {
                enemyObjects.Add(CreateActionExecutor(
                                     millisecondsToWait: 25500 + 1500 * i,
                                     action: spawnWave4Enemy,
                                     elapsedMillisecondsPerIteration: elapsedMillisecondsPerIteration,
                                     rng: rng,
                                     guidGenerator: guidGenerator));
            }

            for (int i = 0; i < 4; i++)
            {
                enemyObjects.Add(CreateActionExecutor(
                                     millisecondsToWait: 29000 + 1700 * i,
                                     action: spawnBarrageEnemy,
                                     elapsedMillisecondsPerIteration: elapsedMillisecondsPerIteration,
                                     rng: rng,
                                     guidGenerator: guidGenerator));
            }

            for (int i = 0; i < 7; i++)
            {
                enemyObjects.Add(CreateActionExecutor(
                                     millisecondsToWait: 33000 + 1250 * i,
                                     action: spawnEliteSniperEnemy,
                                     elapsedMillisecondsPerIteration: elapsedMillisecondsPerIteration,
                                     rng: rng,
                                     guidGenerator: guidGenerator));
            }

            for (int i = 0; i < 4; i++)
            {
                enemyObjects.Add(CreateActionExecutor(
                                     millisecondsToWait: 38000 + 2100 * i,
                                     action: spawnEliteBarrageEnemy,
                                     elapsedMillisecondsPerIteration: elapsedMillisecondsPerIteration,
                                     rng: rng,
                                     guidGenerator: guidGenerator));
            }

            for (int i = 0; i < 8; i++)
            {
                enemyObjects.Add(CreateActionExecutor(
                                     millisecondsToWait: 43000 + 500 * i,
                                     action: spawnSniperEnemy,
                                     elapsedMillisecondsPerIteration: elapsedMillisecondsPerIteration,
                                     rng: rng,
                                     guidGenerator: guidGenerator));
            }

            for (int i = 0; i < 8; i++)
            {
                enemyObjects.Add(CreateActionExecutor(
                                     millisecondsToWait: 43250 + 500 * i,
                                     action: spawnEliteSniperEnemy,
                                     elapsedMillisecondsPerIteration: elapsedMillisecondsPerIteration,
                                     rng: rng,
                                     guidGenerator: guidGenerator));
            }

            for (int i = 0; i < 2; i++)
            {
                enemyObjects.Add(CreateActionExecutor(
                                     millisecondsToWait: 56000 + 6000 * i,
                                     action: spawnEliteOrbiterEnemy,
                                     elapsedMillisecondsPerIteration: elapsedMillisecondsPerIteration,
                                     rng: rng,
                                     guidGenerator: guidGenerator));
            }

            enemyObjects.Add(CreateActionExecutor(
                                 millisecondsToWait: 82000,
                                 action: spawnBoss,
                                 elapsedMillisecondsPerIteration: elapsedMillisecondsPerIteration,
                                 rng: rng,
                                 guidGenerator: guidGenerator));

            return(new GenerateEnemiesResult(
                       enemyObjects: enemyObjects,
                       spriteNameToImageDictionary: spriteNameToImageDictionary,
                       enemyObjectTemplates: enemyObjectTemplates,
                       soundNameToSoundDictionary: soundNameToSoundDictionary));
        }