Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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();
            }
        }