public override bool GenerateBullet(Vector2 position, float direction, float bonusAccuracy) { bool bulletGenerated = base.GenerateBullet(position, direction, bonusAccuracy); GrenadeBullet bullet; float currentDirection; if (bulletGenerated) { for (int i = 0; i < numberOfBullets; i++) { currentDirection = (float)(direction + (accuracy + bonusAccuracy) * (random.NextDouble() - 0.5)); bullet = new GrenadeBullet(position, (float)(bulletSpeed * (1 - 0.1 * random.NextDouble())), currentDirection, (float)(maxDistance * (1 - 0.1 * random.NextDouble()))); bullet.CurrentImages.Add(new Image(texture)); bullet.CurrentImages[0].OriginX = bullet.CurrentImages[0].Width / 2; bullet.CurrentImages[0].OriginY = bullet.CurrentImages[0].Height / 2; bullet.CurrentImages[0].Angle = currentDirection; OGE.CurrentWorld.AddEntity(bullet); } PlaySound("grenade_launch"); } return bulletGenerated; }
public override void DestroyBulletMaxRange() { BaseExplosion baseExplosion = new BaseExplosion(Position, ExplosionColor, ExplosionRadius); baseExplosion.FriendlyExplosion = true; baseExplosion.Damage = damage; baseExplosion.DamagePercentage = ExplosionPower; OGE.CurrentWorld.AddEntity(baseExplosion); GrenadeBullet bullet; Random random = OGE.Random; int startingAngle = OGE.Random.Next(360); int numberOfGrenades = 3; for (int i = 0; i < numberOfGrenades; i++) { float currentDirection = (startingAngle + i * 360.0f / numberOfGrenades) + OGE.Random.Next(10) - 5; bullet = new GrenadeBullet(Position, (float)(baseSpeed * (1 - 0.1 * random.NextDouble())), currentDirection, (float)(grenadeDistance * (1 - 0.5 * random.NextDouble()))); bullet.CurrentImages.Add(new Image(texture)); bullet.CurrentImages[0].OriginX = bullet.CurrentImages[0].Width / 2; bullet.CurrentImages[0].OriginY = bullet.CurrentImages[0].Height / 2; bullet.CurrentImages[0].Angle = currentDirection; bullet.CurrentImages[0].Scale = 0.5f; bullet.AddCollisionMask(baseMask.Clone()); OGE.CurrentWorld.AddEntity(bullet); } base.DestroyBulletMaxRange(); }