Beispiel #1
0
        public int GetConfigIndex(SceneConfig thisEntry)
        {
            var index = -1;

            if (sceneConfig == null)
            {
                return(index);
            }

            if (thisEntry == null)
            {
                return(index);
            }

            if (!sceneConfig.config.Contains(thisEntry))
            {
                return(index);
            }

            for (var i = 0; i < sceneConfig.config.Count; i++)
            {
                if (sceneConfig.config[i] == thisEntry)
                {
                    index = i;
                }
            }

            return(index);
        }
Beispiel #2
0
 /// <summary>
 /// Load a specific scene config
 /// </summary>
 public void LoadSceneConfig(SceneConfig config, bool unloadExisting)
 {
     for (int i = 0; i < config.sceneList.Count; i++)
     {
         if (i == 0)
         {
             // if we need to unload existing, then load the first in single mode, otherwise everything is additive
             LoadScene(config.sceneList[i], !unloadExisting);
         }
         else
         {
             // and the rest additive
             LoadScene(config.sceneList[i], true);
         }
     }
 }
Beispiel #3
0
        public void ReorderListEntry(SceneConfig thisEntry, ListSort sort)
        {
            if (thisEntry == null)
            {
                return;
            }

            // get our current index
            var index = GetConfigIndex(thisEntry);

            // remove the old entry
            sceneConfig.config.RemoveAt(index);
            switch (sort)
            {
            case ListSort.MovetoTop:
            {
                // insert at the top
                sceneConfig.config.Insert(0, thisEntry);
                break;
            }

            case ListSort.MoveToBottom:
            {
                // add it to the end
                sceneConfig.config.Add(thisEntry);
                break;
            }

            case ListSort.MoveUp:
            {
                var newIndex = (index - 1);
                sceneConfig.config.Insert(newIndex, thisEntry);
                break;
            }

            case ListSort.MoveDown:
            {
                var newIndex = (index + 1);
                sceneConfig.config.Insert(newIndex, thisEntry);
                break;
            }
            }
        }
Beispiel #4
0
        public override void OnInspectorGUI()
        {
            serializedObject.Update();
            sceneConfig = (MultiSceneLoader)target;

            EditorGUILayout.Space();
            GUILayout.BeginVertical();
            {
                GUILayout.Label(Loc.WindowTitle, EditorStyles.boldLabel);

                GUILayout.Label(Loc.TopDesc, EditorStyles.helpBox);

                GUILayout.Space(15f);

                GUILayout.Label(Loc.ConfigList, EditorStyles.boldLabel);
                GUILayout.BeginHorizontal();
                {
                    GUILayout.Space(15f);
                    GUILayout.BeginVertical();
                    {
                        // Render our config editors
                        for (var j = 0; j < sceneConfig.config.Count; j++)
                        {
                            var entry = sceneConfig.config[j];
                            if (foldoutState.ContainsKey(entry))
                            {
                                foldoutState[entry] = EditorGUILayout.Foldout(foldoutState[entry], entry.name);
                            }
                            else
                            {
                                foldoutState.Add(entry, false);
                                foldoutState[entry] = EditorGUILayout.Foldout(foldoutState[entry], entry.name);
                            }

                            if (foldoutState[entry])
                            {
                                GUILayout.BeginHorizontal();
                                {
                                    GUILayout.Space(10f);
                                    GUILayout.BeginVertical();
                                    {
                                        GUILayout.BeginHorizontal();
                                        {
                                            GUILayout.Label(Loc.ConfigName, GUILayout.Width(120f));
                                            entry.name = GUILayout.TextField(entry.name);
                                        }
                                        GUILayout.EndHorizontal();
                                        // scene list
                                        for (var i = 0; i < entry.sceneList.Count; i++)
                                        {
                                            GUILayout.BeginHorizontal();
                                            {
                                                entry.sceneList[i] = EditorGUILayout.ObjectField(Loc.SceneName, entry.sceneList[i], typeof(Object), false);
                                                if (GUILayout.Button("-", GUILayout.Width(35f)))
                                                {
                                                    entry.sceneList.Remove(entry.sceneList[i]);
                                                }
                                            }
                                            GUILayout.EndHorizontal();
                                        }

                                        if (GUILayout.Button(Loc.AddNewScene))
                                        {
                                            entry.sceneList.Add(new Object());
                                        }
                                        GUILayout.Space(15f);
                                        if (sceneConfig.config.Count > 1)
                                        {
                                            GUILayout.Label(Loc.MoveConfig, EditorStyles.helpBox);
                                            GUILayout.BeginHorizontal();
                                            {
                                                if (GUILayout.Button(Loc.MoveTop))
                                                {
                                                    ReorderListEntry(entry, ListSort.MovetoTop);
                                                }
                                                if (GetConfigIndex(entry) != 0)
                                                {
                                                    if (GUILayout.Button(Loc.MoveUp))
                                                    {
                                                        ReorderListEntry(entry, ListSort.MoveUp);
                                                    }
                                                }
                                                if (GetConfigIndex(entry) != sceneConfig.config.Count - 1)
                                                {
                                                    if (GUILayout.Button(Loc.MoveDown))
                                                    {
                                                        ReorderListEntry(entry, ListSort.MoveDown);
                                                    }
                                                }
                                                if (GUILayout.Button(Loc.MoveBottom))
                                                {
                                                    ReorderListEntry(entry, ListSort.MoveToBottom);
                                                }
                                            }
                                            GUILayout.EndHorizontal();
                                        }
                                        if (GUILayout.Button(Loc.RemoveConfig))
                                        {
                                            sceneConfig.config.Remove(entry);
                                            foldoutState.Remove(entry);
                                        }
                                        GUILayout.Space(15f);
                                    }
                                    GUILayout.EndVertical();
                                }
                                GUILayout.EndHorizontal();
                            }
                        }
                    }
                    GUILayout.EndVertical();
                }
                GUILayout.EndHorizontal();

                if (GUILayout.Button(Loc.AddNewConfig))
                {
                    var newConfig = new SceneConfig()
                    {
                        name = Loc.NewConfigName
                    };
                    sceneConfig.config.Add(newConfig);
                }

                EditorGUILayout.Space();
                GUILayout.Label(Loc.LoadAllScenes, EditorStyles.boldLabel);
                EditorGUILayout.Space();
                if (GUILayout.Button(Loc.LoadAllScenes, GUILayout.MinHeight(100), GUILayout.Height(50)))
                {
                    sceneConfig.LoadAllScenes();
                }
                GUILayout.Label(Loc.LoadAllScenesDesc, EditorStyles.helpBox);

                EditorGUILayout.Space();
                GUILayout.Label(Loc.LoadSubScenes, EditorStyles.boldLabel);
                GUILayout.Label(Loc.LoadSubScenesDesc, EditorStyles.helpBox);

                foreach (var entry in sceneConfig.config)
                {
                    EditorGUILayout.Space();
                    var buttonText = string.Format(Loc.LoadXScenes, entry.name);
                    if (GUILayout.Button(buttonText, GUILayout.MinHeight(100), GUILayout.Height(50)))
                    {
                        sceneConfig.LoadSceneConfig(entry, true);
                    }
                    GUILayout.Label(Loc.LoadOnlyScenes + entry.name + ".", EditorStyles.helpBox);
                }
            }
            GUILayout.EndVertical();
            serializedObject.ApplyModifiedProperties();
            if (GUI.changed)
            {
                EditorUtility.SetDirty(sceneConfig);
                AssetDatabase.SaveAssets();
                AssetDatabase.Refresh();
            }
        }