示例#1
0
        private void LoadLangs(DirectoryInfo dir)
        {
            ComponentFolder lf = new ComponentFolder()
            {
                Root = Root, Directory = dir
            };

            lf.Scan(dir);

            Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
            {
                Folders.Add(lf);
            }));
        }
        /*
         * Read component folder from JSON entry.
         */
        private static void ReadComponentFolder(ComponentFolder cf, JSONNode node)
        {
            cf.name     = cf.id;
            cf.realName = node["name"];

            JSONArray idxArray = node["children"].AsArray;

            if (idxArray.Count == 0)
            {
                return;
            }

            cf.childIds = new int[idxArray.Count];

            for (int i = 0; i < idxArray.Count; i++)
            {
                cf.childIds[i] = idxArray[i].AsInt;
            }
        }
        /*
         * Read components from given JSON Class.
         */
        private static void ReadComponents(Project project, JSONClass componentRoot, string projectPath)
        {
            string componentPath = "Assets" + projectResourceFolder + "Components/";

            List <IComponentEntry> entries = new List <IComponentEntry>();

            IEnumerator children = componentRoot.GetEnumerator();

            while (children.MoveNext())
            {
                // Get current
                KeyValuePair <string, JSONNode> current = (children.Current != null) ?
                                                          (KeyValuePair <string, JSONNode>)children.Current : default(KeyValuePair <string, JSONNode>);
                JSONNode child = current.Value;

                // Get its ID
                string id       = current.Key;
                bool   isFolder = child["children"] != null;

                if (isFolder)
                {
                    ComponentFolder folder = ScriptableObject.CreateInstance <ComponentFolder>();
                    folder.id = id;
                    ReadComponentFolder(folder, child);
                    entries.Add(folder);
                    AssetDatabase.CreateAsset(folder, componentPath + folder.id + ".asset");
                }
                else
                {
                    // Async operation because it might load images
                    Component component = ScriptableObject.CreateInstance <Component>();
                    component.id = id;
                    ReadComponent(project, component, child, projectPath);
                    entries.Add(component);
                    AssetDatabase.CreateAsset(component, componentPath + component.id + ".asset");
                }
            }

            project.components = entries.ToArray();
        }