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++; } }
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++; } }