protected void checkSpaceship2AsteroidCollisions(SpaceShip spaceShip, Player.State state)
				throws GameOverException {
			ArrayList<Asteroid> asteroids = mGameState.getAsteroids();
			ArrayList<Asteroid> toRemove = new ArrayList<>();
			ArrayList<Asteroid> toAdd = new ArrayList<>();
			synchronized (asteroids) {
				for (Asteroid asteroid : asteroids) {
					if (asteroid.checkCollision(spaceShip, mWidth, mHeight) && spaceShip.isVulnerable()) {
						synchronized (state) {
							int lives = state.getLives();
							if (--lives == 0) {
								throw new GameOverException();
							}
							state.setLives(lives);
						}
						spaceShip.setUnvulnerableFor(SpaceShip.DEFAULT_UNVULNERABILITY_TIME);
						switch (asteroid.getType()) {
						case LARGE:
							toAdd.add(createAsteroidWithRandomSpeed(Type.MEDIUM, asteroid.getPosition().clone()));
							toAdd.add(createAsteroidWithRandomSpeed(Type.MEDIUM, asteroid.getPosition().clone()));
							toRemove.add(asteroid);
							break;

						case MEDIUM:
							toAdd.add(createAsteroidWithRandomSpeed(Type.SMALL, asteroid.getPosition().clone()));
							toAdd.add(createAsteroidWithRandomSpeed(Type.SMALL, asteroid.getPosition().clone()));
							toRemove.add(asteroid);
							break;

						case SMALL:
							toRemove.add(asteroid);
							break;
						}
					}
				}
				for (Asteroid asteroid : toRemove) {
					asteroids.remove(asteroid);
				}
				for (Asteroid asteroid : toAdd) {
					asteroids.add(asteroid);
				}
			}
		}