Make Copy work for trainer teams

This commit is contained in:
Benjamin Popp
2019-11-18 21:28:55 -06:00
parent 2fea0d1ac1
commit 5db7df3472
2 changed files with 19 additions and 19 deletions

View File

@@ -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;

View File

@@ -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);
}