Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
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;
            }
        }