mirror of
https://github.com/haven1433/HexManiacAdvance.git
synced 2026-10-26 16:30:06 -05:00
Make Copy work for trainer teams
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user