Exemple #1
0
        /// <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;
        }
Exemple #2
0
        /// <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;
        }