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)); }
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)); }