Ejemplo n.º 1
0
        public IEnumerable <RenderSequenceStep> RenderFrameAnimationSequence(int sequenceIndex)
        {
            var animationSequence = Efc.FrameAnimationSequences[sequenceIndex];
            var resolution        = ResolveFrameAnimationSequence(animationSequence.Entries);

            var gfx = resolution
                      .Where(r => r.animation != null)
                      .Select(r => r.animation)
                      .Distinct()
                      .ToDictionary(a => a, a => new
            {
                Tileset = GetTileset(a.TilesetIndex),
                Palette = GetPalette(a.PaletteIndex, false)
            });

            int index = 0;

            foreach (var globalIndex in resolution)
            {
                var animation = globalIndex.animation;
                if (animation != null)
                {
                    int frameIndex = globalIndex.frameIndex;
                    var tileset    = gfx[animation].Tileset;
                    var palette    = gfx[animation].Palette;

                    var step          = animation.Steps[frameIndex];
                    var tilemapOffset = Sar.GetOffset(step.TilemapIndex);
                    var tilemap       = Reader.ReadBg(tilemapOffset);

                    yield return(new RenderSequenceStep(renderTarget =>
                    {
                        var renderer = new GraphicsRenderer(renderTarget, new RenderOptions
                        {
                            TransparentHandling = TransparentHandling.DrawSolid
                        });
                        renderer.RenderTilemap(tilemap.Tilemap, tileset, palette);
                    }, index));
                }
                index++;
            }
        }
Ejemplo n.º 2
0
        public IEnumerable <RenderSequenceStep> RenderFrameAnimation(int animationIndex, int counterBase = 0)
        {
            var animation = Efc.FrameAnimations[animationIndex];
            var tileset   = GetTileset(animation.TilesetIndex);
            var palette   = GetPalette(animation.PaletteIndex, false);

            foreach (var step in animation.Steps)
            {
                var tilemapOffset = Sar.GetOffset(step.TilemapIndex);
                var tilemap       = Reader.ReadBg(tilemapOffset);

                yield return(new RenderSequenceStep(renderTarget =>
                {
                    var renderer = new GraphicsRenderer(renderTarget, new RenderOptions
                    {
                        TransparentHandling = TransparentHandling.DrawSolid
                    });
                    renderer.RenderTilemap(tilemap.Tilemap, tileset, palette);
                }, counterBase));

                counterBase++;
            }
        }