public void Write(BinaryWriter writer, ModSaveInfo info) { long start = writer.BaseStream.Position; writer.Write(0L); IsCustomModel = info.BelongsToMe(data); DataIdentifier.Write(writer, dataID); writer.Write(IsCustomModel); switch (dataID.Type) { case IdentifierType.ACTOR: WriteData <CustomActorData>(writer, info); break; case IdentifierType.GADGET: WriteData <CustomGadgetData>(writer, info); break; default: throw new NotImplementedException(); } long current = writer.BaseStream.Position; writer.BaseStream.Seek(start, SeekOrigin.Begin); dataLength = current - start; writer.Write(dataLength); writer.BaseStream.Seek(current, SeekOrigin.Begin); }
public void Read(BinaryReader reader, ModSaveInfo info) { dataLength = reader.ReadInt64(); dataID = DataIdentifier.Read(reader); IsCustomModel = reader.ReadBoolean(); switch (dataID.Type) { case IdentifierType.ACTOR: ReadData <CustomActorData, VanillaActorData>(reader, info); break; case IdentifierType.GADGET: ReadData <CustomGadgetData, VanillaGadgetData>(reader, info); break; case IdentifierType.LANDPLOT: ReadData <CustomLandPlotData, VanillaPlotData>(reader, info); break; case IdentifierType.GORDO: ReadData <GordoV01>(reader); break; case IdentifierType.TREASUREPOD: ReadData <TreasurePodV01>(reader); break; case IdentifierType.EXCHANGEOFFER: ReadData <ExchangeOfferV04>(reader); break; default: throw new NotImplementedException(); } }
void WriteData <T>(BinaryWriter writer, ModSaveInfo info) where T : PersistedDataSet, IDataRegistryMember { if (!IsCustomModel) { data.Write(writer.BaseStream); } else { writer.Write(info.GetRegistryFor <T>().GetIDForModel((data as IDataRegistryMember).GetModelType())); data.Write(writer.BaseStream); } }
void ReadData <T, V>(BinaryReader reader, ModSaveInfo info) where T : V, IDataRegistryMember where V : PersistedDataSet, new() { if (!IsCustomModel) { data = new V(); data.Load(reader.BaseStream); } else { var actorId = reader.ReadInt32(); data = info.GetRegistryFor <T>().GetDataForID(actorId); data.Load(reader.BaseStream); } }
public void Read(BinaryReader reader, ModSaveInfo info) { dataLength = reader.ReadInt64(); dataID = DataIdentifier.Read(reader); IsCustomModel = reader.ReadBoolean(); switch (dataID.Type) { case IdentifierType.ACTOR: ReadData <CustomActorData, VanillaActorData>(reader, info); break; case IdentifierType.GADGET: ReadData <CustomGadgetData, VanillaGadgetData>(reader, info); break; default: throw new NotImplementedException(); } }