Example #1
0
        /// <summary>
        /// Allows the game to run logic such as updating the world,
        /// checking for collisions, gathering input, and playing audio.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
            {
                Exit();
            }

            KeyboardState newkbState = Keyboard.GetState();

            if (newkbState.IsKeyDown(Keys.Tab) && !oldKBState.IsKeyDown(Keys.Tab))
            {
                Console.WriteLine("Tab");
                MapEditor.Active();
                IsMouseVisible = MapEditor.IsActive;
            }

            bool shift = Keyboard.GetState().IsKeyDown(Keys.LeftShift) || Keyboard.GetState().IsKeyDown(Keys.RightShift);

            // TODO: Add your update logic here

            MouseState currentMouseState = Mouse.GetState();

            if (currentMouseState != originalMouseState)
            {
                float xDifference = currentMouseState.X - originalMouseState.X;
                camDirection -= 0.001f * xDifference;
                CenterMouse();
            }

            // Rotate Camera with keyboard
            if (Keyboard.GetState().IsKeyDown(Keys.Q) && shift)  // left
            {
                camDirection += .01f;
            }
            if (Keyboard.GetState().IsKeyDown(Keys.D) && shift)  // right
            {
                camDirection -= .01f;
            }

            // Move camera up & down
            if (Keyboard.GetState().IsKeyDown(Keys.Up))
            {
                cameraPosition += new Vector3(0, .05f, 0);
            }
            if (Keyboard.GetState().IsKeyDown(Keys.Down))
            {
                cameraPosition += new Vector3(0, -.05f, 0);
            }

            // The Vector3.Transform() method just multiplies a matrix with a vector

            // Move Camera
            if (Keyboard.GetState().IsKeyDown(Keys.Q) && !shift)  // left
            {
                Matrix  forwardMovement = Matrix.CreateRotationY(camDirection);
                float   speed           = .1f;
                Vector3 v = new Vector3(-speed, 0, 0);
                v = Vector3.Transform(v, forwardMovement);
                cameraPosition.Z += v.Z;
                cameraPosition.X += v.X;
            }
            if (Keyboard.GetState().IsKeyDown(Keys.D) && !shift)  // right
            {
                Matrix  forwardMovement = Matrix.CreateRotationY(camDirection);
                float   speed           = .1f;
                Vector3 v = new Vector3(speed, 0, 0);
                v = Vector3.Transform(v, forwardMovement);
                cameraPosition.Z += v.Z;
                cameraPosition.X += v.X;
            }
            if (Keyboard.GetState().IsKeyDown(Keys.Z))  // forward
            {
                Matrix  forwardMovement = Matrix.CreateRotationY(camDirection);
                float   speed           = .1f;
                Vector3 v = new Vector3(0, 0, -speed);
                v = Vector3.Transform(v, forwardMovement);
                cameraPosition.Z += v.Z;
                cameraPosition.X += v.X;
            }
            if (Keyboard.GetState().IsKeyDown(Keys.S))  // backward
            {
                Matrix  forwardMovement = Matrix.CreateRotationY(camDirection);
                float   speed           = .1f;
                Vector3 v = new Vector3(0, 0, speed);
                v = Vector3.Transform(v, forwardMovement);
                cameraPosition.Z += v.Z;
                cameraPosition.X += v.X;
            }

            Matrix  rotationMatrix = Matrix.CreateRotationY(camDirection);
            Vector3 forwardNormal  = rotationMatrix.Forward;

            view = Matrix.CreateLookAt(
                cameraPosition,
                cameraPosition + (forwardNormal * 10f),
                Vector3.Up
                );

            Monster1.Update(gameTime);

            base.Update(gameTime);
        }