partial void CustomEnd(OverlayStream stream, int finalPos, int offset) { if (stream.Complete) { return; } var startPos = stream.Position; if (!stream.TryGetGroup(out var groupMeta)) { return; } if (groupMeta.GroupType != (int)GroupTypeEnum.TopicChildren) { return; } this._grupData = stream.ReadMemory(checked ((int)groupMeta.TotalLength)); var formKey = FormKey.Factory(_package.MetaData.MasterReferences !, BinaryPrimitives.ReadUInt32LittleEndian(groupMeta.ContainedRecordTypeData)); if (formKey != this.FormKey) { throw new ArgumentException("Dialog children group did not match the FormID of the parent."); } var contentSpan = this._grupData.Value.Slice(_package.MetaData.Constants.GroupConstants.HeaderLength); this.Items = BinaryOverlayList.FactoryByArray <IDialogItemGetter>( contentSpan, _package, getter: (s, p) => DialogItemBinaryOverlay.DialogItemFactory(new OverlayStream(s, p), p), locs: ParseRecordLocations( stream: new OverlayStream(contentSpan, _package), trigger: DialogItem_Registration.TriggeringRecordType, constants: GameConstants.Oblivion.MajorConstants, skipHeader: false)); }
partial void ItemsCustomParse(OverlayStream stream, long finalPos, int offset, RecordType type, int?lastParsed) { this.Items = BinaryOverlayList.FactoryByArray <CellBinaryOverlay>( mem: stream.RemainingMemory, package: _package, recordTypeConverter: null, getter: (s, p, recConv) => CellBinaryOverlay.CellFactory(new OverlayStream(s, p), p, insideWorldspace: true), locs: CellBinaryOverlay.ParseRecordLocations( stream: stream, package: _package)); }
partial void CellsCustomParse(OverlayStream stream, long finalPos, int offset, RecordType type, PreviousParse lastParsed) { this.Cells = BinaryOverlayList.FactoryByArray <CellBinaryOverlay>( mem: stream.RemainingMemory, package: _package, parseParams: null, getter: (s, p, recConv) => CellBinaryOverlay.CellFactory(new OverlayStream(s, p), p, recConv), locs: CellBinaryOverlay.ParseRecordLocations( stream: stream, package: _package)); }
public static IReadOnlyList <ConditionBinaryOverlay> ConstructBinayOverlayList(OverlayStream stream, BinaryOverlayFactoryPackage package) { var span = stream.RemainingMemory; var pos = stream.Position; var recordLocs = ParseRecordLocations( stream: stream, finalPos: long.MaxValue, constants: package.MetaData.Constants.SubConstants, trigger: RecordTypes.CTDA, includeTriggers: IncludeTriggers, skipHeader: false); span = span.Slice(0, stream.Position - pos); return(BinaryOverlayList.FactoryByArray <ConditionBinaryOverlay>( mem: span, package: package, getter: (s, p) => ConditionBinaryOverlay.ConditionFactory(new OverlayStream(s, p), p), locs: recordLocs)); }
partial void CustomNavmeshSetsEndPos() { var count = BinaryPrimitives.ReadInt32LittleEndian(this._data); int[] locs = new int[count]; var span = this._data.Slice(4); int loc = 0; for (int i = 0; i < count; i++) { var subCount = BinaryPrimitives.ReadInt32LittleEndian(span); var len = 4 + subCount * 4; span = span.Slice(len); locs[i] = loc; loc += len; } this.NavmeshSets = BinaryOverlayList.FactoryByArray <INavmeshSetGetter>( this._data.Slice(4), this._package, (s, p) => NavmeshSetBinaryOverlay.NavmeshSetFactory(s, p), locs); this.NavmeshSetsEndingPos = 4 + loc; }