Exemplo n.º 1
0
        public int[,] GetSprite(string fieldName)
        {
            var elementOffset = table.ElementContent.Until(segment => segment.Name == fieldName).Sum(segment => segment.Length);
            var valueAddress  = table.Start + table.ElementLength * arrayIndex + elementOffset;
            var seg           = table.ElementContent.Single(segment => segment.Name == fieldName);

            if (seg is ArrayRunPointerSegment pointerSeg)
            {
                var destination = model.ReadPointer(valueAddress);
                if (model.GetNextRun(destination) is not ISpriteRun spriteRun)
                {
                    IFormattedRun tempRun = new NoInfoRun(destination, new SortedSpan <int>(valueAddress));
                    model.FormatRunFactory.GetStrategy(pointerSeg.InnerFormat).TryParseData(model, string.Empty, destination, ref tempRun);
                    spriteRun = tempRun as ISpriteRun;
                    if (spriteRun == null)
                    {
                        return(null);
                    }
                }
                return(spriteRun.GetPixels(model, 0));
            }
            else
            {
                throw new NotImplementedException();
            }
        }
Exemplo n.º 2
0
        public override void UpdateNewRunFromPointerFormat(IDataModel model, ModelDelta token, string name, IReadOnlyList <ArrayRunElementSegment> sourceSegments, int parentIndex, ref IFormattedRun run)
        {
            run = new OverworldSpriteListRun(model, sourceSegments, Hint, parentIndex, run.Start, run.PointerSources);

            // backup: we may get asked to make a pointer format even when it's not an overworld sprite list.
            // if that happens, fall back to a NoInfoRun.
            if (run.Length == 0)
            {
                run = new NoInfoRun(run.Start, run.PointerSources);
            }
        }
Exemplo n.º 3
0
 public override bool TryAddFormatAtDestination(IDataModel owner, ModelDelta token, int source, int destination, string name, IReadOnlyList <ArrayRunElementSegment> sourceSegments, int parentIndex)
 {
     IFormattedRun run    = new NoInfoRun(destination, SortedSpan.One(source));
     var           result = TryParseData(owner, default, default, ref run);