コード例 #1
0
ファイル: Game1.cs プロジェクト: Brandon-T/XNA-FPS
        protected override void Initialize()
        {
            city = new City(this);
            effect = new BasicEffect(this.GraphicsDevice);

            cam = new Camera(this);
            cam.LookAt(MathHelper.ToDegrees(MathHelper.PiOver4), 0.05f, 1000.0f, new Vector3(11f, 0f, -7.5f), Vector3.Forward, Vector3.Up);
            base.Initialize();
        }
コード例 #2
0
ファイル: City.cs プロジェクト: Brandon-T/XNA-FPS
        public void Draw(Camera camera)
        {
            this.citybuilder.Scale = new Vector3(1.0f, 1.5f, 1.0f);
            this.effect.Texture = this.texture;
            this.effect.TextureEnabled = true;
            this.effect.World = this.citybuilder.CreateWorldMatrix();
            this.effect.View = camera.View;
            this.effect.Projection = camera.Projection;

            foreach (EffectPass pass in effect.CurrentTechnique.Passes)
            {
                pass.Apply();
                this.citybuilder.Draw();
            }
        }
コード例 #3
0
ファイル: GunModel.cs プロジェクト: Brandon-T/XNA-FPS
 public void Fire(Camera cam)
 {
     if (ammocount > 0)
     {
         Projectile bullet = projectiles[ammocount--];
         bullet.Position = cam.GetTarget;
         Vector3 dir = cam.GetTarget - cam.GetPosition;
         dir.Normalize();
         bullet.SetDirection(dir);
         float angle = (float)Math.Atan2(-dir.X, dir.Y);
         bullet.Rotation_X = -90f;
         bullet.Rotation_Y = MathHelper.ToDegrees(cam.Angle_Y);
         this.bullets.Add(bullet);
         this.sound.Play();
     }
 }
コード例 #4
0
ファイル: Collider.cs プロジェクト: Brandon-T/XNA-FPS
        public bool isColliding(List<BoundingBox> boxes, Camera cam, Vector3 playerDimensions)
        {
            BoundingBox cameraBox = new BoundingBox(
                new Vector3(cam.GetPosition.X - (playerDimensions.X / 2), cam.GetPosition.Y - (playerDimensions.Y), cam.GetPosition.Z - (playerDimensions.Z / 2)),
                new Vector3(cam.GetPosition.X + (playerDimensions.X / 2), cam.GetPosition.Y, cam.GetPosition.Z + (playerDimensions.Z / 2))
            );

            foreach (BoundingBox box in boxes)
            {
                if (box.Contains(cameraBox) != ContainmentType.Disjoint)
                {
                    return true;
                }
            }
            return false;
        }
コード例 #5
0
ファイル: Collider.cs プロジェクト: Brandon-T/XNA-FPS
        public bool isColliding(BoundingBox box, Camera cam, Vector3 playerDimensions)
        {
            BoundingBox cameraBox = new BoundingBox(
                new Vector3(cam.GetPosition.X - (playerDimensions.X / 2), cam.GetPosition.Y - (playerDimensions.Y), cam.GetPosition.Z - (playerDimensions.Z / 2)),
                new Vector3(cam.GetPosition.X + (playerDimensions.X / 2), cam.GetPosition.Y, cam.GetPosition.Z + (playerDimensions.Z / 2))
            );

            return box.Contains(cameraBox) != ContainmentType.Disjoint;
        }
コード例 #6
0
ファイル: Collider.cs プロジェクト: Brandon-T/XNA-FPS
        public Face DetermineSide(BoundingBox box, int radius, Camera cam)
        {
            Vector3 down = cam.GetPosition + new Vector3(0, -radius, 0);
            Vector3 up = cam.GetPosition + new Vector3(0, radius, 0);
            Vector3 left = cam.GetPosition + new Vector3(-radius, 0, 0);
            Vector3 right = cam.GetPosition + new Vector3(radius, 0, 0);
            Vector3 forward = cam.GetPosition + new Vector3(0, 0, -radius);
            Vector3 backward = cam.GetPosition + new Vector3(0, 0, radius);

            Ray downRay = new Ray(cam.GetPosition, down);
            Ray upRay = new Ray(cam.GetPosition, up);
            Ray leftRay = new Ray(cam.GetPosition, left);
            Ray rightRay = new Ray(cam.GetPosition, right);
            Ray frontRay = new Ray(cam.GetPosition, forward);
            Ray backRay = new Ray(cam.GetPosition, backward);

            float? downI = downRay.Intersects(box);
            float? upI = upRay.Intersects(box);
            float? leftI = leftRay.Intersects(box);
            float? rightI = rightRay.Intersects(box);
            float? frontI = frontRay.Intersects(box);
            float? backI = backRay.Intersects(box);

            if (downI != null && downI.Value < 0.01f)
                return Face.BOTTOM;

            if (upI != null && upI.Value < 0.01f)
                return Face.TOP;

            if (frontI != null && frontI.Value < 0.01f)
                return Face.FRONT;

            if (backI != null && backI.Value < 0.01f)
                return Face.BACK;

            if (leftI != null && leftI.Value < 0.01f)
                return Face.LEFT;

            if (rightI != null && rightI.Value < 0.01f)
                return Face.RIGHT;

            return Face.NONE;
        }