public override void FireProjectile(Vector2 loc, Vector2 vec, Direction dir) { if (canFire) { Vector2 fireOffset = Vector2.Zero; switch (dir) { case Direction.Up: fireOffset = new Vector2(loc.X + Owner.Width / 2 - rangedStats.BulletWidth / 2, loc.Y); break; case Direction.Down: fireOffset = new Vector2(loc.X + Owner.Width / 2 - 5, (int)loc.Y + Owner.Height - rangedStats.BulletHeight); break; case Direction.Left: fireOffset = new Vector2(loc.X, (int)loc.Y + Owner.Height / 2 - rangedStats.BulletHeight / 2); break; case Direction.Right: fireOffset = new Vector2(loc.X + Owner.Width - rangedStats.BulletWidth, (int)loc.Y + Owner.Height / 2 - rangedStats.BulletWidth / 2); break; } Vector2 vDir = Vector2.One * vec; vDir.Normalize(); Game1.AddProjectile(new Projectile(Owner, fireOffset, vDir, rangedStats, pTexture, Color.OrangeRed)); soundEffect.Play(); canFire = false; reloadTimer = 0; } }
public override void FireProjectile(Vector2 loc, Vector2 addedVel, Direction dir) { if (canFire) { Vector2 fireOffset = Vector2.Zero; switch (dir) { case Direction.Up: fireOffset = new Vector2(loc.X + Owner.Width / 2 - rangedStats.BulletWidth / 2, loc.Y); break; case Direction.Down: fireOffset = new Vector2(loc.X + Owner.Width / 2 - 5, (int)loc.Y + Owner.Height - rangedStats.BulletHeight); break; case Direction.Left: fireOffset = new Vector2(loc.X, (int)loc.Y + Owner.Height / 2 - rangedStats.BulletHeight / 2); break; case Direction.Right: fireOffset = new Vector2(loc.X + Owner.Width - rangedStats.BulletWidth, (int)loc.Y + Owner.Height / 2 - rangedStats.BulletWidth / 2); break; } Vector2 vDir1 = Vector2.Zero, vDir2 = Vector2.Zero, vDir3 = Vector2.Zero; double tan = Math.Tan(.15d); switch (dir) { case Direction.Up: vDir1 = new Vector2(addedVel.X, -rangedStats.BulletSpeed); vDir2 = new Vector2((float)tan * vDir1.Y, vDir1.Y); vDir3 = new Vector2(-(float)tan * vDir1.Y, vDir1.Y); break; case Direction.Down: vDir1 = new Vector2(addedVel.X, rangedStats.BulletSpeed); vDir2 = new Vector2((float)tan * vDir1.Y, vDir1.Y); vDir3 = new Vector2(-(float)tan * vDir1.Y, vDir1.Y); break; case Direction.Left: vDir1 = new Vector2(-rangedStats.BulletSpeed, addedVel.Y); vDir2 = new Vector2(vDir1.X, (float)tan * vDir1.X); vDir3 = new Vector2(vDir1.X, -(float)tan * vDir1.X); break; case Direction.Right: vDir1 = new Vector2(rangedStats.BulletSpeed, addedVel.Y); vDir2 = new Vector2(vDir1.X, (float)tan * vDir1.X); vDir3 = new Vector2(vDir1.X, -(float)tan * vDir1.X); break; } vDir1.Normalize(); vDir2.Normalize(); vDir3.Normalize(); Game1.AddProjectile(new Projectile(Owner, fireOffset, vDir1, rangedStats, pTexture, Color.White)); Game1.AddProjectile(new Projectile(Owner, fireOffset, vDir2, rangedStats, pTexture, Color.White)); Game1.AddProjectile(new Projectile(Owner, fireOffset, vDir3, rangedStats, pTexture, Color.White)); soundEffect.Play(.3f, .5f, 0f); canFire = false; reloadTimer = 0; } }