protected virtual void OnLoaded(GameObject model, VRMMetaObject meta = null) { Debug.Log(model + "has been loaded"); OnModelLoaded?.Invoke(model); if (meta != null) { OnMetaDataLoaded?.Invoke(meta); } }
private static async Task <Element> DeserializeAsync(Stream stream, CancellationToken cancellationToken) { Element root = new Element(); Element parent = root; Element node = root; while (stream.Position < stream.Length) { byte controlByte = (byte)stream.ReadByte(); switch (controlByte & (byte)Directions.Mask) { case (byte)Directions.New: node = AddNewNode(parent); break; case (byte)Directions.Down: parent = node; node = AddNewNode(parent); break; case (byte)Directions.Up: parent = parent.Parent; node = AddNewNode(parent); break; case (byte)Directions.Append: break; } int chunkSize = GetChunkSize(controlByte); if (((controlByte & (byte)Directions.Mask) == (byte)Directions.Append) && (chunkSize == 0)) { break; } byte[] buffer = new byte[chunkSize]; await stream.ReadAsync(buffer, 0, chunkSize, cancellationToken).ConfigureAwait(false); if (IsDataChunk(controlByte)) { if (node != null && chunkSize > 0) { if (node.Data == null) { node.Data = new MemoryStream(); } #region Fireing event OnDataLoading?.Invoke(node, new PromptuariumLoadingEventArgs()); #endregion await node.Data.WriteAsync(buffer, 0, chunkSize, cancellationToken).ConfigureAwait(false); #region Fireing event OnDataLoaded?.Invoke(node, new PromptuariumLoadedEventArgs()); #endregion } } else { if (node != null && chunkSize > 0) { if (node.MetaData == null) { node.MetaData = new MemoryStream(); } #region Fireing event OnMetaDataLoading?.Invoke(node, new PromptuariumLoadingEventArgs()); #endregion await node.MetaData.WriteAsync(buffer, 0, chunkSize, cancellationToken).ConfigureAwait(false); #region Fireing event OnMetaDataLoaded?.Invoke(node, new PromptuariumLoadedEventArgs()); #endregion } } } PurgeEmptyNodes(root); if (root.children.Count > 0) { return(root.children[0]); } else { return(new Element()); } }