// Spawns 3 bullets (120 degrees apart) private static ObjectAction SpawnSatelliteBullet( Dictionary <string, DTDanmakuImage> spriteNameToImageDictionary, Dictionary <string, EnemyObjectTemplate> enemyObjectTemplates, GuidGenerator guidGenerator) { string singleBulletSpriteName = guidGenerator.NextGuid(); spriteNameToImageDictionary.Add(singleBulletSpriteName, DTDanmakuImage.OrbiterEnemyBullet); long buffer = 100; BooleanExpression shouldDestroySingleBullet = BooleanExpression.Or( BooleanExpression.GreaterThan(MathExpression.XMillis(), MathExpression.Constant((1000 + buffer) * 1000)), BooleanExpression.LessThan(MathExpression.XMillis(), MathExpression.Constant((0 - buffer) * 1000)), BooleanExpression.GreaterThan(MathExpression.YMillis(), MathExpression.Constant((700 + buffer) * 1000)), BooleanExpression.LessThan(MathExpression.YMillis(), MathExpression.Constant((0 - buffer) * 1000))); ObjectAction destroySingleBulletAction = ObjectAction.Condition( condition: shouldDestroySingleBullet, action: ObjectAction.Destroy()); DTDanmakuMath.MathExpressionOffset singleBulletOffset = DTDanmakuMath.GetOffset( millipixels: MathExpression.Multiply(MathExpression.Constant(100), MathExpression.ElapsedMillisecondsPerIteration()), movementDirectionInMillidegrees: MathExpression.Variable("direction")); List <ObjectBox> collisionBoxes = new List <ObjectBox>(); collisionBoxes.Add(new ObjectBox(lowerXMillis: -3000, upperXMillis: 3000, lowerYMillis: -5000, upperYMillis: 5000)); collisionBoxes.Add(new ObjectBox(lowerXMillis: -5000, upperXMillis: 5000, lowerYMillis: -3000, upperYMillis: 3000)); EnemyObjectTemplate singleBulletTemplate = EnemyObjectTemplate.EnemyBullet( action: ObjectAction.Union( ObjectAction.SetFacingDirection(MathExpression.Variable("direction")), ObjectAction.SetPosition( xMillis: MathExpression.Add(MathExpression.XMillis(), singleBulletOffset.DeltaXInMillipixels), yMillis: MathExpression.Add(MathExpression.YMillis(), singleBulletOffset.DeltaYInMillipixels)), destroySingleBulletAction), initialMilliHP: null, damageBoxes: null, collisionBoxes: collisionBoxes, spriteName: singleBulletSpriteName); string singleBulletTemplateName = guidGenerator.NextGuid(); enemyObjectTemplates.Add(singleBulletTemplateName, singleBulletTemplate); List <ObjectAction.InitialChildNumericVariableInfo> initialNumericVariables1 = new List <ObjectAction.InitialChildNumericVariableInfo>(); initialNumericVariables1.Add(new ObjectAction.InitialChildNumericVariableInfo(name: "direction", value: MathExpression.Add(MathExpression.Variable("random offset"), MathExpression.Constant(0)))); ObjectAction spawnSingleBulletAction1 = ObjectAction.SpawnChild( childXMillis: MathExpression.XMillis(), childYMillis: MathExpression.YMillis(), childObjectTemplateName: singleBulletTemplateName, childInitialNumericVariables: initialNumericVariables1, childInitialBooleanVariables: null); List <ObjectAction.InitialChildNumericVariableInfo> initialNumericVariables2 = new List <ObjectAction.InitialChildNumericVariableInfo>(); initialNumericVariables2.Add(new ObjectAction.InitialChildNumericVariableInfo(name: "direction", value: MathExpression.Add(MathExpression.Variable("random offset"), MathExpression.Constant(120 * 1000)))); ObjectAction spawnSingleBulletAction2 = ObjectAction.SpawnChild( childXMillis: MathExpression.XMillis(), childYMillis: MathExpression.YMillis(), childObjectTemplateName: singleBulletTemplateName, childInitialNumericVariables: initialNumericVariables2, childInitialBooleanVariables: null); List <ObjectAction.InitialChildNumericVariableInfo> initialNumericVariables3 = new List <ObjectAction.InitialChildNumericVariableInfo>(); initialNumericVariables3.Add(new ObjectAction.InitialChildNumericVariableInfo(name: "direction", value: MathExpression.Add(MathExpression.Variable("random offset"), MathExpression.Constant(240 * 1000)))); ObjectAction spawnSingleBulletAction3 = ObjectAction.SpawnChild( childXMillis: MathExpression.XMillis(), childYMillis: MathExpression.YMillis(), childObjectTemplateName: singleBulletTemplateName, childInitialNumericVariables: initialNumericVariables3, childInitialBooleanVariables: null); EnemyObjectTemplate placeholderTemplate = EnemyObjectTemplate.Placeholder( action: ObjectAction.Union( ObjectAction.SetNumericVariable("random offset", MathExpression.RandomInteger(MathExpression.Constant(360 * 1000))), spawnSingleBulletAction1, spawnSingleBulletAction2, spawnSingleBulletAction3, ObjectAction.Destroy())); string placeholderTemplateName = guidGenerator.NextGuid(); enemyObjectTemplates.Add(placeholderTemplateName, placeholderTemplate); return(ObjectAction.SpawnChild( childXMillis: MathExpression.XMillis(), childYMillis: MathExpression.YMillis(), childObjectTemplateName: placeholderTemplateName, childInitialNumericVariables: null, childInitialBooleanVariables: null)); }
private static ObjectAction SpawnBullet( IMathExpression bulletDirectionInMillidegrees, Dictionary <string, DTDanmakuImage> spriteNameToImageDictionary, Dictionary <string, EnemyObjectTemplate> enemyObjectTemplates, GuidGenerator guidGenerator) { string bulletSpriteName = guidGenerator.NextGuid(); spriteNameToImageDictionary.Add(bulletSpriteName, DTDanmakuImage.BarrageEnemyBullet); string snapshotBulletDirectionInMillidegreesVariable = guidGenerator.NextGuid(); ObjectAction snapshotDirectionAction = ObjectActionGenerator.DoOnce(ObjectAction.SetNumericVariable( snapshotBulletDirectionInMillidegreesVariable, bulletDirectionInMillidegrees)); long buffer = 100; BooleanExpression shouldDestroy = BooleanExpression.Or( BooleanExpression.GreaterThan(MathExpression.XMillis(), MathExpression.Constant((1000 + buffer) * 1000)), BooleanExpression.LessThan(MathExpression.XMillis(), MathExpression.Constant((0 - buffer) * 1000)), BooleanExpression.GreaterThan(MathExpression.YMillis(), MathExpression.Constant((700 + buffer) * 1000)), BooleanExpression.LessThan(MathExpression.YMillis(), MathExpression.Constant((0 - buffer) * 1000))); ObjectAction destroyAction = ObjectAction.Condition( condition: shouldDestroy, action: ObjectAction.Destroy()); DTDanmakuMath.MathExpressionOffset offset = DTDanmakuMath.GetOffset( millipixels: MathExpression.Multiply(MathExpression.Constant(100), MathExpression.ElapsedMillisecondsPerIteration()), movementDirectionInMillidegrees: MathExpression.Variable(snapshotBulletDirectionInMillidegreesVariable)); List <ObjectBox> collisionBoxes = new List <ObjectBox>(); collisionBoxes.Add(new ObjectBox(lowerXMillis: -3000, upperXMillis: 3000, lowerYMillis: -5000, upperYMillis: 5000)); collisionBoxes.Add(new ObjectBox(lowerXMillis: -5000, upperXMillis: 5000, lowerYMillis: -3000, upperYMillis: 3000)); EnemyObjectTemplate bulletTemplate = EnemyObjectTemplate.EnemyBullet( action: ObjectAction.Union( snapshotDirectionAction, ObjectAction.SetFacingDirection(MathExpression.Variable(snapshotBulletDirectionInMillidegreesVariable)), ObjectAction.SetPosition( xMillis: MathExpression.Add(MathExpression.XMillis(), offset.DeltaXInMillipixels), yMillis: MathExpression.Add(MathExpression.YMillis(), offset.DeltaYInMillipixels)), destroyAction), initialMilliHP: null, damageBoxes: null, collisionBoxes: collisionBoxes, spriteName: bulletSpriteName); string templateName = guidGenerator.NextGuid(); enemyObjectTemplates.Add(templateName, bulletTemplate); return(ObjectAction.SpawnChild( childXMillis: MathExpression.XMillis(), childYMillis: MathExpression.Subtract(MathExpression.YMillis(), MathExpression.Constant(25000)), childObjectTemplateName: templateName, childInitialNumericVariables: null, childInitialBooleanVariables: null)); }
private static ObjectAction GetMoveAndSetCanShootVariableAction( IMathExpression xMillis, GuidGenerator guidGenerator) { string variableName = guidGenerator.NextGuid(); ObjectAction initializeVariable = ObjectAction.SetNumericVariable( variableName: variableName, variableValue: MathExpression.Constant(0)); ObjectAction incrementVariable = ObjectAction.SetNumericVariable( variableName: variableName, variableValue: MathExpression.Add(MathExpression.Variable(variableName), MathExpression.ElapsedMillisecondsPerIteration())); ObjectAction initializeAndIncrementVariable = ObjectAction.ConditionalNextAction( currentAction: initializeVariable, condition: BooleanExpression.True(), nextAction: incrementVariable); ObjectAction teleportToInitialLocation = ObjectAction.SetPosition( xMillis: xMillis, yMillis: MathExpression.Constant(800 * 1000)); ObjectAction moveDownSpeed1 = ObjectAction.SetPosition( xMillis: MathExpression.XMillis(), yMillis: MathExpression.Subtract(MathExpression.YMillis(), MathExpression.Multiply(MathExpression.Constant(100), MathExpression.ElapsedMillisecondsPerIteration()))); ObjectAction moveDownSpeed2 = ObjectAction.SetPosition( xMillis: MathExpression.XMillis(), yMillis: MathExpression.Subtract(MathExpression.YMillis(), MathExpression.Multiply(MathExpression.Constant(70), MathExpression.ElapsedMillisecondsPerIteration()))); ObjectAction moveDownSpeed3 = ObjectAction.SetPosition( xMillis: MathExpression.XMillis(), yMillis: MathExpression.Subtract(MathExpression.YMillis(), MathExpression.Multiply(MathExpression.Constant(30), MathExpression.ElapsedMillisecondsPerIteration()))); ObjectAction stopMovement = ObjectAction.Union( ObjectActionGenerator.Noop(), ObjectActionGenerator.DoOnce(ObjectAction.SetBooleanVariable("can shoot", BooleanExpression.True()))); ObjectAction moveUpSpeed1 = ObjectAction.Union( ObjectActionGenerator.DoOnce(ObjectAction.SetBooleanVariable("can shoot", BooleanExpression.False())), ObjectAction.SetPosition( xMillis: MathExpression.XMillis(), yMillis: MathExpression.Add(MathExpression.YMillis(), MathExpression.Multiply(MathExpression.Constant(30), MathExpression.ElapsedMillisecondsPerIteration())))); ObjectAction moveUpSpeed2 = ObjectAction.SetPosition( xMillis: MathExpression.XMillis(), yMillis: MathExpression.Add(MathExpression.YMillis(), MathExpression.Multiply(MathExpression.Constant(70), MathExpression.ElapsedMillisecondsPerIteration()))); ObjectAction moveUpSpeed3 = ObjectAction.SetPosition( xMillis: MathExpression.XMillis(), yMillis: MathExpression.Add(MathExpression.YMillis(), MathExpression.Multiply(MathExpression.Constant(100), MathExpression.ElapsedMillisecondsPerIteration()))); ObjectAction destroyAction = ObjectAction.Condition( condition: BooleanExpression.GreaterThanOrEqualTo(MathExpression.YMillis(), MathExpression.Constant(800 * 1000)), action: ObjectAction.Destroy()); return(ObjectAction.Union( ObjectActionGenerator.DoOnce(ObjectAction.SetBooleanVariable("can shoot", BooleanExpression.False())), initializeAndIncrementVariable, ObjectActionGenerator.DoOnce(teleportToInitialLocation), ObjectAction.ConditionalNextAction( currentAction: moveDownSpeed1, condition: BooleanExpression.GreaterThanOrEqualTo(MathExpression.Variable(variableName), MathExpression.Constant(3000)), nextAction: ObjectAction.ConditionalNextAction( currentAction: moveDownSpeed2, condition: BooleanExpression.GreaterThanOrEqualTo(MathExpression.Variable(variableName), MathExpression.Constant(4000)), nextAction: ObjectAction.ConditionalNextAction( currentAction: moveDownSpeed3, condition: BooleanExpression.GreaterThanOrEqualTo(MathExpression.Variable(variableName), MathExpression.Constant(5000)), nextAction: ObjectAction.ConditionalNextAction( currentAction: stopMovement, condition: BooleanExpression.GreaterThanOrEqualTo(MathExpression.Variable(variableName), MathExpression.Constant(12000)), nextAction: ObjectAction.ConditionalNextAction( currentAction: moveUpSpeed1, condition: BooleanExpression.GreaterThanOrEqualTo(MathExpression.Variable(variableName), MathExpression.Constant(13000)), nextAction: ObjectAction.ConditionalNextAction( currentAction: moveUpSpeed2, condition: BooleanExpression.GreaterThanOrEqualTo(MathExpression.Variable(variableName), MathExpression.Constant(14000)), nextAction: ObjectAction.Union(moveUpSpeed3, destroyAction))))))))); }
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)); }
public static GenerateDestructionAnimationResult GenerateDestructionAnimation( List <DTDanmakuImage> orderedSprites, long millisecondsPerSprite, GuidGenerator guidGenerator) { Dictionary <string, DTDanmakuImage> spriteNameToImageDictionary = new Dictionary <string, DTDanmakuImage>(); Dictionary <string, EnemyObjectTemplate> enemyObjectTemplates = new Dictionary <string, EnemyObjectTemplate>(); ObjectAction incrementElapsedTimeVariable = ObjectAction.SetNumericVariable( variableName: elapsedTimeInMillisVariableName, variableValue: MathExpression.Add( leftSide: MathExpression.Variable(variableName: elapsedTimeInMillisVariableName), rightSide: MathExpression.ElapsedMillisecondsPerIteration())); long startMilliseconds = 0; List <ObjectAction> actionsToUnionTogether = new List <ObjectAction>(); actionsToUnionTogether.Add(incrementElapsedTimeVariable); for (int i = 0; i < orderedSprites.Count; i++) { DTDanmakuImage image = orderedSprites[i]; string spriteName = guidGenerator.NextGuid(); string childObjectTemplateName = guidGenerator.NextGuid(); Tuple <ObjectAction, EnemyObjectTemplate> result = SpawnOneDestructionSpriteImage( startMilliseconds: startMilliseconds, endMilliseconds: startMilliseconds + millisecondsPerSprite, childObjectTemplateName: childObjectTemplateName, spriteName: spriteName, isLast: i == orderedSprites.Count - 1); startMilliseconds += millisecondsPerSprite; actionsToUnionTogether.Add(result.Item1); spriteNameToImageDictionary.Add(spriteName, image); enemyObjectTemplates.Add(childObjectTemplateName, result.Item2); } string placeholderObjectTemplateName = guidGenerator.NextGuid(); List <ObjectAction.InitialChildNumericVariableInfo> initialChildNumericVariables = new List <ObjectAction.InitialChildNumericVariableInfo>(); initialChildNumericVariables.Add(new ObjectAction.InitialChildNumericVariableInfo(elapsedTimeInMillisVariableName, MathExpression.Constant(0))); ObjectAction action = ObjectAction.SpawnChild( childXMillis: MathExpression.XMillis(), childYMillis: MathExpression.YMillis(), childObjectTemplateName: placeholderObjectTemplateName, childInitialNumericVariables: initialChildNumericVariables, childInitialBooleanVariables: null); EnemyObjectTemplate placeholderObjectTemplate = EnemyObjectTemplate.Enemy( action: ObjectAction.Union(actionsToUnionTogether), initialMilliHP: null, damageBoxes: null, collisionBoxes: null, spriteName: null); enemyObjectTemplates.Add(placeholderObjectTemplateName, placeholderObjectTemplate); return(new GenerateDestructionAnimationResult( objectAction: action, spriteNameToImageDictionary: spriteNameToImageDictionary, enemyObjectTemplates: enemyObjectTemplates)); }
public GameLogic( int fps, IDTDeterministicRandom rng, GuidGenerator guidGenerator, int soundVolume, bool debugMode) { this.fps = fps; this.elapsedTimeMillis = 0; long elapsedMillisPerFrame = 1000 / this.fps; this.soundVolume = soundVolume; this.debugMode = debugMode; this.rng = rng; this.rng.Reset(); this.spriteNameToImageDictionary = new Dictionary <string, DTDanmakuImage>(); this.enemyObjectTemplates = new Dictionary <string, EnemyObjectTemplate>(); this.soundNameToSoundDictionary = new Dictionary <string, DTDanmakuSound>(); List <DTDanmakuImage> playerDeadExplosionSprites = new List <DTDanmakuImage>(); playerDeadExplosionSprites.Add(DTDanmakuImage.Explosion1); playerDeadExplosionSprites.Add(DTDanmakuImage.Explosion2); playerDeadExplosionSprites.Add(DTDanmakuImage.Explosion3); playerDeadExplosionSprites.Add(DTDanmakuImage.Explosion4); playerDeadExplosionSprites.Add(DTDanmakuImage.Explosion5); playerDeadExplosionSprites.Add(DTDanmakuImage.Explosion6); playerDeadExplosionSprites.Add(DTDanmakuImage.Explosion7); playerDeadExplosionSprites.Add(DTDanmakuImage.Explosion8); playerDeadExplosionSprites.Add(DTDanmakuImage.Explosion9); DestructionAnimationGenerator.GenerateDestructionAnimationResult playerDeadDestructionAnimationResult = DestructionAnimationGenerator.GenerateDestructionAnimation( orderedSprites: playerDeadExplosionSprites, millisecondsPerSprite: 200, guidGenerator: guidGenerator); foreach (var entry in playerDeadDestructionAnimationResult.spriteNameToImageDictionary) { this.spriteNameToImageDictionary.Add(entry.Key, entry.Value); } foreach (var entry in playerDeadDestructionAnimationResult.enemyObjectTemplates) { this.enemyObjectTemplates.Add(entry.Key, entry.Value); } this.player = new Player(playerDeadDestructionAnimationResult.objectAction); this.playerBullets = new List <PlayerBullet>(); this.powerUps = new List <PowerUp>(); GenerateEnemiesResult enemies = GenerateEnemiesForLevel.GenerateEnemies( elapsedMillisecondsPerIteration: elapsedMillisPerFrame, rng: rng, guidGenerator: guidGenerator); this.enemyObjects = enemies.enemyObjects; foreach (var entry in enemies.spriteNameToImageDictionary) { this.spriteNameToImageDictionary.Add(entry.Key, entry.Value); } foreach (var entry in enemies.enemyObjectTemplates) { this.enemyObjectTemplates.Add(entry.Key, entry.Value); } foreach (var entry in enemies.soundNameToSoundDictionary) { this.soundNameToSoundDictionary.Add(entry.Key, entry.Value); } this.gameOverCountdownInMillis = null; this.levelFinishedCountdownInMillis = null; this.shouldPlayPlayerShootSound = false; this.playerShootSoundCooldownInMillis = 0; this.soundsThatNeedToBePlayed = new List <DTDanmakuSound>(); this.bossHealthBar = new BossHealthBar(); /* * Note that since these debug things bypass regular game logic, they may break other stuff or crash the program * (Should be used for debugging / development only) */ if (this.debugMode) { this.player.numLivesLeft = 200; } this.debug_renderHitboxes = false; }