From 5db7df3472439babffcfeef2a57ddcf5d77831f7 Mon Sep 17 00:00:00 2001 From: Benjamin Popp Date: Mon, 18 Nov 2019 21:28:55 -0600 Subject: [PATCH] Make Copy work for trainer teams --- src/HexManiac.Core/Models/PokemonModel.cs | 2 +- src/HexManiac.Core/Models/Runs/ArrayRun.cs | 36 +++++++++++----------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/HexManiac.Core/Models/PokemonModel.cs b/src/HexManiac.Core/Models/PokemonModel.cs index 7b4951f5..9cc188a0 100644 --- a/src/HexManiac.Core/Models/PokemonModel.cs +++ b/src/HexManiac.Core/Models/PokemonModel.cs @@ -1117,7 +1117,7 @@ namespace HavenSoft.HexManiac.Core.Models { text.Append(PCSString.Convert(this, run.Start, run.Length) + " "); start += run.Length; length -= run.Length; - } else if (run is ArrayRun arrayRun) { + } else if (run is ITableRun arrayRun) { arrayRun.AppendTo(this, text, start, length); text.Append(" "); length -= run.Start + run.Length - start; diff --git a/src/HexManiac.Core/Models/Runs/ArrayRun.cs b/src/HexManiac.Core/Models/Runs/ArrayRun.cs index 69f43bce..e0c12dc5 100644 --- a/src/HexManiac.Core/Models/Runs/ArrayRun.cs +++ b/src/HexManiac.Core/Models/Runs/ArrayRun.cs @@ -53,6 +53,24 @@ namespace HavenSoft.HexManiac.Core.Models.Runs { throw new NotImplementedException(); } + public static void AppendTo(this ITableRun self, IDataModel data, StringBuilder text, int start, int length) { + var offsets = self.ConvertByteOffsetToArrayOffset(start); + length += offsets.SegmentOffset; + for (int i = offsets.ElementIndex; i < self.ElementCount && length > 0; i++) { + var offset = offsets.SegmentStart; + if (offsets.SegmentIndex == 0 && offsets.ElementIndex > 0) text.Append(ArrayRun.ExtendArray); + for (int j = offsets.SegmentIndex; j < self.ElementContent.Count && length > 0; j++) { + var segment = self.ElementContent[j]; + text.Append(segment.ToText(data, offset).Trim()); + text.Append(" "); + offset += segment.Length; + length -= segment.Length; + } + text.Append(Environment.NewLine); + offsets = new ArrayOffset(0, 0, offset, 0); + } + } + public static ErrorInfo NotifyChildren(this ITableRun self, IDataModel model, ModelDelta token, int elementIndex, int segmentIndex) { int offset = 0; var info = ErrorInfo.NoError; @@ -466,24 +484,6 @@ namespace HavenSoft.HexManiac.Core.Models.Runs { return Enumerable.Range(0, segments).Select(i => new HeaderRow(this, columnCount * i + startingDataIndex - Start, columnCount, startingDataIndex)).ToList(); } - public void AppendTo(IDataModel data, StringBuilder text, int start, int length) { - var offsets = this.ConvertByteOffsetToArrayOffset(start); - length += offsets.SegmentOffset; - for (int i = offsets.ElementIndex; i < ElementCount && length > 0; i++) { - var offset = offsets.SegmentStart; - if (offsets.SegmentIndex == 0 && offsets.ElementIndex > 0) text.Append(ExtendArray); - for (int j = offsets.SegmentIndex; j < ElementContent.Count && length > 0; j++) { - var segment = ElementContent[j]; - text.Append(segment.ToText(data, offset).Trim()); - text.Append(" "); - offset += segment.Length; - length -= segment.Length; - } - text.Append(Environment.NewLine); - offsets = new ArrayOffset(0, 0, offset, 0); - } - } - public ArrayRun Move(int newStart) { return new ArrayRun(owner, FormatString, LengthFromAnchor, newStart, ElementCount, ElementContent, PointerSources, PointerSourcesForInnerElements); }