public void Draw(gfx.Shader shader)
 {
     shader.Bind();
     texture.Bind(0);
     quad.Bind();
     shader.LoadVector2(Position, "translation");
     GL.DrawArrays(PrimitiveType.TriangleFan, 0, quad.VertexCount);
     quad.Unbind();
     texture.Unbind(0);
     shader.Unbind();
 }
Пример #2
0
        public void Draw(gfx.Shader shader)
        {
            Vector2 min_uv = new Vector2(offset * CurrentFrame, 0.0f);
            Vector2 max_uv = new Vector2(offset * CurrentFrame + offset, 1.0f);

            shader.LoadVector2(max_uv, "max_uv");
            shader.LoadVector2(min_uv, "min_uv");

            shader.LoadFloat(scale, "scale");

            texture.Bind(0);

            vbo.Bind();
            GL.DrawArrays(PrimitiveType.TriangleFan, 0, vbo.VertexCount);
            vbo.Unbind();

            texture.Unbind(0);
        }
Пример #3
0
        public void DrawMap(gfx.Shader shader)
        {
            shader.Bind();

            vbo.Bind();

            mapTexture.Bind(0);
            GL.DrawArrays(PrimitiveType.TriangleFan, 0, vbo.VertexCount);
            mapTexture.Unbind(0);

            GL.BlendFunc(BlendingFactorSrc.One, BlendingFactorDest.One);

            glowmapTexture.Bind(0);
            GL.DrawArrays(PrimitiveType.TriangleFan, 0, vbo.VertexCount);
            glowmapTexture.Unbind(0);

            GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);

            vbo.Unbind();
            shader.Unbind();
        }
Пример #4
0
        private void statePlaying(float dt)
        {
            float lastTug = playerHP;

            if (player.Acceleration < 170.0f)
            {
                player.Acceleration += dt * 0.5f;
                enemy.Acceleration   = player.Acceleration * 0.4f;
            }

            arena.Update(dt);
            player.Update(dt, keyboard, arena);
            enemy.Update(dt, player.Position, player.State, arena);
            chainRenderer.Update(dt, playerHP);

            if (player.IsDead)
            {
                gameState = GameState.Menu;
            }
            if (enemy.IsDead)
            {
                gameState = GameState.Menu;
            }

            bloodyScreenTime -= dt;
            if ((playerHP - lastTug) > 0.0f)
            {
                bloodyScreenColor = new Vector3(0.25f, 0.25f, 0.0f);
                bloodyScreenTime  = 0.125f;
            }
            else if (playerHP - lastTug < 0.0f)
            {
                bloodyScreenColor = new Vector3(0.25f, 0.0f, 0.0f);
                bloodyScreenTime  = 0.125f;
            }
            else if (bloodyScreenTime <= 0.0f)
            {
                bloodyScreenColor = new Vector3(0.0f, 0.0f, 0.0f);
            }

            offscreen.Clear();

            shdBackground.Bind();
            shdBackground.LoadVector2(new Vector2(Width, Height), "resolution");
            shdBackground.LoadFloat((float)Math.Pow(timeAcc, 1.2), "time");
            screenQuad.Bind();
            GL.DrawArrays(PrimitiveType.TriangleFan, 0, screenQuad.VertexCount);
            screenQuad.Unbind();
            shdBackground.Unbind();

            shdFloor.LoadVector2(player.Position, "camera");
            arena.DrawMap(shdFloor);

            shdTexture.LoadVector2(player.Position, "camera");
            arena.DrawTraps(shdTexture);
            player.Draw(shdTexture);
            enemy.Draw(shdTexture);

            GL.BlendFunc(BlendingFactorSrc.One, BlendingFactorDest.One);
            shdBloodyScreen.Bind();
            shdBloodyScreen.LoadVector3(bloodyScreenColor, "screenColor");
            screenQuad.Bind();
            if (enemy.Clawed)
            {
                texScratch.Bind(0);
            }
            GL.DrawArrays(PrimitiveType.TriangleFan, 0, screenQuad.VertexCount);
            if (enemy.Clawed)
            {
                texScratch.Unbind(0);
            }
            screenQuad.Unbind();
            shdBloodyScreen.Unbind();
            GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);

            chainRenderer.Draw(shdUserInterface);

            offscreen.BindToTexture(1);

            gfx.RenderTarget.Backbuffer.Clear();

            shdFinalpass.Bind();
            shdFinalpass.SetSamplerUnit(1, "sceneFramebuffer");
            shdFinalpass.LoadVector4(Vector4.One, "ambientLight");

            screenQuad.Bind();
            GL.DrawArrays(PrimitiveType.TriangleFan, 0, screenQuad.VertexCount);
            screenQuad.Unbind();

            shdFinalpass.Unbind();
        }