Ejemplo n.º 1
0
 public void Add(SceneReferenceAsset sceneReferenceAsset)
 {
     if (sceneReferenceAsset)
     {
         _sceneReferenceAssets.Add(sceneReferenceAsset);
     }
 }
Ejemplo n.º 2
0
        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;
            }
        }
Ejemplo n.º 3
0
 public void Add(string scenePath)
 {
     this.Add(SceneReferenceAsset.FindOrCreate(scenePath));
 }
Ejemplo n.º 4
0
 public bool Contains(SceneReferenceAsset sceneReferenceAsset)
 {
     return(_sceneReferenceAssets.Contains(sceneReferenceAsset));
 }
Ejemplo n.º 5
0
 public void Remove(SceneReferenceAsset sceneReferenceAsset)
 {
     _sceneReferenceAssets.RemoveAll(asset => asset == sceneReferenceAsset);
 }
Ejemplo n.º 6
0
        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);
        }