private IEnumerator CoSaveAssembly(byte[] binData, ProjectAsyncOperation ao) { RuntimeBinaryAsset asmBinaryData = ScriptableObject.CreateInstance <RuntimeBinaryAsset>(); asmBinaryData.Data = binData; ProjectAsyncOperation setValueAo = m_project.SetValue(RuntimeAssemblyKey, asmBinaryData); yield return(setValueAo); if (setValueAo.HasError) { RaiseCompiled(false); ao.Error = setValueAo.Error; ao.IsCompleted = true; yield break; } LoadAssembly(binData); RuntimeTypeGuids guids = new RuntimeTypeGuids { Guids = m_typeNameToGuid.Select(kvp => new RuntimeTypeGuid { FullName = kvp.Key, Guid = kvp.Value.ToString() }).ToArray() }; m_runtimeTypeGuidsAsset.Text = XmlUtility.ToXml(guids); ProjectAsyncOperation setGuidsAo = m_project.SetValue(RuntimeTypeGuids, m_runtimeTypeGuidsAsset); yield return(setGuidsAo); if (setGuidsAo.HasError) { RaiseCompiled(false); Debug.LogError(setGuidsAo.Error); ao.Error = setGuidsAo.Error; } else { RaiseCompiled(true); ao.Error = Error.NoError; } ao.IsCompleted = true; }
private IEnumerator Start() { yield return(new WaitUntil(() => m_project.IsOpened)); yield return(new WaitWhile(() => m_editor.IsBusy)); if (Loading != null) { Loading(); } ProjectAsyncOperation <RuntimeBinaryAsset> getAssemblyAo = m_project.GetValue <RuntimeBinaryAsset>(RuntimeAssemblyKey); yield return(getAssemblyAo); if (getAssemblyAo.HasError) { if (getAssemblyAo.Error.ErrorCode != Error.E_NotFound) { Debug.LogError(getAssemblyAo.Error); } else { m_typeNameToGuid = new Dictionary <string, Guid>(); m_runtimeTypeGuidsAsset = ScriptableObject.CreateInstance <RuntimeTextAsset>(); } } else { ProjectAsyncOperation <RuntimeTextAsset> getGuidsAo = m_project.GetValue <RuntimeTextAsset>(RuntimeTypeGuids); yield return(getGuidsAo); if (getGuidsAo.HasError) { Debug.LogError(getGuidsAo.Error); } else { m_typeNameToGuid = new Dictionary <string, Guid>(); m_runtimeTypeGuidsAsset = getGuidsAo.Result; string xml = m_runtimeTypeGuidsAsset.Text; if (!string.IsNullOrEmpty(xml)) { RuntimeTypeGuids typeGuids = XmlUtility.FromXml <RuntimeTypeGuids>(xml); foreach (RuntimeTypeGuid typeGuid in typeGuids.Guids) { Guid guid; if (!m_typeNameToGuid.ContainsKey(typeGuid.FullName) && Guid.TryParse(typeGuid.Guid, out guid)) { m_typeNameToGuid.Add(typeGuid.FullName, guid); } } } LoadAssembly(getAssemblyAo.Result.Data); } } if (Loaded != null) { Loaded(); } }