public MonoBehaviourEditor(MonoBehaviour parser) { Parser = parser; using (Stream stream = new MemoryStream()) { Parser.WriteTo(stream); backupMB = new MonoBehaviour(Parser.file, Parser.classID1); stream.Position = 0; backupMB.LoadFrom(stream); backupMB.file.Components.Remove(backupMB); if (backupMB.Parser == null) { MonoScript monoScript; AssetCabinet.GetExternalMBTypeDefinition(Parser, true, out monoScript); backupMB = null; Parser = null; throw new Exception("Parser construction failed - see message above."); } stream.Position = 0; Parser.m_MonoScript.instance.WriteTo(stream); backupMS = new MonoScript(Parser.m_MonoScript.instance.file); stream.Position = 0; backupMS.LoadFrom(stream); backupMS.file.Components.Remove(backupMS); } }
public void LoadFrom(Stream stream) { AssetCabinet.TypeDefinition oldDef = null; try { AssetCabinet.TypeDefinition typeDef; if (file.Parser.ExtendedSignature == null) { MonoScript monoScript; typeDef = AssetCabinet.GetExternalMBTypeDefinition(this, false, out monoScript); if (typeDef == null) { return; } oldDef = file.Types[(int)classID1]; file.Types[(int)classID1] = typeDef; } else { typeDef = AssetCabinet.GetInternalMBTypeDefinition(file, classID1); } Parser = new TypeParser(file, typeDef); Parser.type.LoadFrom(stream); } finally { if (oldDef != null) { file.Types[(int)classID1] = oldDef; } } }