protected virtual void AwakeOverride()
 {
     m_activeScene = ProjectItem.CreateScene("New Scene");
 }
Exemple #2
0
        public void LoadProject(string name, ProjectEventHandler <ProjectRoot> callback, bool metaOnly = true, params int[] exceptTypes)
        {
            HashSet <int> exceptTypesHs = null;

            if (exceptTypes != null && exceptTypes.Length > 0)
            {
                exceptTypesHs = new HashSet <int>();
                for (int i = 0; i < exceptTypes.Length; ++i)
                {
                    if (!exceptTypesHs.Contains(exceptTypes[i]))
                    {
                        exceptTypesHs.Add(exceptTypes[i]);
                    }
                }
            }

            m_storage.CheckFolderExists(name, checkFolderResult =>
            {
                bool exists = checkFolderResult.Data;
                if (exists)
                {
                    ProjectRoot root = new ProjectRoot();
                    m_storage.LoadFile(name + "." + ProjectMetaExt, loadMetaCallback =>
                    {
                        if (loadMetaCallback.Data != null)
                        {
                            root.Meta = m_serializer.Deserialize <ProjectMeta>(loadMetaCallback.Data);
                        }
                        else
                        {
                            root.Meta = new ProjectMeta();
                        }


                        m_storage.LoadFile(name + "." + ProjectDataExt, loadDataCallback =>
                        {
                            if (loadDataCallback.Data != null)
                            {
                                root.Data = m_serializer.Deserialize <ProjectData>(loadDataCallback.Data);
                            }
                            else
                            {
                                root.Data = new ProjectData();
                            }

                            root.Item = ProjectItem.CreateFolder(name);
                            LoadFolders(root.Item, loadFoldersCallback =>
                            {
                                LoadFiles(root.Item, loadFilesCallback =>
                                {
                                    if (callback != null)
                                    {
                                        callback(new ProjectPayload <ProjectRoot>(root));
                                    }
                                },
                                          metaOnly, exceptTypesHs);
                            });
                        });
                    });
                }
                else
                {
                    if (callback != null)
                    {
                        callback(new ProjectPayload <ProjectRoot>(null));
                    }
                }
            });
        }
Exemple #3
0
 public void Save(ProjectItem item, bool metaOnly, ProjectEventHandler callback)
 {
     Save(item, item.ToString(), metaOnly, callback);
 }
Exemple #4
0
        private void LoadFiles(ProjectItem item, ProjectEventHandler callback, bool metaOnly = true, HashSet <int> exceptTypesHS = null)
        {
            ProjectItem[] folders = item.Children != null?item.Children.Where(c => c.IsFolder).ToArray() : new ProjectItem[0];

            Action <ProjectEventHandler>[] loadFilesActions = new Action <ProjectEventHandler> [folders.Length];
            for (int i = 0; i < folders.Length; ++i)
            {
                ProjectItem childItem = folders[i];
                loadFilesActions[i] = cb => LoadFiles(childItem, cb, metaOnly, exceptTypesHS);
            }

            m_storage.GetFiles(item.ToString(), getFilesCompleted =>
            {
                string[] path = getFilesCompleted.Data;

                if (path == null && path.Length > 0)
                {
                    Parallel(loadFilesActions, parallelCallback =>
                    {
                        if (callback != null)
                        {
                            callback(new ProjectPayload());
                        }
                    });
                }
                else
                {
                    int metaLength;
                    if (metaOnly)
                    {
                        path       = path.Where(n => n.EndsWith("." + FileMetaExt)).ToArray();
                        metaLength = path.Length;
                    }
                    else
                    {
                        path       = path.Where(n => n.EndsWith("." + FileMetaExt)).ToArray();
                        metaLength = path.Length;
                        Array.Resize(ref path, metaLength + metaLength);
                        for (int i = 0; i < metaLength; ++i)
                        {
                            path[metaLength + i] = path[i].Remove(path[i].LastIndexOf("." + FileMetaExt));
                        }
                    }

                    if (metaLength > 0)
                    {
                        m_storage.LoadFiles(path, loadFilesCompleted =>
                        {
                            if (item.Children == null)
                            {
                                item.Children = new List <ProjectItem>();
                            }

                            for (int i = 0; i < metaLength; ++i)
                            {
                                ProjectItemMeta meta = null;
                                ProjectItemData data = null;

                                byte[] metaRaw = loadFilesCompleted.Data[i];
                                if (metaRaw != null)
                                {
                                    meta = m_serializer.Deserialize <ProjectItemMeta>(metaRaw);
                                }

                                if (!metaOnly)
                                {
                                    bool loadData = meta != null && (exceptTypesHS == null || !exceptTypesHS.Contains(meta.TypeCode));
                                    if (loadData)
                                    {
                                        byte[] dataRaw = loadFilesCompleted.Data[metaLength + i];
                                        if (dataRaw != null)
                                        {
                                            data = m_serializer.Deserialize <ProjectItemData>(dataRaw);
                                        }
                                    }
                                }

                                if (meta.TypeCode == ProjectItemTypes.Folder)
                                {
                                    ProjectItem folder = item.Children.Where(c => c.IsFolder && c.NameExt == meta.Name).FirstOrDefault();
                                    if (folder != null)
                                    {
                                        folder.Internal_Meta = meta;
                                    }
                                }
                                else
                                {
                                    ProjectItem childItem = new ProjectItem(meta, data);
                                    item.AddChild(childItem);
                                }
                            }

                            Parallel(loadFilesActions, parallelCallback =>
                            {
                                if (callback != null)
                                {
                                    callback(new ProjectPayload());
                                }
                            });
                        });
                    }
                    else
                    {
                        Parallel(loadFilesActions, parallelCallback =>
                        {
                            if (callback != null)
                            {
                                callback(new ProjectPayload());
                            }
                        });
                    }
                }
            });
        }
        private void Update()
        {
            if (InputController.GetKeyDown(AddAssetBundleKey2))
            {
                ProjectItem rootFolder = m_projectManager.Project;
                m_projectManager.AddBundledResources(rootFolder, "bundledemo",
                                                     (obj, assetName) =>
                {
                    return(true);
                },
                                                     addedItems =>
                {
                    for (int i = 0; i < addedItems.Length; ++i)
                    {
                        Debug.Log(addedItems[i].ToString() + " added");
                    }
                });
            }


            if (InputController.GetKeyDown(AddAssetBundleKey))
            {
                ProjectItem rootFolder = m_projectManager.Project;
                m_projectManager.AddBundledResource(rootFolder, "bundledemo", "monkey", addedItems =>
                {
                    for (int i = 0; i < addedItems.Length; ++i)
                    {
                        Debug.Log(addedItems[i].ToString() + " added");
                    }
                });
            }

            if (InputController.GetKeyDown(AddWithDependenciesKey))
            {
                ProjectItem        rootFolder = m_projectManager.Project;
                List <UnityObject> objects    = new List <UnityObject>();

                Material material = new Material(Shader.Find("Standard"));
                material.color = Color.yellow;

                Mesh mesh = RuntimeGraphics.CreateCubeMesh(Color.white, Vector3.zero, 1);
                mesh.name = "TestMesh";

                GameObject   go         = new GameObject();
                MeshRenderer renderer   = go.AddComponent <MeshRenderer>();
                MeshFilter   meshFilter = go.AddComponent <MeshFilter>();

                go.name = "TestGO";
                renderer.sharedMaterial = material;
                meshFilter.sharedMesh   = mesh;

                //objects.Add(material);
                //objects.Add(mesh);
                objects.Add(go);

                bool includingDependencies      = true;
                Func <UnityObject, bool> filter = o =>
                {
                    if (o is Shader)
                    {
                        return(false);
                    }
                    return(true);
                };

                m_projectManager.AddDynamicResources(rootFolder, objects.ToArray(), includingDependencies, filter, addedItems =>
                {
                    for (int i = 0; i < addedItems.Length; ++i)
                    {
                        Debug.Log(addedItems[i].ToString() + " added");
                    }

                    for (int i = 0; i < objects.Count; ++i)
                    {
                        Destroy(objects[i]);
                    }
                });
            }


            if (InputController.GetKeyDown(AddInstantiatedObjectKey))
            {
                ProjectItem        rootFolder = m_projectManager.Project;
                List <UnityObject> objects    = new List <UnityObject>();

                Material material = new Material(Shader.Find("Standard"));
                material.color = Color.yellow;

                Mesh mesh = RuntimeGraphics.CreateCubeMesh(Color.white, Vector3.zero, 1);
                mesh.name = "TestMesh";

                GameObject   go       = new GameObject();
                MeshRenderer renderer = go.AddComponent <MeshRenderer>();
                MeshFilter   filter   = go.AddComponent <MeshFilter>();

                go.name = "TestGO";
                renderer.sharedMaterial = material;
                filter.sharedMesh       = mesh;

                objects.Add(material);
                objects.Add(mesh);
                objects.Add(go);

                m_projectManager.AddDynamicResources(rootFolder, objects.ToArray(), addedItems =>
                {
                    for (int i = 0; i < addedItems.Length; ++i)
                    {
                        Debug.Log(addedItems[i].ToString() + " added");
                    }

                    for (int i = 0; i < objects.Count; ++i)
                    {
                        Destroy(objects[i]);
                    }
                });
            }

            if (InputController.GetKeyDown(AddPrefabKey))
            {
                ProjectItem        rootFolder = m_projectManager.Project;
                List <UnityObject> objects    = new List <UnityObject>();

                if (Prefab != null)
                {
                    objects.Add(Prefab);
                }

                bool includingDependencies      = true;
                Func <UnityObject, bool> filter = o =>
                {
                    if (o is Shader)
                    {
                        return(false);
                    }
                    return(true);
                };

                m_projectManager.AddDynamicResources(rootFolder, objects.ToArray(), includingDependencies, filter, addedItems =>
                {
                    for (int i = 0; i < addedItems.Length; ++i)
                    {
                        Debug.Log(addedItems[i].ToString() + " added");
                    }
                });
            }

            if (InputController.GetKeyDown(AddTextureKey))
            {
                ProjectItem        rootFolder = m_projectManager.Project;
                List <UnityObject> objects    = new List <UnityObject>();

                string    path      = Application.streamingAssetsPath + "/" + ImagePath;
                Texture2D texture2D = LoadPNG(path);
                if (texture2D == null)
                {
                    Debug.LogErrorFormat("File {0} not found", path);
                    return;
                }

                texture2D.name = "TestTexture";
                objects.Add(texture2D);

                m_projectManager.AddDynamicResources(rootFolder, objects.ToArray(), addedItems =>
                {
                    for (int i = 0; i < addedItems.Length; ++i)
                    {
                        Debug.Log(addedItems[i].ToString() + " added");
                    }
                });
            }
        }
Exemple #6
0
 public ProjectManagerEventArgs(ProjectItem item)
 {
     ProjectItems = new[] { item };
 }