Beispiel #1
0
        /// <summary>
        /// Create a new Entity of a given type in the active DataSet.
        /// </summary>
        /// <param name="entityType">Type of the Entity to add.</param>
        public Data AddEntity(Type entityType, GenerateEntityNameDelegate generateName = null)
        {
            var instance = Activator.CreateInstance(entityType) as Data;

            if (generateName == null)
            {
                instance.Name = GenerateNameForType(entityType, this.activeDataSet);
            }
            else
            {
                uint index        = 0;
                var  instanceName = generateName(index);
                while (this.activeDataSet.GetDataList().ContainsKey(instanceName))
                {
                    index++;
                    instanceName = generateName(index);
                }

                instance.Name = generateName(index);
            }

            var state = SingletonScriptableObject <DataListWindowState> .Instance;

            instance.DataSetGuid = state.ActiveDataSetGuid;

            this.activeDataSet.AddData(instance.Name, instance);

            // FIXME terrible hack
            DataSet.CreateSceneProxyForEntityDelegate createSceneProxy = entityName => state.CreateSceneProxyForEntity(this.activeDataSet.DataSetGuid, entityName);

            Entity.GetSceneProxyDelegate getSceneProxy = entityName => state.FindSceneProxyForEntity(
                this.activeDataSet.DataSetGuid,
                entityName);

            instance.OnLoaded(() => createSceneProxy(instance.Name));
            instance.PostOnLoaded(getSceneProxy);

            // TODO
            // There must be a better way of doing this
            this.treeView = new DataListTreeView(
                this.treeViewState,
                this.openDataSetGuids,
                this.activeDataSet,
                state.FindSceneProxyForEntity);
            this.treeView.Reload();

            return(instance);
        }
Beispiel #2
0
        /// <summary>
        /// Opens a DataSet in the Data List Window.
        /// </summary>
        /// <param name="dataSet">
        /// The DataSet to open.
        /// </param>
        public DataSet OpenDataSet(string dataSetGuid)
        {
            Assert.IsFalse(string.IsNullOrEmpty(dataSetGuid));

            // Ignore any models already in the scene when the first DataSet is opened.
            if (this.openDataSetGuids.Count == 0)
            {
                var allModelsInScene = GameObject.FindObjectsOfType <FoxModel>();
                foreach (var model in allModelsInScene)
                {
                    SingletonScriptableObject <DataListWindowState> .Instance.IgnoreModel(model);
                }
            }

            var dataSet = AssetDatabase.LoadAssetAtPath <EntityFileAsset>(AssetDatabase.GUIDToAssetPath(dataSetGuid)).GetDataSet();

            Assert.IsNotNull(dataSet);

            this.activeDataSet = dataSet;
            SingletonScriptableObject <DataListWindowState> .Instance.ActiveDataSetGuid = dataSetGuid;
            this.treeView.SetActiveDataSet(dataSet);
            this.treeView.SelectDataSet(dataSet);

            if (this.openDataSetGuids.Contains(dataSetGuid))
            {
                return(dataSet);
            }

            var state = SingletonScriptableObject <DataListWindowState> .Instance;

            DataSet.CreateSceneProxyForEntityDelegate createSceneProxy = entityName => state.CreateSceneProxyForEntity(dataSetGuid, entityName);

            Entity.GetSceneProxyDelegate getSceneProxy = entityName => state.FindSceneProxyForEntity(
                dataSetGuid,
                entityName);

            dataSet.LoadAllEntities(createSceneProxy, getSceneProxy);

            this.openDataSetGuids.Add(dataSetGuid);
            this.treeView.Reload();
            return(dataSet);
        }