/// <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); }
/// <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); }