Ejemplo n.º 1
0
        public void EndDrawSprites(_2DSpriteGroup sprites, List <_2DDrawGroup> cache, bool outputDepth)
        {
            var effect = Effect;

            // draw all spritelists one by one.
            if (outputDepth)
            {
                var spritesWithNoDepth = sprites.Sprites[_2DBatchRenderMode.NO_DEPTH];
                RenderSpriteList(spritesWithNoDepth, effect, effect.Techniques["drawSimple"], cache);

                var spritesWithDepth = sprites.Sprites[_2DBatchRenderMode.Z_BUFFER];
                RenderSpriteList(spritesWithDepth, effect, effect.Techniques["drawZSpriteDepthChannel"], cache);

                var floors = sprites.Sprites[_2DBatchRenderMode.FLOOR];
                effect.Parameters["drawingFloor"].SetValue(true);
                RenderSpriteList(floors, effect, effect.Techniques["drawZSpriteDepthChannel"], cache);
                effect.Parameters["drawingFloor"].SetValue(false);

                var walls = sprites.Sprites[_2DBatchRenderMode.WALL];
                RenderSpriteList(walls, effect, effect.Techniques["drawZWallDepthChannel"], cache);

                var spritesWithRestoreDepth = sprites.Sprites[_2DBatchRenderMode.RESTORE_DEPTH];
                RenderSpriteList(spritesWithRestoreDepth, effect, effect.Techniques["drawSimpleRestoreDepth"], cache);
            }
            else
            {
                /**
                 * Render the no depth items first
                 */
                var spritesWithNoDepth = sprites.Sprites[_2DBatchRenderMode.NO_DEPTH];
                RenderSpriteList(spritesWithNoDepth, effect, effect.Techniques[(OBJIDMode) ? "drawSimpleID" : "drawSimple"], cache); //todo: no depth sprites have fixed depth relative to their position
                //the flies object and sim balloons/skill gauges/relationship plusses use this mode

                var spritesWithDepth = sprites.Sprites[_2DBatchRenderMode.Z_BUFFER];
                RenderSpriteList(spritesWithDepth, effect, effect.Techniques[(OBJIDMode) ? "drawZSpriteOBJID" : "drawZSprite"], cache);

                var floors = sprites.Sprites[_2DBatchRenderMode.FLOOR];
                effect.Parameters["drawingFloor"].SetValue(true);
                RenderSpriteList(floors, effect, effect.Techniques["drawZSpriteDepthChannel"], cache);
                effect.Parameters["drawingFloor"].SetValue(false);

                var walls = sprites.Sprites[_2DBatchRenderMode.WALL];
                RenderSpriteList(walls, effect, effect.Techniques[(OBJIDMode) ? "drawZSpriteOBJID" : "drawZWall"], cache);

                var spritesWithRestoreDepth = sprites.Sprites[_2DBatchRenderMode.RESTORE_DEPTH];
                RenderSpriteList(spritesWithRestoreDepth, effect, effect.Techniques["drawSimpleRestoreDepth"], cache);
            }
        }