public Asteroid(Texture2D image, Vector2 position, AsteroidSize size) : base(image, position) { this.size = size; if (size == AsteroidSize.BIG) { asteroids[0] = new Asteroid(image, position, AsteroidSize.MEDIUM); asteroids[1] = new Asteroid(image, position, AsteroidSize.MEDIUM); } else if (size == AsteroidSize.MEDIUM) { asteroids[0] = new Asteroid(image, position, AsteroidSize.SMALL); asteroids[1] = new Asteroid(image, position, AsteroidSize.SMALL); } }
/// <summary> /// Adds the asteroid. /// </summary> /// <param name="_object">The _object.</param> public void AddAsteroid(Asteroid _object) { _object.AddObserver(this); AddDrawableObject(_object); }
/// <summary> /// Calculates the new rotations. /// </summary> /// <param name="asteroid">The asteroid.</param> /// <param name="bullet">The bullet.</param> /// <returns></returns> protected float[] CalculateNewRotations(Asteroid asteroid, Bullet bullet) { float[] returnedValues = new float[2] { 0, 0 }; float PI = 3.1415f; float bulletRotation = bullet.Rotation % (2 * PI); float asteroidRotation = asteroid.Rotation % (2 * PI); if ((bulletRotation >= asteroidRotation - PI / 4) && (bulletRotation < asteroidRotation + PI / 4)) { //Bullet comes from behind returnedValues[0] = PI / 4; returnedValues[1] = -PI / 4; } else if ((bulletRotation >= asteroidRotation - 5 * PI / 4) && (bulletRotation < asteroidRotation + 3 * PI / 4)) { //Bullet comes from the front returnedValues[0] = PI / 2; returnedValues[1] = -PI / 2; } else if ((bulletRotation >= asteroidRotation + PI / 4) && (bulletRotation < asteroidRotation + 3 * PI / 4)) { //Bullet comes from the right returnedValues[0] = -PI / 4; returnedValues[1] = 0; } else { //Bullet comes from the left returnedValues[0] = PI / 4; returnedValues[1] = 0; } return returnedValues; }