/// <summary> /// initializes and returns an Asteroid. /// </summary> /// <param name="position">starting position of the asteroid.</param> /// <param name="direction">Seed value for new random direction.</param> /// <param name="speed">Seed value for new random speed.</param> /// <param name="asteroidType">Asteroid type to generate.</param> /// <returns>A new Asteroid instance.</returns> /// <remarks> /// The direction and speed of the asteroid is randomized, but is /// based on the passed values. /// </remarks> public Asteroid generateAsteroid(Vector2 position, Vector2 direction, float speed, string asteroidType) { Asteroid spawnedAsteroid = new Asteroid(); //position needs to vary based on screen resolution //randomize direction - rather than accepting a direction should do it all here int randomNumber = rand.Next(4); if (randomNumber == 3) direction.X = direction.X * -1; else if(randomNumber == 2) direction.X = direction.Y * -1; else if (randomNumber == 1) { direction.X = direction.X * -1; direction.Y = direction.Y * -1; }//for 0 we will leave it alone randomNumber = rand.Next(10); if (randomNumber > 6) speed += rand.Next((int)speed); else if(randomNumber > 2) speed -= rand.Next((int)(speed+1)/2); //and leave speed alone otherwise if (asteroidType == Asteroid.ASTEROID_TYPE) { spawnedAsteroid.texture2D = asteroid; spawnedAsteroid.type = Asteroid.ASTEROID_TYPE; } else if (asteroidType == Asteroid.SMALL_ASTEROID_TYPE) { spawnedAsteroid.texture2D = smallAsteroid; spawnedAsteroid.type = Asteroid.SMALL_ASTEROID_TYPE; } else //tiny type { spawnedAsteroid.texture2D = tinyAsteroid; spawnedAsteroid.type = Asteroid.TINY_ASTEROID_TYPE; } spawnedAsteroid.init(position, direction, speed, 100, true); return spawnedAsteroid; }
/// <summary> /// Destroys passed Asteroid /// </summary> /// <param name="deadAsteroid">An asteroid doomed to die.</param> /// <remarks> /// This method is called when game state indicates and asteroid /// should no longer be an active part of the game. This method /// also generates child asteroids if appropriate based on a 'dead' /// asteroids size. /// </remarks> public void destroyAsteroid(Asteroid deadAsteroid) { //I believe setting isActive is now redundent due to some changes I've made deadAsteroid.isActive = false; asteroidExplosion.Play(); if (deadAsteroid.type == Asteroid.ASTEROID_TYPE) { score += 100; for (int i = 0; i < 4; i++) { entityList.Add(generateAsteroid(deadAsteroid.position, deadAsteroid.velocityDirection, deadAsteroid.velocityMagnitude, Asteroid.SMALL_ASTEROID_TYPE)); } } else if (deadAsteroid.type == Asteroid.SMALL_ASTEROID_TYPE) { score += 50; for (int i = 0; i < 4; i++) { entityList.Add(generateAsteroid(deadAsteroid.position, deadAsteroid.velocityDirection, deadAsteroid.velocityMagnitude, Asteroid.TINY_ASTEROID_TYPE)); } } else score += 25; }