Browse Source

Fix regression in scene manager directory listing

Root scene and environment directories were not kept at the top when
sorting the directory lists.
habeebweeb 4 years ago
parent
commit
33d431c0be

+ 14 - 4
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/Constants.cs

@@ -111,6 +111,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
         public static void Initialize()
         {
             InitializeSceneDirectories();
+            InitializeKankyoDirectories();
             InitializePoses();
             InitializeHandPresets();
             InitializeFaceBlends();
@@ -297,22 +298,31 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
         public static void InitializeSceneDirectories()
         {
             SceneDirectoryList.Clear();
-            KankyoDirectoryList.Clear();
-
             SceneDirectoryList.Add(sceneDirectory);
             foreach (string directory in Directory.GetDirectories(scenesPath))
             {
                 SceneDirectoryList.Add(new DirectoryInfo(directory).Name);
             }
+            SceneDirectoryList.Sort((a, b) => KeepAtTop(a, b, sceneDirectory));
+        }
 
+        public static void InitializeKankyoDirectories()
+        {
+            KankyoDirectoryList.Clear();
             KankyoDirectoryList.Add(kankyoDirectory);
             foreach (string directory in Directory.GetDirectories(kankyoPath))
             {
                 KankyoDirectoryList.Add(new DirectoryInfo(directory).Name);
             }
+            KankyoDirectoryList.Sort((a, b) => KeepAtTop(a, b, kankyoDirectory));
+        }
 
-            SceneDirectoryList.Sort(LexicographicStringComparer.Comparison);
-            KankyoDirectoryList.Sort(LexicographicStringComparer.Comparison);
+        private static int KeepAtTop(string a, string b, string topItem)
+        {
+            if (a == b) return 0;
+            if (a == topItem) return -1;
+            if (b == topItem) return 1;
+            else return LexicographicStringComparer.Comparison(a, b);
         }
 
         public static void InitializePoses()

+ 3 - 1
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/Managers/SceneManager.cs

@@ -173,7 +173,9 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
         {
             if (!Directory.Exists(CurrentScenesDirectory)) CurrentDirectoryIndex = 0;
 
-            Constants.InitializeSceneDirectories();
+            if (KankyoMode) Constants.InitializeKankyoDirectories();
+            else Constants.InitializeSceneDirectories();
+
             UpdateSceneList();
         }