private void CreateMaterial(string arg)
        {
            bool currentFolder = !string.IsNullOrEmpty(arg);

            ProjectItem parentFolder = currentFolder ? m_folders.FirstOrDefault() : (ProjectItem)m_listBox.SelectedItem;

            if (parentFolder == null)
            {
                return;
            }

            IUnityObjectFactory objectFactory = IOC.Resolve <IUnityObjectFactory>();
            UnityObject         unityObject   = objectFactory.CreateInstance(typeof(Material), null);

            IResourcePreviewUtility resourcePreview = IOC.Resolve <IResourcePreviewUtility>();

            byte[] preview = resourcePreview.CreatePreviewData(unityObject);
            Editor.IsBusy = true;
            m_project.Save(new[] { parentFolder }, new[] { preview }, new[] { unityObject }, null, (error, assetItems) =>
            {
                if (!currentFolder)
                {
                    if (ItemDoubleClick != null)
                    {
                        ItemDoubleClick(this, new ProjectTreeEventArgs(new[] { parentFolder }));
                    }
                }

                Editor.ActivateWindow(this);
                Destroy(unityObject);
            });
        }
Exemple #2
0
        private void CreatePrefabWithDependencies(ProjectItem dropTarget, ExposeToEditor dragObject, Action <AssetItem[]> done)
        {
            IResourcePreviewUtility previewUtility = IOC.Resolve <IResourcePreviewUtility>();

            m_project.GetDependencies(dragObject.gameObject, true, (error, deps) =>
            {
                object[] objects;
                if (!deps.Contains(dragObject.gameObject))
                {
                    objects = new object[deps.Length + 1];
                    objects[deps.Length] = dragObject.gameObject;
                    for (int i = 0; i < deps.Length; ++i)
                    {
                        objects[i] = deps[i];
                    }
                }
                else
                {
                    objects = deps;
                }

                IUnityObjectFactory uoFactory = IOC.Resolve <IUnityObjectFactory>();
                objects = objects.Where(obj => uoFactory.CanCreateInstance(obj.GetType())).ToArray();

                byte[][] previewData = new byte[objects.Length][];
                for (int i = 0; i < objects.Length; ++i)
                {
                    if (objects[i] is UnityObject)
                    {
                        previewData[i] = previewUtility.CreatePreviewData((UnityObject)objects[i]);
                    }
                }
                CreatePrefab(dropTarget, previewData, objects, done);
            });
        }
        private void CreateAsset(Type type, string defaultName, ProjectItem parentFolder)
        {
            IUnityObjectFactory objectFactory = IOC.Resolve <IUnityObjectFactory>();
            UnityObject         asset         = objectFactory.CreateInstance(type, null);

            asset.name = defaultName;

            CreateAsset(asset, parentFolder);
        }
Exemple #4
0
 protected virtual void AwakeOverride()
 {
     m_shaderUtil    = ShaderUtil;
     m_assetDB       = AssetDB;
     m_typeMap       = TypeMap;
     m_objectFactory = ObjectFactory;
     m_serializer    = Serializer;
     m_storage       = Storage;
     m_project       = Project;
 }
Exemple #5
0
        private void Awake()
        {
            m_storage = RTSL2Deps.Get.Storage;
            m_assetDB = RTSL2Deps.Get.AssetDB;
            m_typeMap = RTSL2Deps.Get.TypeMap;
            m_factory = RTSL2Deps.Get.UnityObjFactory;

            if (m_dynamicPrefabsRoot == null)
            {
                m_dynamicPrefabsRoot = transform;
            }
        }
Exemple #6
0
        private void Awake()
        {
            m_storage = IOC.Resolve <IStorage>();
            m_assetDB = IOC.Resolve <IAssetDB>();
            m_typeMap = IOC.Resolve <ITypeMap>();
            m_factory = IOC.Resolve <IUnityObjectFactory>();

            if (m_dynamicPrefabsRoot == null)
            {
                m_dynamicPrefabsRoot = transform;
            }
        }
Exemple #7
0
 protected virtual void OnDestroy()
 {
     if (this == (MonoBehaviour)Get)
     {
         Get               = null;
         m_assetDB         = null;
         m_typeMap         = null;
         m_unityObjFactory = null;
         m_serializer      = null;
         m_storage         = null;
         m_project         = null;
     }
 }
Exemple #8
0
 protected virtual void Awake()
 {
     if (Get != null)
     {
         Destroy(((MonoBehaviour)Get).gameObject);
         Debug.LogWarning("Another instance of RTSL2Deps exist");
     }
     Get               = this;
     m_assetDB         = new AssetDB();
     m_typeMap         = new TypeMap();
     m_unityObjFactory = new UnityObjectFactory();
     m_serializer      = new ProtobufSerializer();
     m_storage         = new FileSystemStorage();
     m_project         = FindObjectOfType <Project>();
 }
Exemple #9
0
        protected virtual void AwakeOverride()
        {
            if (gameObject.GetComponent <Dispatcher>() == null)
            {
                gameObject.AddComponent <Dispatcher>();
            }

            m_assetBundleLoader = AssetBundleLoader;
            m_assetDB           = AssetDB;
            m_shaderUtil        = ShaderUtil;
            m_typeMap           = TypeMap;
            m_objectFactory     = ObjectFactory;
            m_serializer        = Serializer;
            m_storage           = Storage;
            m_project           = Project;
        }
Exemple #10
0
        private void OnDestroy()
        {
            if (m_instance == this)
            {
                m_instance = null;
            }

            OnDestroyOverride();

            m_shaderUtil    = null;
            m_assetDB       = null;
            m_typeMap       = null;
            m_objectFactory = null;
            m_serializer    = null;
            m_storage       = null;
            m_project       = null;
        }
        private void Awake()
        {
            if (RTSL2Deps.Get == null)
            {
                GameObject deps = new GameObject();
                deps.name = "RTSL2Deps";
                deps.AddComponent <RTSL2Deps>();
            }

            m_storage = RTSL2Deps.Get.Storage;
            m_assetDB = RTSL2Deps.Get.AssetDB;
            m_typeMap = RTSL2Deps.Get.TypeMap;
            m_factory = RTSL2Deps.Get.UnityObjFactory;

            if (m_dynamicPrefabsRoot == null)
            {
                m_dynamicPrefabsRoot = transform;
            }
        }
        protected override object WriteToImpl(object obj)
        {
            if (Descriptors == null && Data == null)
            {
                return(obj);
            }

            if (Descriptors == null && Data != null || Data != null && Descriptors == null)
            {
                throw new ArgumentException("data is corrupted", "scene");
            }

            if (Descriptors.Length == 0)
            {
                return(obj);
            }

            if (Identifiers == null || Identifiers.Length != Data.Length)
            {
                throw new ArgumentException("data is corrupted", "scene");
            }

            Scene scene = (Scene)obj;

            GameObject[] rootGameObjects = scene.GetRootGameObjects();
            for (int i = 0; i < rootGameObjects.Length; ++i)
            {
                GameObject rootGO = rootGameObjects[i];
                if (rootGO.GetComponent <RTSLIgnore>())
                {
                    continue;
                }

                UnityObject.DestroyImmediate(rootGO);
            }

            Dictionary <int, UnityObject> idToUnityObj = new Dictionary <int, UnityObject>();

            for (int i = 0; i < Descriptors.Length; ++i)
            {
                PersistentDescriptor descriptor = Descriptors[i];
                if (descriptor != null)
                {
                    CreateGameObjectWithComponents(m_typeMap, descriptor, idToUnityObj, null);
                }
            }


            UnityObject[] assetInstances = null;
            if (AssetIdentifiers != null)
            {
                IUnityObjectFactory factory = IOC.Resolve <IUnityObjectFactory>();
                assetInstances = new UnityObject[AssetIdentifiers.Length];
                for (int i = 0; i < AssetIdentifiers.Length; ++i)
                {
                    PersistentObject asset = Assets[i];

                    Type uoType = m_typeMap.ToUnityType(asset.GetType());
                    if (uoType != null)
                    {
                        if (factory.CanCreateInstance(uoType, asset))
                        {
                            UnityObject assetInstance = factory.CreateInstance(uoType, asset);
                            if (assetInstance != null)
                            {
                                assetInstances[i] = assetInstance;
                                idToUnityObj.Add(AssetIdentifiers[i], assetInstance);
                            }
                        }
                        else
                        {
                            Debug.LogWarning("Unable to create object of type " + uoType.ToString());
                        }
                    }
                    else
                    {
                        Debug.LogWarning("Unable to resolve unity type for " + asset.GetType().FullName);
                    }
                }
            }

            m_assetDB.RegisterSceneObjects(idToUnityObj);

            if (assetInstances != null)
            {
                for (int i = 0; i < AssetIdentifiers.Length; ++i)
                {
                    UnityObject assetInstance = assetInstances[i];
                    if (assetInstance != null)
                    {
                        PersistentObject asset = Assets[i];
                        asset.WriteTo(assetInstance);
                    }
                }
            }

            RestoreDataAndResolveDependencies();
            m_assetDB.UnregisterSceneObjects();

            return(scene);
        }
        public static ProjectAsyncOperation CreatePrefab(this IProject project, string folderPath, GameObject prefab, bool includeDeps, Func <UnityObject, byte[]> createPreview = null)
        {
            ProjectAsyncOperation ao = new ProjectAsyncOperation();

            folderPath = string.Format("{0}/{1}", project.Root.Name, folderPath);
            ProjectItem folder = project.Root.Get(folderPath, true) as ProjectItem;

            if (folder is AssetItem)
            {
                throw new ArgumentException("folderPath");
            }

            if (includeDeps)
            {
                project.GetDependencies(prefab, true, (error, deps) =>
                {
                    object[] objects;
                    if (!deps.Contains(prefab))
                    {
                        objects = new object[deps.Length + 1];
                        objects[deps.Length] = prefab;
                        for (int i = 0; i < deps.Length; ++i)
                        {
                            objects[i] = deps[i];
                        }
                    }
                    else
                    {
                        objects = deps;
                    }

                    IUnityObjectFactory uoFactory = IOC.Resolve <IUnityObjectFactory>();
                    objects = objects.Where(obj => uoFactory.CanCreateInstance(obj.GetType())).ToArray();

                    byte[][] previewData = new byte[objects.Length][];
                    if (createPreview != null)
                    {
                        for (int i = 0; i < objects.Length; ++i)
                        {
                            if (objects[i] is UnityObject)
                            {
                                previewData[i] = createPreview((UnityObject)objects[i]);
                            }
                        }
                    }

                    project.Save(new[] { folder }, previewData, objects, null, (saveErr, assetItems) =>
                    {
                        ao.Error       = saveErr;
                        ao.IsCompleted = true;
                    });
                });
            }
            else
            {
                byte[][] previewData = new byte[1][];
                if (createPreview != null)
                {
                    previewData[0] = createPreview(prefab);
                }

                project.Save(new[] { folder }, previewData, new[] { prefab }, null, (saveErr, assetItems) =>
                {
                    ao.Error       = saveErr;
                    ao.IsCompleted = true;
                });
            }

            return(ao);
        }
        protected override object WriteToImpl(object obj)
        {
            ClearReferencesCache();

            Scene scene = (Scene)obj;

            if (Descriptors == null && Data == null)
            {
                DestroyGameObjects(scene);
                return(obj);
            }

            if (Descriptors == null && Data != null || Data != null && Descriptors == null)
            {
                throw new ArgumentException("data is corrupted", "scene");
            }

            if (Descriptors.Length == 0)
            {
                DestroyGameObjects(scene);
                return(obj);
            }

            if (Identifiers == null || Identifiers.Length != Data.Length)
            {
                throw new ArgumentException("data is corrupted", "scene");
            }

            DestroyGameObjects(scene);
            Dictionary <TID, UnityObject> idToUnityObj = new Dictionary <TID, UnityObject>();

            for (int i = 0; i < Descriptors.Length; ++i)
            {
                PersistentDescriptor <TID> descriptor = Descriptors[i];
                if (descriptor != null)
                {
                    CreateGameObjectWithComponents(m_typeMap, descriptor, idToUnityObj, null);
                }
            }

            UnityObject[] assetInstances = null;
            if (AssetIds != null)
            {
                IUnityObjectFactory factory = IOC.Resolve <IUnityObjectFactory>();
                assetInstances = new UnityObject[AssetIds.Length];
                for (int i = 0; i < AssetIds.Length; ++i)
                {
                    Type uoType;
                    PersistentObject <TID> asset = Assets[i];
                    if (asset is PersistentRuntimeSerializableObject <TID> )
                    {
                        PersistentRuntimeSerializableObject <TID> runtimeSerializableObject = (PersistentRuntimeSerializableObject <TID>)asset;
                        uoType = runtimeSerializableObject.ObjectType;
                    }
                    else
                    {
                        uoType = m_typeMap.ToUnityType(asset.GetType());
                    }

                    if (uoType != null)
                    {
                        if (factory.CanCreateInstance(uoType, asset))
                        {
                            UnityObject assetInstance = factory.CreateInstance(uoType, asset);
                            if (assetInstance != null)
                            {
                                assetInstances[i] = assetInstance;
                                idToUnityObj.Add(AssetIds[i], assetInstance);
                            }
                        }
                        else
                        {
                            Debug.LogWarning("Unable to create object of type " + uoType.ToString());
                        }
                    }
                    else
                    {
                        Debug.LogWarning("Unable to resolve unity type for " + asset.GetType().FullName);
                    }
                }
            }

            m_assetDB.RegisterSceneObjects(idToUnityObj);

            if (assetInstances != null)
            {
                for (int i = 0; i < assetInstances.Length; ++i)
                {
                    UnityObject assetInstance = assetInstances[i];
                    if (assetInstance != null)
                    {
                        PersistentObject <TID> asset = Assets[i];
                        asset.WriteTo(assetInstance);
                    }
                }
            }

            RestoreDataAndResolveDependencies();
            m_assetDB.UnregisterSceneObjects();

            ClearReferencesCache();

            return(scene);
        }