public void init() { //Instantiate the game controller depending on what game mode we are playing if (AsteroidsGameConfig.gameMode == GameModes.SinglePlayerMode) { gameModeController = new SinglePlayerModeGameController(this, singlePlayerSpawnPoint.position, AsteroidsGameConfig.playerConfigList[0]); } else if (AsteroidsGameConfig.gameMode == GameModes.MultiPlayerMode) { Vector3[] spawnPointList = multiPlayerSpawnPointList.Select(t => t.position).ToArray(); gameModeController = new MultiPlayerModeGameController(this, spawnPointList, AsteroidsGameConfig.playerConfigList); } //Register for game flow events gameModeController.onGamePause += onGamePause; gameModeController.onGameRestart += onGameRestart; gameModeController.onGameEnd += onGameEnd; asteroidManager.init(); powerUpManager.init(); shipManager.init(gameModeController.playerList.Select(p => p.transform).ToList()); //Add all the updatable items to the list updatableItemList.Add(asteroidManager); updatableItemList.Add(powerUpManager); updatableItemList.Add(shipManager); //Create pool instances for all the items that are going to be instantiated intensively PoolManager.instance.createPool(PoolManager.PoolIds.Bullet, Resources.Load("Prefabs/Bullet") as GameObject, 50); PoolManager.instance.createPool(PoolManager.PoolIds.HeavyBullet, Resources.Load("Prefabs/HeavyBullet") as GameObject, 50); PoolManager.instance.createPool(PoolManager.PoolIds.Particle, Resources.Load("Prefabs/Particle") as GameObject, 500); PoolManager.instance.createPool(PoolManager.PoolIds.AsteroidBig, Resources.Load("Prefabs/Asteroid_Big") as GameObject, 50); PoolManager.instance.createPool(PoolManager.PoolIds.AsteroidMedium, Resources.Load("Prefabs/Asteroid_Medium") as GameObject, 50); PoolManager.instance.createPool(PoolManager.PoolIds.AsteroidSmall, Resources.Load("Prefabs/Asteroid_Small") as GameObject, 50); PoolManager.instance.createPool(PoolManager.PoolIds.Ship, Resources.Load("Prefabs/Ship") as GameObject, 10); }