コード例 #1
0
ファイル: TerrainTest.cs プロジェクト: jwvdiermen/LD28
        public void Update(GameTime gameTime, bool isActive, bool isOverlayed)
        {
            _world.Update(gameTime, _camera);

            #region Camera
            // Move the camera.
            var dt            = (float)gameTime.ElapsedGameTime.TotalSeconds;
            var keyboardState = Keyboard.GetState();

            if (keyboardState.IsKeyDown(Keys.A))
            {
                _cameraNode.Move(new Vector3(-50.0f * dt, 0.0f, 0.0f));
            }
            if (keyboardState.IsKeyDown(Keys.D))
            {
                _cameraNode.Move(new Vector3(50.0f * dt, 0.0f, 0.0f));
            }
            if (keyboardState.IsKeyDown(Keys.S))
            {
                _cameraNode.Move(new Vector3(0.0f, 50.0f * dt, 0.0f));
            }
            if (keyboardState.IsKeyDown(Keys.W))
            {
                _cameraNode.Move(new Vector3(0.0f, -50.0f * dt, 0.0f));
            }

            if (keyboardState.IsKeyDown(Keys.E))
            {
                _cameraNode.Scale += Vector3.One * 1.0f * dt;
            }
            if (keyboardState.IsKeyDown(Keys.Q))
            {
                var scale = _cameraNode.Scale;

                scale -= Vector3.One * 1.0f * dt;
                if (scale.X < 0.0f)
                {
                    scale.X = 0.0f;
                }
                if (scale.Y < 0.0f)
                {
                    scale.Y = 0.0f;
                }

                _cameraNode.Scale = scale;
            }
            #endregion

            #region Circle brush

            var mouseState = Mouse.GetState();

            // Translate the mouse position to the scene.
            var mousePosition = new Vector3(mouseState.X, mouseState.Y, 0.0f);

            Matrix projectionMatrix, viewMatrix;
            _camera.GetMatrices(out projectionMatrix, out viewMatrix);

            mousePosition = _camera.Viewport.Unproject(mousePosition, projectionMatrix, viewMatrix, Matrix.Identity);

            // Position the brush.
            _circleBrushNode.Position = new Vector3(mousePosition.X, mousePosition.Y, 0.0f);

            // Handle mouse click.
            // Remove quads by setting their state to disabled using the left mouse button.
            if (mouseState.LeftButton == ButtonState.Pressed && _oldMouseState.LeftButton == ButtonState.Released)
            {
                _circleBrushNode.FindMovable <CircleRenderable>().Color = new Vector3(1.0f, 0.0f, 0.0f);
            }
            else if (mouseState.LeftButton == ButtonState.Pressed && _oldMouseState.LeftButton == ButtonState.Pressed)
            {
                var position = _circleBrushNode.Position;
                _circleBrush.Position = new Vector2(position.X, position.Y);
                _terrain.SetQuads(_circleBrush, false);
            }
            else if (mouseState.LeftButton == ButtonState.Released && _oldMouseState.LeftButton == ButtonState.Pressed)
            {
                _circleBrushNode.FindMovable <CircleRenderable>().Color = Vector3.One;
            }

            // Add quads by setting their state to enabled using the right mouse button.
            if (mouseState.RightButton == ButtonState.Pressed && _oldMouseState.RightButton == ButtonState.Released)
            {
                _circleBrushNode.FindMovable <CircleRenderable>().Color = new Vector3(0.0f, 1.0f, 0.0f);
            }
            else if (mouseState.RightButton == ButtonState.Pressed && _oldMouseState.RightButton == ButtonState.Pressed)
            {
                var position = _circleBrushNode.Position;
                _circleBrush.Position = new Vector2(position.X, position.Y);
                _terrain.SetQuads(_circleBrush, true);
            }
            else if (mouseState.RightButton == ButtonState.Released && _oldMouseState.RightButton == ButtonState.Pressed)
            {
                _circleBrushNode.FindMovable <CircleRenderable>().Color = Vector3.One;
            }

            // Store old mouse state.
            _oldMouseState = mouseState;

            #endregion
        }