void AddPlayer(PlayerInput input) { GameObject newPlayerGO; // Spawn at selected position if (playerSpawnPositions.Count >= spawnPositionIndex) { newPlayerGO = Instantiate(flyPrefabs[players.Count], playerSpawnPositions[spawnPositionIndex], Quaternion.identity); spawnPositionIndex++; } else // Probably spawns at prefab default position, flies might end up on top of eachother { newPlayerGO = Instantiate(flyPrefabs[players.Count]); } scoreSystem.AddScoreVariable(players.Count); Player newPlayer = newPlayerGO.AddComponent <Player>(); newPlayer.Initialize(input); newPlayer.controller.Initialize(players.Count); players.Add(newPlayer); scoreSystem.AddNewPlayerScore(players.Count - 1); // Subscribe to events here newPlayer.controller.OnFireProjectile += projectileSystem.SpawnProjectile; newPlayer.controller.OnFireProjectile += audioPlayer.PlayFlyShootSound; newPlayer.controller.OnIncreaseScore += scoreSystem.IncreaseScore; newPlayer.controller.OnDecreaseScore += scoreSystem.DecreaseScore; //newPlayer.controller.OnIncreaseScore += SendMessageToScoreSystem; //newPlayer.controller.OnDecreaseScore += SendMessageToScoreSystem; newPlayer.controller.OnHitBubble += SendMessageToScoreSystem; }