/// <summary> /// Reads from a DarkRift reader and updates the given instance (which has to implement ISync) and as tag it uses the parameter tag /// </summary> /// <param name="sync"></param> /// <param name="reader"></param> /// <param name="tag"></param> public static void ReadSerializableSmart(this ISync sync, DarkRiftReader reader, int tag) { ExtraSyncData _extraSyncData = (ExtraSyncData)reader.ReadByte(); int _typeID; int _tag; switch (_extraSyncData) { case ExtraSyncData.Nothing: sync.DeserializeOptional(reader, tag); break; case ExtraSyncData.TypeID: _typeID = reader.ReadInt32(); sync.DeserializeOptional(reader, tag); break; case ExtraSyncData.Tag: _tag = reader.ReadInt32(); sync.DeserializeOptional(reader, tag); break; case ExtraSyncData.TypeIDANDTag: _typeID = reader.ReadInt32(); _tag = reader.ReadInt32(); sync.DeserializeOptional(reader, tag); break; } }
/// <summary> /// Reads from a DarkRift reader and creates a new instance of the type written in the buffer (which has to implement ISync) and as tag it uses the parameter tag /// </summary> /// <param name="reader">The DarkRift reader to read from</param> /// <param name="tag">The tag to use in DeserializeOptional</param> /// <returns></returns> public static ISync ReadSerializableSmart(this DarkRiftReader reader, int tag) { ExtraSyncData _extraSyncData = (ExtraSyncData)reader.ReadByte(); ISync _syncObject = default; int _typeID; int _tag; switch (_extraSyncData) { case ExtraSyncData.Nothing: Console.WriteLine("No TypeID provided!"); break; case ExtraSyncData.TypeID: _typeID = reader.ReadInt32(); _syncObject = (ISync)Activator.CreateInstance(MLAPI.SyncTypes[_typeID]); _syncObject.DeserializeOptional(reader, tag); break; case ExtraSyncData.Tag: Console.WriteLine("No TypeID provided!"); break; case ExtraSyncData.TypeIDANDTag: _typeID = reader.ReadInt32(); _tag = reader.ReadInt32(); _syncObject = (ISync)Activator.CreateInstance(MLAPI.SyncTypes[_typeID]); _syncObject.DeserializeOptional(reader, tag); break; } return(_syncObject); }