part of game; enum GameObjectType { asteroidBig, asteroidSmall, asteroidPowerUp, enemyScout, enemyDestroyer, coin, } class GameObjectFactory { GameObjectFactory(this.sheet, this.sounds, this.level, this.playerState); SpriteSheet sheet; Map sounds; Level level; PlayerState playerState; void addAsteroids(int numAsteroids, double yPos, double distribution) { for (int i = 0; i < numAsteroids; i++) { GameObjectType type = (randomDouble() < distribution) ? GameObjectType.asteroidBig : GameObjectType.asteroidSmall; if (i == 0) type = GameObjectType.asteroidPowerUp; Point pos = new Point(randomSignedDouble() * 160.0, yPos + _chunkSpacing * randomDouble()); addGameObject(type, pos); } } void addEnemyScoutSwarm(int numEnemies, double yPos) { for (int i = 0; i < numEnemies; i++) { double spacing = math.max(_chunkSpacing / (numEnemies + 1.0), 80.0); double y = yPos + _chunkSpacing / 2.0 - (numEnemies - 1) * spacing / 2.0 + i * spacing; addGameObject(GameObjectType.enemyScout, new Point(0.0, y)); } } void addEnemyDestroyerSwarm(int numEnemies, double yPos) { for (int i = 0; i < numEnemies; i++) { addGameObject(GameObjectType.enemyDestroyer, new Point(randomSignedDouble() * 120.0 , yPos + _chunkSpacing * randomDouble())); } } void addGameObject(GameObjectType type, Point pos) { GameObject obj; if (type == GameObjectType.asteroidBig) obj = new AsteroidBig(this); else if (type == GameObjectType.asteroidSmall) obj = new AsteroidSmall(this); else if (type == GameObjectType.asteroidPowerUp) obj = new AsteroidPowerUp(this); else if (type == GameObjectType.enemyScout) obj = new EnemyScout(this); else if (type == GameObjectType.enemyDestroyer) obj = new EnemyDestroyer(this); else if (type == GameObjectType.coin) obj = new Coin(this); obj.position = pos; obj.setupActions(); level.addChild(obj); } void addBossFight(int l, double yPos) { EnemyBoss boss = new EnemyBoss(this); boss.position = new Point(0.0, yPos + _chunkSpacing / 2.0); boss.setupActions(); level.addChild(boss); playerState.boss = boss; } }