public void Add(SceneReferenceAsset sceneReferenceAsset) { if (sceneReferenceAsset) { _sceneReferenceAssets.Add(sceneReferenceAsset); } }
private void HandleObjectPicker(int controlID) { switch (Event.current.commandName) { case "ObjectSelectorUpdated": if (EditorGUIUtility.GetObjectPickerControlID() != controlID) { return; } var selectedScene = (SceneAsset)EditorGUIUtility.GetObjectPickerObject(); var elementProperty = _property.GetArrayElementAtIndex(_property.arraySize - 1); if (selectedScene) { elementProperty.objectReferenceValue = SceneReferenceAsset.FindOrCreate(selectedScene); } else { elementProperty.objectReferenceValue = null; } break; case "ObjectSelectorClosed": RemoveNull(_reorderableList); break; } }
public void Add(string scenePath) { this.Add(SceneReferenceAsset.FindOrCreate(scenePath)); }
public bool Contains(SceneReferenceAsset sceneReferenceAsset) { return(_sceneReferenceAssets.Contains(sceneReferenceAsset)); }
public void Remove(SceneReferenceAsset sceneReferenceAsset) { _sceneReferenceAssets.RemoveAll(asset => asset == sceneReferenceAsset); }
private ReorderableList CreateReorderableList(SerializedProperty property) { var reorderableList = new ReorderableList( this.serializedObject, property, draggable: true, displayHeader: true, displayAddButton: true, displayRemoveButton: true ); reorderableList.drawHeaderCallback += (rect) => EditorGUI.LabelField(rect, "Scenes"); reorderableList.drawElementCallback = (rect, index, isActive, isFocused) => { var elementProperty = property.GetArrayElementAtIndex(index); var sceneReferenceAsset = (SceneReferenceAsset)elementProperty.objectReferenceValue; var currentSceneAsset = sceneReferenceAsset ? sceneReferenceAsset.FindSceneAsset() : null; var objectFieldRect = new Rect( rect.x, rect.y + 1.5f, rect.width - (EditorGUIUtility.singleLineHeight + 2.0f), EditorGUIUtility.singleLineHeight ); var selectedSceneAsset = (SceneAsset)EditorGUI.ObjectField( objectFieldRect, new GUIContent(), currentSceneAsset, typeof(SceneAsset), allowSceneObjects: false ); var sceneStatusRect = new Rect( objectFieldRect.x + objectFieldRect.width + 3.0f, rect.y + 0.75f, EditorGUIUtility.singleLineHeight, EditorGUIUtility.singleLineHeight ); if (selectedSceneAsset == null) { elementProperty.objectReferenceValue = null; SceneStatusButton.Show(sceneStatusRect, false); } else if (currentSceneAsset != selectedSceneAsset) { var selectedAsset = SceneReferenceAsset.FindOrCreate(selectedSceneAsset); elementProperty.objectReferenceValue = selectedAsset; SceneStatusButton.Show(sceneStatusRect, selectedAsset.enabled); } else { SceneStatusButton.Show(sceneStatusRect, sceneReferenceAsset.enabled); } }; reorderableList.onAddCallback += (list) => { list.serializedProperty.arraySize += 1; list.serializedProperty.GetArrayElementAtIndex(list.count - 1).objectReferenceValue = null; EditorGUIUtility.ShowObjectPicker <SceneAsset>(null, false, "", _lastElementControlID); }; reorderableList.onRemoveCallback += (list) => { var count = list.serializedProperty.arraySize; list.serializedProperty.DeleteArrayElementAtIndex(list.index); if (count == list.serializedProperty.arraySize) { list.serializedProperty.DeleteArrayElementAtIndex(list.index); } }; return(reorderableList); }