private void Fire(GameTime gameTime) { if (BulletFrequence.TotalMilliseconds > 0) BulletFrequence -= gameTime.ElapsedGameTime; else { BulletFrequence = TimeSpan.FromTicks((long)(Improvements.ShootFrequencyData[Improvements.ShootFrequencyData.Count - 3].Key * Config.PlayerShootFrequency.Ticks)); var direction = new Vector2((float)Math.Sin(Rotation), (float)Math.Cos(Rotation) * -1); // Straight if (PlayerData.ShootTypeIndex != 1) { // Add randomness to bullet direction float aimAngle = direction.ToAngle(); Quaternion aimQuat = Quaternion.CreateFromYawPitchRoll(0, 0, aimAngle); float spreadAmount = 0.25f; if (_focusMode) spreadAmount /= 3f; float randomSpread = GameRef.Rand.NextFloat(-spreadAmount, spreadAmount); direction = MathUtil.FromPolar(aimAngle + randomSpread, 11f); direction.Normalize(); Vector2 offset = Vector2.Transform(new Vector2(0, 0), aimQuat); var bullet = new Bullet(GameRef, _bulletSprite, Position + offset, direction, Config.PlayerBulletVelocity); bullet.WaveMode = false; AddBullet(bullet); } // Front sides 1/2 diagonal if (PlayerData.ShootTypeIndex > 0) { Vector2 directionLeft = direction; Vector2 positionLeft = new Vector2(Position.X - 25f * (float)Math.Cos(Rotation), Position.Y - 25f * (float)Math.Sin(Rotation)); Vector2 directionRight = direction; Vector2 positionRight = new Vector2(Position.X + 25f * (float)Math.Cos(Rotation), Position.Y + 25f * (float)Math.Sin(Rotation)); if (!SlowMode) { directionLeft = new Vector2((float)Math.Sin(Rotation - Math.PI / 4), (float)Math.Cos(Rotation - Math.PI / 4) * -1); directionRight = new Vector2((float)Math.Sin(Rotation + Math.PI / 4), (float)Math.Cos(Rotation + Math.PI / 4) * -1); } var bulletLeft = new Bullet(GameRef, _bulletSprite, positionLeft, directionLeft, Config.PlayerBulletVelocity); var bulletRight = new Bullet(GameRef, _bulletSprite, positionRight, directionRight, Config.PlayerBulletVelocity); AddBullet(bulletLeft); AddBullet(bulletRight); } // Front sides 1/4 diagonal if (PlayerData.ShootTypeIndex >= 3) { Vector2 directionLeft = direction; Vector2 positionLeft = new Vector2(Position.X - 10f * (float)Math.Cos(Rotation), Position.Y - 10f * (float)Math.Sin(Rotation)); Vector2 directionRight = direction; Vector2 positionRight = new Vector2(Position.X + 10f * (float)Math.Cos(Rotation), Position.Y + 10f * (float)Math.Sin(Rotation)); if (!SlowMode) { directionLeft = new Vector2((float)Math.Sin(Rotation - Math.PI / 8), (float)Math.Cos(Rotation - Math.PI / 8) * -1); directionRight = new Vector2((float)Math.Sin(Rotation + Math.PI / 8), (float)Math.Cos(Rotation + Math.PI / 8) * -1); } var bulletLeft = new Bullet(GameRef, _bulletSprite, positionLeft, directionLeft, Config.PlayerBulletVelocity); bulletLeft.Power = 0.5f; var bulletRight = new Bullet(GameRef, _bulletSprite, positionRight, directionRight, Config.PlayerBulletVelocity); bulletRight.Power = 0.5f; AddBullet(bulletLeft); AddBullet(bulletRight); } // Behind if (PlayerData.ShootTypeIndex >= 2) { var directionBehind = new Vector2((float)Math.Sin(Rotation) * -1, (float)Math.Cos(Rotation)); var bullet = new Bullet(GameRef, _bulletSprite, Position, directionBehind, Config.PlayerBulletVelocity); bullet.Power = Improvements.ShootPowerData[PlayerData.ShootPowerIndex].Key; bullet.WaveMode = false; AddBullet(bullet); } _shootSound.Play(); //FireParticles(gameTime); } }
private void Fire(GameTime gameTime) { if (BulletFrequence.TotalMilliseconds > 0) BulletFrequence -= gameTime.ElapsedGameTime; else { BulletFrequence = TimeSpan.FromTicks((long)(Improvements.ShootFrequencyData[PlayerData.ShootFrequencyIndex].Key * Config.PlayerShootFrequency.Ticks)); var direction = new Vector2((float)Math.Sin(Rotation), (float)Math.Cos(Rotation) * -1); // Straight if (PlayerData.ShootTypeIndex != 1) { var bullet = new Bullet(Game, _bulletSprite, Position, direction, Config.PlayerBulletVelocity); bullet.WaveMode = false; AddBullet(bullet); } // Front sides 1/2 diagonal if (PlayerData.ShootTypeIndex > 0) { Vector2 directionLeft = direction; Vector2 positionLeft = new Vector2(Position.X - 25f * (float)Math.Cos(Rotation), Position.Y - 25f * (float)Math.Sin(Rotation)); Vector2 directionRight = direction; Vector2 positionRight = new Vector2(Position.X + 25f * (float)Math.Cos(Rotation), Position.Y + 25f * (float)Math.Sin(Rotation)); ; if (!SlowMode) { directionLeft = new Vector2((float)Math.Sin(Rotation - Math.PI / 4), (float)Math.Cos(Rotation - Math.PI / 4) * -1); directionRight = new Vector2((float)Math.Sin(Rotation + Math.PI / 4), (float)Math.Cos(Rotation + Math.PI / 4) * -1); } var bulletLeft = new Bullet(Game, _bulletSprite, positionLeft, directionLeft, Config.PlayerBulletVelocity); var bulletRight = new Bullet(Game, _bulletSprite, positionRight, directionRight, Config.PlayerBulletVelocity); AddBullet(bulletLeft); AddBullet(bulletRight); } // Front sides 1/4 diagonal if (PlayerData.ShootTypeIndex >= 3) { Vector2 directionLeft = direction; Vector2 positionLeft = new Vector2(Position.X - 10f * (float)Math.Cos(Rotation), Position.Y - 10f * (float)Math.Sin(Rotation)); Vector2 directionRight = direction; Vector2 positionRight = new Vector2(Position.X + 10f * (float)Math.Cos(Rotation), Position.Y + 10f * (float)Math.Sin(Rotation)); if (!SlowMode) { directionLeft = new Vector2((float)Math.Sin(Rotation - Math.PI / 8), (float)Math.Cos(Rotation - Math.PI / 8) * -1); directionRight = new Vector2((float)Math.Sin(Rotation + Math.PI / 8), (float)Math.Cos(Rotation + Math.PI / 8) * -1); } var bulletLeft = new Bullet(Game, _bulletSprite, positionLeft, directionLeft, Config.PlayerBulletVelocity); bulletLeft.Power = 0.5f; var bulletRight = new Bullet(Game, _bulletSprite, positionRight, directionRight, Config.PlayerBulletVelocity); bulletRight.Power = 0.5f; AddBullet(bulletLeft); AddBullet(bulletRight); } // Behind if (PlayerData.ShootTypeIndex >= 2) { var directionBehind = new Vector2((float)Math.Sin(Rotation) * -1, (float)Math.Cos(Rotation)); var bullet = new Bullet(Game, _bulletSprite, Position, directionBehind, Config.PlayerBulletVelocity); bullet.Power = Improvements.ShootPowerData[PlayerData.ShootPowerIndex].Key; bullet.WaveMode = false; AddBullet(bullet); } _shootSound.Play(); } }