Exemplo n.º 1
0
        public override void Draw()
        {
            Framebuffer originalFramebuffer = Framebuffer.Current;

            Surface.Bind();
            Graphics.Clear(Colour.Black);

            // Shadow Casters
            Vector2 caster = CKGLTest2D.Player.Position.Floor();
            //Vector2 caster = Input.Mouse.Position.World.round();
            //Vector2 caster = Vector2.Zero;

            // Falloff Shadow
            BlendState originalBlendState = BlendState.Current;

            BlendState.Subtractive.Set();
            Renderer.Draw.Circle(caster, CKGLTest2D.Camera.Height * 2f, Colour.White, Colour.White.Alpha(0), 32);
            originalBlendState.Set();

            //Renderer.SetBlendState(nsBlendState.Subtractive);
            foreach (Box box in Scene.Entities.FindAll <Box>())
            {
                var block_l = box.X - box.Origin.X;
                var block_r = box.X - box.Origin.X + box.Size.X;
                var block_t = box.Y - box.Origin.Y;
                var block_b = box.Y - box.Origin.Y + box.Size.Y;

                if (caster.Y > block_t)
                {
                    DrawShadow(new Vector2(block_l, block_t), new Vector2(block_r, block_t), caster, 700);
                }
                if (caster.Y < block_b)
                {
                    DrawShadow(new Vector2(block_l, block_b), new Vector2(block_r, block_b), caster, 700);
                }
                if (caster.X > block_l)
                {
                    DrawShadow(new Vector2(block_l, block_t), new Vector2(block_l, block_b), caster, 700);
                }
                if (caster.X < block_r)
                {
                    DrawShadow(new Vector2(block_r, block_t), new Vector2(block_r, block_b), caster, 700);
                }
            }
            originalFramebuffer.Bind();
            //Graphics.State.SetBlendState(BlendState.Additive);
            Renderer.Draw.Framebuffer(Surface, TextureAttachment.Colour0, CKGLTest2D.Camera.Position.X, CKGLTest2D.Camera.Position.Y, Colour.White);
            //Renderer.ResetBlendState();
        }