Exemplo n.º 1
0
        private void RenderMouseOverTiles(RenderComposer composer)
        {
            var mouseRect = new Rectangle(Engine.Renderer.Camera.ScreenToWorld(Vector2.Zero), new Vector2(1, 1))
            {
                Center = Engine.Renderer.Camera.ScreenToWorld(Engine.InputManager.MousePosition)
            };

            composer.RenderOutline(new Vector3(mouseRect.Position, 10), mouseRect.Size, Color.Magenta, 2);

            //composer.PushModelMatrix(Matrix4x4.CreateTranslation(new Vector3(-mouseRect.Position, 0)));
            composer.RenderTo(_frameBuffer);
            _drawMemory.Clear();
            quadTree.GetObjects(mouseRect, ref _drawMemory);
            for (var i = 0; i < _drawMemory.Count; i++)
            {
                var tile = _drawMemory[i];

                var a    = composer.GetBatch();
                var data = a.GetData(null);
                data[0].Vertex = tile.Vertex0.ToVec3();
                data[0].Color  = new Color(50 + i, i, 0).ToUint();

                data[1].Vertex = tile.Vertex1.ToVec3();
                data[1].Color  = new Color(i * 20, i, 0).ToUint();

                data[2].Vertex = tile.Vertex2.ToVec3();
                data[2].Color  = new Color(i * 20, i * 20, 0).ToUint();

                data[3].Vertex = tile.Vertex3.ToVec3();
                data[3].Color  = new Color(i, i * 20, 0).ToUint();
            }

            composer.PushCommand(new ExecCodeCommand()
            {
                Func = () =>
                {
                    byte[] pixels = _frameBuffer.Sample(new Rectangle(Engine.InputManager.MousePosition, Vector2.One));

                    _lastMouseX = pixels[3];
                    _lastMouseY = pixels[2];
                }
            });

            //composer.PopModelMatrix();
            composer.RenderTo(null);
        }