Browse Source

Add kankyou management to scene manager

habeebweeb 4 years ago
parent
commit
c07ea1c061

+ 167 - 182
MultipleMaids/CM3D2/MultipleMaids/Plugin/MultipleMaids.Gui.cs

@@ -68,17 +68,17 @@ namespace CM3D2.MultipleMaids.Plugin
                 rectWin.x = Screen.width - rectWin.width;
                 rectWin.y = GetPix(65);
 
-                saveManagerRect.width = Screen.width * 0.45f;
-                saveManagerRect.height = Screen.height * 0.55f;
+                sceneManagerRect.width = Screen.width * 0.45f;
+                sceneManagerRect.height = Screen.height * 0.55f;
 
-                saveManagerRect.x = (float)(Screen.width * 0.5f - saveManagerRect.width * 0.5f);
-                saveManagerRect.y = (float)(Screen.height * 0.5f - saveManagerRect.height * 0.5f);
+                sceneManagerRect.x = (float)(Screen.width * 0.5f - sceneManagerRect.width * 0.5f);
+                sceneManagerRect.y = (float)(Screen.height * 0.5f - sceneManagerRect.height * 0.5f);
 
-                saveModalRect.width = Mathf.Min(Screen.width * 0.35f, 480f);
-                saveModalRect.height = Mathf.Min(Screen.height * 0.45f, 360f);
+                sceneModalRect.width = Mathf.Min(Screen.width * 0.35f, 480f);
+                sceneModalRect.height = Mathf.Min(Screen.height * 0.45f, 360f);
 
-                saveModalRect.x = (float)(Screen.width * 0.5f - saveModalRect.width * 0.5f);
-                saveModalRect.y = (float)(Screen.height * 0.5f - saveModalRect.height * 0.5f);
+                sceneModalRect.x = (float)(Screen.width * 0.5f - sceneModalRect.width * 0.5f);
+                sceneModalRect.y = (float)(Screen.height * 0.5f - sceneModalRect.height * 0.5f);
             }
 
             if (bGuiMessage)
@@ -117,31 +117,18 @@ namespace CM3D2.MultipleMaids.Plugin
                 parCombo.height = rectWin.height;
                 lightCombo.height = rectWin.height;
 
-                if (!sceneFlg && !faceFlg && !poseFlg && !kankyoFlg && !kankyo2Flg && !isF6 && okFlg)
+                if (sceneFlg)
                 {
-                    if (Input.mouseScrollDelta.y != 0f)
-                    {
-                        if (rectWin.Contains(Event.current.mousePosition))
-                        {
-                            GameMain.Instance.MainCamera.SetControl(false);
-                            Input.ResetInputAxes();
-                        }
-                    }
-
-                    rectWin = GUI.Window(129, rectWin, MaidCallWindow, "", style);
-                }
-                else if (sceneFlg)
-                {
-                    if (manageSaveFlag || deleteDirectoryFlag)
+                    if (manageSceneFlag || deleteDirectoryFlag)
                     {
-                        saveModalRect = GUI.ModalWindow(9999, saveModalRect, SaveManagerModal, "", style);
+                        sceneModalRect = GUI.ModalWindow(9999, sceneModalRect, SceneManagerModal, "", style);
                     }
 
-                    saveManagerRect = GUI.Window(131, saveManagerRect, SaveManagerWindow, "", style);
+                    sceneManagerRect = GUI.Window(131, sceneManagerRect, SceneManagerWindow, "", style);
 
                     int resizeHandleSize = GetPix(15);
-                    resizeManagerRect.x = saveManagerRect.x + saveManagerRect.width - resizeHandleSize;
-                    resizeManagerRect.y = saveManagerRect.y + saveManagerRect.height - resizeHandleSize;
+                    resizeManagerRect.x = sceneManagerRect.x + sceneManagerRect.width - resizeHandleSize;
+                    resizeManagerRect.y = sceneManagerRect.y + sceneManagerRect.height - resizeHandleSize;
 
                     resizeManagerRect.width = resizeManagerRect.height = resizeHandleSize;
 
@@ -152,11 +139,11 @@ namespace CM3D2.MultipleMaids.Plugin
 
                     if (resizeManager)
                     {
-                        float rectWidth = Event.current.mousePosition.x - saveManagerRect.x;
-                        float rectHeight = Event.current.mousePosition.y - saveManagerRect.y;
+                        float rectWidth = Event.current.mousePosition.x - sceneManagerRect.x;
+                        float rectHeight = Event.current.mousePosition.y - sceneManagerRect.y;
 
-                        saveManagerRect.width = Mathf.Max(GetPix(480), rectWidth);
-                        saveManagerRect.height = Mathf.Max(GetPix(260), rectHeight);
+                        sceneManagerRect.width = Mathf.Max(GetPix(480), rectWidth);
+                        sceneManagerRect.height = Mathf.Max(GetPix(260), rectHeight);
 
                         if (Input.GetMouseButtonUp(0))
                         {
@@ -166,13 +153,27 @@ namespace CM3D2.MultipleMaids.Plugin
 
                     if (Input.mouseScrollDelta.y != 0f)
                     {
-                        if (saveManagerRect.Contains(Event.current.mousePosition)
-                            || (manageSaveFlag && saveModalRect.Contains(Event.current.mousePosition)))
+                        if (sceneManagerRect.Contains(Event.current.mousePosition)
+                            || (manageSceneFlag && sceneModalRect.Contains(Event.current.mousePosition)))
+                        {
+                            GameMain.Instance.MainCamera.SetControl(false);
+                            Input.ResetInputAxes();
+                        }
+                    }
+                }
+
+                if (!faceFlg && !poseFlg && !kankyoFlg && !kankyo2Flg && !isF6 && okFlg)
+                {
+                    if (Input.mouseScrollDelta.y != 0f)
+                    {
+                        if (rectWin.Contains(Event.current.mousePosition))
                         {
                             GameMain.Instance.MainCamera.SetControl(false);
                             Input.ResetInputAxes();
                         }
                     }
+
+                    rectWin = GUI.Window(129, rectWin, MaidCallWindow, "", style);
                 }
                 else if (kankyoFlg)
                 {
@@ -361,7 +362,7 @@ namespace CM3D2.MultipleMaids.Plugin
                     {
                         faceFlg = false;
                         poseFlg = false;
-                        sceneFlg = false;
+                        // sceneFlg = false;
                         kankyoFlg = false;
                         kankyo2Flg = false;
                         bGui = true;
@@ -378,7 +379,7 @@ namespace CM3D2.MultipleMaids.Plugin
                 {
                     poseFlg = true;
                     faceFlg = false;
-                    sceneFlg = false;
+                    // sceneFlg = false;
                     kankyoFlg = false;
                     kankyo2Flg = false;
                 }
@@ -390,7 +391,7 @@ namespace CM3D2.MultipleMaids.Plugin
                 {
                     faceFlg = true;
                     poseFlg = false;
-                    sceneFlg = false;
+                    // sceneFlg = false;
                     kankyoFlg = false;
                     kankyo2Flg = false;
                     if (!faceFlg2)
@@ -411,7 +412,7 @@ namespace CM3D2.MultipleMaids.Plugin
                 {
                     poseFlg = false;
                     faceFlg = false;
-                    sceneFlg = false;
+                    // sceneFlg = false;
                     kankyoFlg = true;
                     kankyo2Flg = false;
                 }
@@ -423,7 +424,7 @@ namespace CM3D2.MultipleMaids.Plugin
                 {
                     poseFlg = false;
                     faceFlg = false;
-                    sceneFlg = false;
+                    // sceneFlg = false;
                     kankyoFlg = false;
                     kankyo2Flg = true;
                 }
@@ -787,67 +788,29 @@ namespace CM3D2.MultipleMaids.Plugin
                     }
                 }
             }
-            else
-            {
-                if (GUI.Button(new Rect(GetPix(180),
-                                         GetPix(27),
-                                         GetPix(24),
-                                         GetPix(20)),
-                               "名",
-                               style2))
-                {
-                    nameFlg = true;
-                    inName2 = kankyoComboList[kankyoIndex].text;
-                }
-
-                kankyoIndex =
-                        kankyoCombo.List(new Rect(GetPix(4),
-                                                   GetPix(27),
-                                                   GetPix(91),
-                                                   GetPix(23)),
-                                         kankyoComboList[kankyoIndex].text,
-                                         kankyoComboList,
-                                         buttonStyle,
-                                          "box",
-                                         listStyle3);
-                if (GUI.Button(new Rect(GetPix(100),
-                                         GetPix(27),
-                                         GetPix(35),
-                                         GetPix(20)),
-                               "保存",
-                               style2))
-                {
-                    saveScene = 10000 + kankyoIndex;
-                    saveScene2 = saveScene;
-                    GameMain.Instance.SoundMgr.PlaySe("se002.ogg", false);
-                    try
-                    {
-                        thum_byte_to_base64_ = string.Empty;
-                        thum_file_path_ = Path.Combine(Path.GetTempPath(), "cm3d2_" + Guid.NewGuid().ToString() + ".png");
-                        GameMain.Instance.MainCamera.ScreenShot(thum_file_path_, 1, false);
-                    }
-                    catch { }
-                }
+            // else
+            // {
+            //     style2.alignment = TextAnchor.MiddleCenter;
+            //     if (GUI.Button(new Rect(
+            //         GetPix(4),
+            //         GetPix(27),
+            //         GetPix(120),
+            //         GetPix(20)
+            //     ), "Scene Manager", style2))
+            //     {
+            //         sceneFlg = false;
+            //         poseFlg = false;
+            //         faceFlg = false;
+            //         sceneFlg = false;
+            //         kankyoFlg = false;
+            //         kankyoModeFlag = true;
+            //         kankyo2Flg = true;
 
-                GUI.enabled = false;
-                IniKey iniKey = Preferences["scene"]["s" + (10000 + kankyoIndex)];
-                if (iniKey.Value != null && iniKey.Value.ToString() != "")
-                {
-                    GUI.enabled = true;
-                }
+            //         RefreshSceneManager();
 
-                if (GUI.Button(new Rect(GetPix(140),
-                                         GetPix(27),
-                                         GetPix(35),
-                                         GetPix(20)),
-                               "読込",
-                               style2))
-                {
-                    loadScene = 10000 + kankyoIndex;
-                    kankyoLoadFlg = true;
-                    GameMain.Instance.SoundMgr.PlaySe("se002.ogg", false);
-                }
-            }
+            //         if (!sceneManagerInitialize) InitializeSceneManager();
+            //     }
+            // }
 
             GUI.enabled = true;
 
@@ -1106,7 +1069,7 @@ namespace CM3D2.MultipleMaids.Plugin
                     {
                         faceFlg = false;
                         poseFlg = false;
-                        sceneFlg = false;
+                        // sceneFlg = false;
                         kankyoFlg = false;
                         kankyo2Flg = false;
                         bGui = true;
@@ -1125,7 +1088,7 @@ namespace CM3D2.MultipleMaids.Plugin
                     {
                         poseFlg = true;
                         faceFlg = false;
-                        sceneFlg = false;
+                        // sceneFlg = false;
                         kankyoFlg = false;
                         kankyo2Flg = false;
                     }
@@ -1138,7 +1101,7 @@ namespace CM3D2.MultipleMaids.Plugin
                 {
                     faceFlg = true;
                     poseFlg = false;
-                    sceneFlg = false;
+                    // sceneFlg = false;
                     kankyoFlg = false;
                     kankyo2Flg = false;
                     if (!faceFlg2)
@@ -1159,7 +1122,7 @@ namespace CM3D2.MultipleMaids.Plugin
                 {
                     poseFlg = false;
                     faceFlg = false;
-                    sceneFlg = false;
+                    // sceneFlg = false;
                     kankyoFlg = true;
                     kankyo2Flg = false;
                 }
@@ -1171,7 +1134,7 @@ namespace CM3D2.MultipleMaids.Plugin
                 {
                     poseFlg = false;
                     faceFlg = false;
-                    sceneFlg = false;
+                    // sceneFlg = false;
                     kankyoFlg = false;
                     kankyo2Flg = true;
                 }
@@ -1210,14 +1173,14 @@ namespace CM3D2.MultipleMaids.Plugin
                                "シーン\n 管 理",
                                guistyle3))
                 {
-                    sceneFlg = true;
+                    sceneFlg = !sceneFlg;
                     faceFlg = false;
                     poseFlg = false;
-                    kankyoFlg = false;
+                    kankyoFlg = true;
                     kankyo2Flg = false;
                     bGui = true;
 
-                    if (!saveManagerInitialize) InitializeSaveManager();
+                    if (!sceneManagerInitialize) InitializeSceneManager();
 
                     for (int i = 0; i < 10; i++)
                     {
@@ -3569,7 +3532,7 @@ namespace CM3D2.MultipleMaids.Plugin
                     {
                         faceFlg = false;
                         poseFlg = false;
-                        sceneFlg = false;
+                        // sceneFlg = false;
                         kankyoFlg = false;
                         kankyo2Flg = false;
                         bGui = true;
@@ -3586,7 +3549,7 @@ namespace CM3D2.MultipleMaids.Plugin
                 {
                     poseFlg = true;
                     faceFlg = false;
-                    sceneFlg = false;
+                    // sceneFlg = false;
                     kankyoFlg = false;
                     kankyo2Flg = false;
                 }
@@ -3598,7 +3561,7 @@ namespace CM3D2.MultipleMaids.Plugin
                 {
                     faceFlg = true;
                     poseFlg = false;
-                    sceneFlg = false;
+                    // sceneFlg = false;
                     kankyoFlg = false;
                     kankyo2Flg = false;
                     if (!faceFlg2)
@@ -3619,7 +3582,7 @@ namespace CM3D2.MultipleMaids.Plugin
                 {
                     poseFlg = false;
                     faceFlg = false;
-                    sceneFlg = false;
+                    // sceneFlg = false;
                     kankyoFlg = true;
                     kankyo2Flg = false;
                 }
@@ -5890,7 +5853,7 @@ namespace CM3D2.MultipleMaids.Plugin
                     {
                         faceFlg = false;
                         poseFlg = false;
-                        sceneFlg = false;
+                        // sceneFlg = false;
                         kankyoFlg = false;
                         kankyo2Flg = false;
                         bGui = true;
@@ -5907,7 +5870,7 @@ namespace CM3D2.MultipleMaids.Plugin
                 {
                     poseFlg = true;
                     faceFlg = false;
-                    sceneFlg = false;
+                    // sceneFlg = false;
                     kankyoFlg = false;
                     kankyo2Flg = false;
                 }
@@ -5919,7 +5882,7 @@ namespace CM3D2.MultipleMaids.Plugin
                 {
                     faceFlg = true;
                     poseFlg = false;
-                    sceneFlg = false;
+                    // sceneFlg = false;
                     kankyoFlg = false;
                     kankyo2Flg = false;
                     if (!faceFlg2)
@@ -5940,7 +5903,7 @@ namespace CM3D2.MultipleMaids.Plugin
                 {
                     poseFlg = false;
                     faceFlg = false;
-                    sceneFlg = false;
+                    // sceneFlg = false;
                     kankyoFlg = true;
                     kankyo2Flg = false;
                 }
@@ -7475,7 +7438,7 @@ namespace CM3D2.MultipleMaids.Plugin
             }
 
             bool flag1 = true;
-            if (faceFlg || poseFlg || sceneFlg || kankyoFlg || kankyo2Flg)
+            if (faceFlg || poseFlg || /*sceneFlg ||*/ kankyoFlg || kankyo2Flg)
             {
                 flag1 = false;
             }
@@ -7490,7 +7453,7 @@ namespace CM3D2.MultipleMaids.Plugin
             {
                 faceFlg = false;
                 poseFlg = false;
-                sceneFlg = false;
+                // sceneFlg = false;
                 kankyoFlg = false;
                 kankyo2Flg = false;
                 bGui = true;
@@ -7506,7 +7469,7 @@ namespace CM3D2.MultipleMaids.Plugin
             {
                 poseFlg = true;
                 faceFlg = false;
-                sceneFlg = false;
+                // sceneFlg = false;
                 kankyoFlg = false;
                 kankyo2Flg = false;
             }
@@ -7518,7 +7481,7 @@ namespace CM3D2.MultipleMaids.Plugin
             {
                 faceFlg = true;
                 poseFlg = false;
-                sceneFlg = false;
+                // sceneFlg = false;
                 kankyoFlg = false;
                 kankyo2Flg = false;
                 if (!faceFlg2)
@@ -7537,7 +7500,7 @@ namespace CM3D2.MultipleMaids.Plugin
             {
                 poseFlg = false;
                 faceFlg = false;
-                sceneFlg = false;
+                // sceneFlg = false;
                 kankyoFlg = true;
                 kankyo2Flg = false;
             }
@@ -8938,7 +8901,7 @@ namespace CM3D2.MultipleMaids.Plugin
             GUI.DragWindow();
         }
 
-        private void SaveManagerWindow(int winID)
+        private void SceneManagerWindow(int winID)
         {
             GUIStyle labelStyle = new GUIStyle("label");
             labelStyle.fontSize = GetPix(15);
@@ -8967,8 +8930,9 @@ namespace CM3D2.MultipleMaids.Plugin
             int windowPadding = GetPix(10);
             int windowPaddingY = GetPix(20);
             int buttonSize = GetPix(25);
+            int saveGridOffset = GetPix(200);
 
-            if (createSaveFlag || loadSaveFlag || manageSaveFlag || deleteDirectoryFlag || deleteFileFlag)
+            if (createSceneFlag || loadSceneFlag || manageSceneFlag || deleteDirectoryFlag || deleteSceneFlag)
             {
                 GUI.enabled = false;
             }
@@ -8976,47 +8940,50 @@ namespace CM3D2.MultipleMaids.Plugin
             #region Titlebar
 
             if (GUI.Button(new Rect(
-                saveManagerRect.width - windowPadding - buttonSize,
+                sceneManagerRect.width - windowPadding - buttonSize,
                 windowPadding,
                 buttonSize,
                 buttonSize
             ), "X", saveControlStyle))
             {
-                faceFlg = false;
-                poseFlg = false;
                 sceneFlg = false;
-                kankyoFlg = true;
-                kankyo2Flg = false;
+
                 bGui = true;
                 copyIndex = 0;
             }
 
             if (GUI.Button(new Rect(
+                saveGridOffset - GetPix(70) + windowPadding,
                 windowPadding,
-                windowPadding,
-                GetPix(65),
+                GetPix(70),
                 buttonSize
             ), "Refresh", saveControlStyle))
             {
-                RefreshSaveManager();
+                RefreshSceneManager();
             }
 
+            kankyoToggle = GUI.Toggle(new Rect(
+                windowPadding,
+                windowPadding,
+                GetPix(65),
+                buttonSize
+            ), kankyoToggle, "Kankyou", saveControlStyle);
+
             GUI.Label(new Rect(
                 windowPadding,
                 windowPadding,
-                saveManagerRect.width - windowPadding,
+                sceneManagerRect.width - windowPadding,
                 buttonSize
             ), directoryList[selectedDirectory], labelStyle);
 
             #endregion
 
-            int saveGridOffset = GetPix(200);
             int saveGridX = windowPaddingY + saveGridOffset;
             int saveGridY = windowPaddingY + buttonSize;
-            float saveGridWidth = saveManagerRect.width - saveGridX - windowPadding;
-            float saveGridHeight = saveManagerRect.height - saveGridY;
+            float saveGridWidth = sceneManagerRect.width - saveGridX - windowPadding;
+            float saveGridHeight = sceneManagerRect.height - saveGridY;
 
-            int numImages = saveScenes.Count;
+            int numImages = scenes.Count;
 
             #region Directory List
 
@@ -9102,7 +9069,7 @@ namespace CM3D2.MultipleMaids.Plugin
                 }
                 else if (Event.current.Equals(Event.KeyboardEvent("return")) && GUI.GetNameOfFocusedControl() == "textEntry")
                 {
-                    MakeNewDirectory(textFieldValue);
+                    CreateDirectory(textFieldValue);
                     textFieldValue = "";
                     createDirectoryFlag = false;
                 }
@@ -9139,7 +9106,7 @@ namespace CM3D2.MultipleMaids.Plugin
 
             Rect saveGridScrollView = new Rect(0, 0
                 , saveGridWidth - 50
-                , (saveScenes.Count / maxColumns + 1) * (imageHeight + imagePadding) + imagePadding
+                , (scenes.Count / maxColumns + 1) * (imageHeight + imagePadding) + imagePadding
             );
 
             GUI.Box(new Rect(
@@ -9149,7 +9116,7 @@ namespace CM3D2.MultipleMaids.Plugin
             , saveGridHeight - windowPadding
             ), "");
 
-            saveManagerScrollPos = GUI.BeginScrollView(saveGridScrollRect, saveManagerScrollPos, saveGridScrollView);
+            sceneManagerScrollPos = GUI.BeginScrollView(saveGridScrollRect, sceneManagerScrollPos, saveGridScrollView);
             if (GUI.Button(new Rect(
                 imageGridOffset
                 , imagePadding
@@ -9157,14 +9124,14 @@ namespace CM3D2.MultipleMaids.Plugin
                 , imageHeight)
                 , "+", newSaveStyle))
             {
-                createSaveFlag = true;
+                createSceneFlag = true;
                 TakeScreenshot();
             }
 
-            if (saveScenes.Count > 0)
+            if (scenes.Count > 0)
             {
                 int j = 1;
-                int i = saveScenes.Count - 1;
+                int i = scenes.Count - 1;
 
                 while (i >= 0)
                 {
@@ -9175,16 +9142,23 @@ namespace CM3D2.MultipleMaids.Plugin
                         imageX
                         , imageY
                         , imageWidth
-                        , imageHeight), saveScenes[i].screenshot, saveImageStyle))
+                        , imageHeight), scenes[i].screenshot, saveImageStyle))
                     {
-                        selectedSave = i;
+                        selectedScene = i;
                         ReadScene();
                         if (sceneData != null)
                         {
-                            int numMaids = int.Parse(sceneData.Split(',')[1]);
-                            string maids = numMaids == 1 ? "Maid" : "Maids";
-                            infoString = new GUIContent($"{numMaids} {maids}");
-                            manageSaveFlag = true;
+                            if (kankyoScene)
+                            {
+                                infoString = new GUIContent("Kankyou");
+                            }
+                            else
+                            {
+                                int numMaids = int.Parse(sceneData.Split(',')[1]);
+                                string maids = numMaids == 1 ? "Maid" : "Maids";
+                                infoString = new GUIContent($"{numMaids} {maids}");
+                            }
+                            manageSceneFlag = true;
                         }
                     }
 
@@ -9197,33 +9171,44 @@ namespace CM3D2.MultipleMaids.Plugin
             #endregion
 
             GUI.Label(new Rect(
-                saveManagerRect.width - GetPix(15),
-                saveManagerRect.height - GetPix(17),
+                sceneManagerRect.width - GetPix(15),
+                sceneManagerRect.height - GetPix(17),
                 GetPix(20),
                 GetPix(20)
             ), "□", resizeHandleStyle);
 
-            if (createSaveFlag)
+            if (createSceneFlag)
             {
                 if (File.Exists(thum_file_path_))
                 {
-                    if (overwriteFlag)
-                        Overwrite();
-                    SaveScene();
-                    createSaveFlag = false;
+                    try
+                    {
+                        if (overwriteFlag)
+                            OverwriteScene();
+                        SaveScene();
+                    }
+                    catch { }
+                    createSceneFlag = false;
                     overwriteFlag = false;
                 }
             }
 
+            if (kankyoModeFlag != kankyoToggle)
+            {
+                kankyoModeFlag = kankyoToggle;
+                currentDirectory = kankyoModeFlag ? kankyoDirectoryName : sceneDirectoryName;
+                RefreshSceneManager();
+            }
+
             if (!resizeManager)
             {
                 GUI.DragWindow(new Rect(0, 0,
-                saveManagerRect.width - windowPaddingY,
-                saveManagerRect.height - windowPaddingY));
+                sceneManagerRect.width - windowPaddingY,
+                sceneManagerRect.height - windowPaddingY));
             }
         }
 
-        private void SaveManagerModal(int winID)
+        private void SceneManagerModal(int winID)
         {
             GUIStyle titleStyle = new GUIStyle("label");
             titleStyle.fontSize = GetPix(12);
@@ -9240,14 +9225,14 @@ namespace CM3D2.MultipleMaids.Plugin
             GUIStyle infoHighlightStyle = new GUIStyle("box");
             infoHighlightStyle.normal.background = infoHighlight;
 
-            int index = deleteDirectoryFlag ? saveScenes.Count - 1 : selectedSave;
-            Texture2D previewImage = saveScenes.ElementAtOrDefault(index)?.screenshot;
+            int index = deleteDirectoryFlag ? scenes.Count - 1 : selectedScene;
+            Texture2D previewImage = scenes.ElementAtOrDefault(index)?.screenshot;
 
             int windowPadding = GetPix(10);
             int windowPaddingY = GetPix(20);
 
-            float previewWindowWidth = saveModalRect.width - windowPaddingY;
-            float previewWindowHeight = Mathf.Min(270 - windowPadding, saveModalRect.height - GetPix(70));
+            float previewWindowWidth = sceneModalRect.width - windowPaddingY;
+            float previewWindowHeight = Mathf.Min(270 - windowPadding, sceneModalRect.height - GetPix(70));
 
             int texWidth = previewImage?.width ?? 480;
             int texHeight = previewImage?.height ?? 270;
@@ -9256,7 +9241,7 @@ namespace CM3D2.MultipleMaids.Plugin
             float previewWidth = (texWidth * scale) - windowPaddingY;
             float previewHeight = (texHeight * scale) - windowPaddingY;
 
-            float previewX = (saveModalRect.width / 2 - previewWidth / 2);
+            float previewX = (sceneModalRect.width / 2 - previewWidth / 2);
             float previewY = windowPaddingY;
 
             GUI.DrawTexture(new Rect(
@@ -9299,51 +9284,50 @@ namespace CM3D2.MultipleMaids.Plugin
 
             string title = deleteDirectoryFlag
                 ? $"Are you sure you want to delete \"{directoryList[selectedDirectory]}\"?"
-                : deleteFileFlag
-                ? $"Are you sure you want to delete \"{saveScenes[index].info.Name}\"?"
-                : saveScenes[selectedSave].info.Name;
+                : deleteSceneFlag
+                ? $"Are you sure you want to delete \"{scenes[index].info.Name}\"?"
+                : scenes[selectedScene].info.Name;
 
             float labelY = previewY + previewHeight + windowPadding;
 
             GUI.Label(new Rect(
                 windowPadding,
                 labelY,
-                saveModalRect.width - windowPaddingY,
-                saveModalRect.height - labelY - windowPadding
+                sceneModalRect.width - windowPaddingY,
+                sceneModalRect.height - labelY - windowPadding
             ), title, titleStyle);
 
             int buttonHeight = GetPix(25);
             int buttonWidth = GetPix(80);
-            float buttonY = saveModalRect.height - windowPadding - buttonHeight;
+            float buttonY = sceneModalRect.height - windowPadding - buttonHeight;
 
             if (GUI.Button(new Rect(
                 windowPadding,
                 buttonY,
                 buttonWidth,
                 buttonHeight
-            ), deleteDirectoryFlag || deleteFileFlag ? "Yes" : "Overwrite", saveControlStyle))
+            ), deleteDirectoryFlag || deleteSceneFlag ? "Yes" : "Overwrite", saveControlStyle))
             {
                 if (deleteDirectoryFlag)
                 {
                     DeleteDirectory();
                 }
-                else if (deleteFileFlag)
+                else if (deleteSceneFlag)
                 {
-                    DeleteFile();
+                    DeleteScene();
                 }
                 else
                 {
                     overwriteFlag = true;
-                    createSaveFlag = true;
-
+                    createSceneFlag = true;
                     TakeScreenshot();
                 }
-                deleteFileFlag = false;
+                deleteSceneFlag = false;
                 deleteDirectoryFlag = false;
-                manageSaveFlag = false;
+                manageSceneFlag = false;
             }
 
-            if (!(deleteDirectoryFlag || deleteFileFlag))
+            if (!(deleteDirectoryFlag || deleteSceneFlag))
             {
                 if (GUI.Button(new Rect(
                     windowPaddingY + buttonWidth,
@@ -9352,10 +9336,11 @@ namespace CM3D2.MultipleMaids.Plugin
                     buttonHeight
                 ), "Load", saveControlStyle))
                 {
-                    manageSaveFlag = false;
-                    loadSaveFlag = true;
+                    manageSceneFlag = false;
+                    loadSceneFlag = true;
+                    kankyoLoadFlg = kankyoScene;
                     loadScene = 1;
-                    FileSystemInfo info = saveScenes[selectedSave].info;
+                    FileSystemInfo info = scenes[selectedScene].info;
                     info.LastAccessTime = DateTime.Now;
                 }
 
@@ -9366,19 +9351,19 @@ namespace CM3D2.MultipleMaids.Plugin
                     buttonHeight
                 ), "Delete", saveControlStyle))
                 {
-                    deleteFileFlag = true;
+                    deleteSceneFlag = true;
                 }
             }
 
             if (GUI.Button(new Rect(
-                saveModalRect.width - buttonWidth - windowPadding,
+                sceneModalRect.width - buttonWidth - windowPadding,
                 buttonY,
                 buttonWidth,
                 buttonHeight
-            ), deleteFileFlag || deleteDirectoryFlag ? "No" : "Cancel", saveControlStyle))
+            ), deleteSceneFlag || deleteDirectoryFlag ? "No" : "Cancel", saveControlStyle))
             {
-                manageSaveFlag = false;
-                deleteFileFlag = false;
+                manageSceneFlag = false;
+                deleteSceneFlag = false;
                 deleteDirectoryFlag = false;
             }
 

+ 9 - 9
MultipleMaids/CM3D2/MultipleMaids/Plugin/MultipleMaids.MaidUpdate.cs

@@ -1836,7 +1836,7 @@ namespace CM3D2.MultipleMaids.Plugin
                                 isGuiInit = true;
                                 poseFlg = true;
                                 faceFlg = false;
-                                sceneFlg = false;
+                                // sceneFlg = false;
                                 kankyoFlg = false;
                                 kankyo2Flg = false;
                                 fFlg = true;
@@ -1863,7 +1863,7 @@ namespace CM3D2.MultipleMaids.Plugin
                                 isGuiInit = true;
                                 faceFlg = true;
                                 poseFlg = false;
-                                sceneFlg = false;
+                                // sceneFlg = false;
                                 kankyoFlg = false;
                                 kankyo2Flg = false;
                                 maid.boMabataki = false;
@@ -3090,7 +3090,7 @@ namespace CM3D2.MultipleMaids.Plugin
                                                 // isGuiInit = true;
                                                 faceFlg = true;
                                                 poseFlg = false;
-                                                sceneFlg = false;
+                                                // sceneFlg = false;
                                                 kankyoFlg = false;
                                                 kankyo2Flg = false;
                                                 maid.boMabataki = false;
@@ -3106,7 +3106,7 @@ namespace CM3D2.MultipleMaids.Plugin
                                                 // isGuiInit = true;
                                                 poseFlg = true;
                                                 faceFlg = false;
-                                                sceneFlg = false;
+                                                // sceneFlg = false;
                                                 kankyoFlg = false;
                                                 kankyo2Flg = false;
                                                 selectMaidIndex = mMaid2[i].no;
@@ -7115,13 +7115,13 @@ namespace CM3D2.MultipleMaids.Plugin
                 else if (!isVR && Input.GetKeyDown(KeyCode.F8))
                 {
                     sceneFlg = true;
-                    faceFlg = false;
-                    poseFlg = false;
-                    kankyoFlg = false;
-                    kankyo2Flg = false;
+                    // faceFlg = false;
+                    // poseFlg = false;
+                    // kankyoFlg = false;
+                    // kankyo2Flg = false;
                     bGui = true;
 
-                    if (!saveManagerInitialize) InitializeSaveManager();
+                    if (!sceneManagerInitialize) InitializeSceneManager();
 
                     for (int i = 0; i < 10; i++)
                     {

+ 2 - 2
MultipleMaids/CM3D2/MultipleMaids/Plugin/MultipleMaids.Update.cs

@@ -4139,9 +4139,9 @@ namespace CM3D2.MultipleMaids.Plugin
 
             if (loadScene > 0)
             {
-                if (loadSaveFlag && !kankyoLoadFlg)
+                if (loadSceneFlag)
                 {
-                    loadSaveFlag = false;
+                    loadSceneFlag = false;
                 }
                 else
                 {

+ 178 - 108
MultipleMaids/SaveManager.cs

@@ -12,86 +12,105 @@ namespace CM3D2.MultipleMaids.Plugin
     {
         internal static readonly byte[] pngEnd = Encoding.ASCII.GetBytes("IEND");
         internal static readonly int[] border = { -1, 0, 0, 0, 0 };
-        internal static readonly string baseDirectoryName = "< Base Directory >";
+        internal static readonly byte[] kankyoHeader = Encoding.ASCII.GetBytes("KANKYO");
+        internal const string sceneDirectoryName = "< Scene Root >";
+        internal const string kankyoDirectoryName = "< Kankyou Root >";
         internal readonly string saveScenePath = Path.Combine(Path.GetFullPath(".\\"), "Mod\\MultipleMaidsSave");
+        private static string kankyoScenePath = Path.Combine(Path.GetFullPath(".\\"), "Mod\\MultipleMaidsKankyou");
         private static string sceneData;
-        private static List<SavePng> saveScenes = new List<SavePng>(50);
+        private static List<ScenePng> scenes = new List<ScenePng>(50);
         private GUIStyle selectedButtonStyle;
         private GUIContent infoString;
         private string[] directoryList;
         private Texture2D frame;
         private Texture2D infoHighlight;
-        private Rect saveManagerRect;
-        private Rect saveModalRect;
+        private Rect sceneManagerRect;
+        private Rect sceneModalRect;
         private Rect resizeManagerRect;
-        private Vector2 saveManagerScrollPos = Vector2.zero;
+        private Vector2 sceneManagerScrollPos = Vector2.zero;
         private Vector2 dirListScrollPos = Vector2.zero;
-        private bool saveManagerInitialize = false;
-        private bool loadSaveFlag = false;
+        private bool sceneManagerInitialize = false;
+        private bool loadSceneFlag = false;
         private bool overwriteFlag = false;
-        private bool createSaveFlag = false;
-        private bool manageSaveFlag = false;
+        private bool createSceneFlag = false;
+        private bool manageSceneFlag = false;
+        private bool kankyoModeFlag = false;
+        private bool kankyoToggle = false;
+        private bool kankyoScene = false;
         private bool createDirectoryFlag = false;
         private bool deleteDirectoryFlag = false;
-        private bool deleteFileFlag = false;
+        private bool deleteSceneFlag = false;
         private bool resizeManager = false;
-        private int selectedSave = 0;
+        private int selectedScene = 0;
         private int selectedDirectory = 0;
-        private string currentDirectory = "";
+        private string currentDirectory = sceneDirectoryName;
         private string textFieldValue = "";
 
-        public void InitializeSaveManager()
+        public void InitializeSceneManager()
         {
             frame = MakeTex(2, 2, Color.white);
             infoHighlight = MakeTex(2, 2, new Color(0f, 0f, 0f, 0.8f));
 
-            if (!Directory.Exists(saveScenePath))
-            {
-                Directory.CreateDirectory(saveScenePath);
-            }
-
             selectedButtonStyle = new GUIStyle("button");
             selectedButtonStyle.normal.background = MakeTex(1, 1, new Color(0.5f, 0.5f, 0.5f, 0.4f));
             selectedButtonStyle.normal.textColor = Color.white;
 
-            GetSaveDirectories();
-            GetSaveScenes();
-            saveManagerInitialize = true;
+            currentDirectory = kankyoModeFlag ? kankyoDirectoryName : sceneDirectoryName;
+
+            GetSceneDirectories();
+            GetScenes(currentDirectory);
+            sceneManagerInitialize = true;
         }
-        private void RefreshSaveManager()
+
+        private void RefreshSceneManager()
         {
             SwitchDirectory(currentDirectory);
-            GetSaveDirectories();
-            GetSaveScenes();
+            GetSceneDirectories();
+            GetScenes(currentDirectory);
         }
 
-        private void GetSaveScenes()
+        private void SwitchDirectory(string target)
         {
-            saveScenes.Clear();
-
-            string workingPath = Path.Combine(saveScenePath, currentDirectory);
-
-            DirectoryInfo info = new DirectoryInfo(workingPath);
+            string root = kankyoModeFlag ? kankyoScenePath : saveScenePath;
+            string path = target.Equals(sceneDirectoryName) || target.Equals(kankyoDirectoryName)
+                ? ""
+                : target;
+            string targetDirectory = Path.Combine(root, path);
 
-            foreach (var save in info.GetFiles("*.png"))
+            if (!Directory.Exists(targetDirectory))
             {
-                Texture2D screenshot = new Texture2D(1, 1, TextureFormat.ARGB32, false);
-                screenshot.LoadImage(File.ReadAllBytes(save.FullName));
-
-                saveScenes.Add(new SavePng(save, screenshot));
+                currentDirectory = kankyoModeFlag ? kankyoDirectoryName : sceneDirectoryName;
+                selectedDirectory = 0;
+                GetSceneDirectories();
+            }
+            else
+            {
+                selectedDirectory = Array.FindIndex(directoryList, d => d.Equals(target, StringComparison.OrdinalIgnoreCase));
+                selectedDirectory = selectedDirectory == -1 ? 0 : selectedDirectory;
             }
 
-            selectedSave = saveScenes.Count == 0 ? 0 : saveScenes.Count - 1;
+            if (target == currentDirectory) return;
 
-            saveScenes.Sort((a, b) => a.info.LastWriteTime.CompareTo(b.info.LastWriteTime));
-            saveManagerScrollPos.y = 0;
-        }
+            currentDirectory = target;
 
-        private void GetSaveDirectories()
+            GetScenes(target);
+        }
+        private void GetSceneDirectories()
         {
-            DirectoryInfo[] directoryInfo = new DirectoryInfo(saveScenePath).GetDirectories();
+            if (!Directory.Exists(saveScenePath))
+            {
+                Directory.CreateDirectory(saveScenePath);
+            }
+
+            if (!Directory.Exists(kankyoScenePath))
+            {
+                Directory.CreateDirectory(kankyoScenePath);
+            }
+
+            string root = kankyoModeFlag ? kankyoScenePath : saveScenePath;
+            DirectoryInfo[] directoryInfo = new DirectoryInfo(root).GetDirectories();
             directoryList = new string[directoryInfo.Length + 1];
-            directoryList[0] = baseDirectoryName;
+            directoryList[0] = kankyoModeFlag ? kankyoDirectoryName : sceneDirectoryName;
 
             for (int i = 0; i < directoryInfo.Length; i++)
             {
@@ -99,60 +118,50 @@ namespace CM3D2.MultipleMaids.Plugin
             }
         }
 
-        private void SwitchDirectory(string target)
+        private void GetScenes(string target)
         {
-            if (target.Equals(baseDirectoryName)) target = "";
+            string root = kankyoModeFlag ? kankyoScenePath : saveScenePath;
 
-            string targetDirectory = Path.Combine(saveScenePath, target);
+            scenes.Clear();
 
-            if (!Directory.Exists(targetDirectory))
+            if (target.Equals(sceneDirectoryName) || target.Equals(kankyoDirectoryName))
             {
-                currentDirectory = "";
-                selectedDirectory = 0;
-                GetSaveDirectories();
+                target = "";
             }
-            else
-            {
-                selectedDirectory = Array.FindIndex(directoryList, d => d.Equals(target, StringComparison.OrdinalIgnoreCase));
-                selectedDirectory = selectedDirectory == -1 ? 0 : selectedDirectory;
 
-                if (target == currentDirectory) return;
+            string workingPath = Path.Combine(root, target);
 
-                currentDirectory = target;
-            }
-            GetSaveScenes();
-        }
+            DirectoryInfo info = new DirectoryInfo(workingPath);
 
-        private void Overwrite()
-        {
-            string filePath = saveScenes[selectedSave].info.FullName;
-            if (!File.Exists(filePath))
+            foreach (var scene in info.GetFiles("*.png"))
             {
-                RefreshSaveManager();
-            }
-            else
-            {
-                File.Delete(filePath);
-                saveScenes.RemoveAt(selectedSave);
-                saveManagerScrollPos.y = 0;
+                Texture2D screenshot = new Texture2D(2, 2, TextureFormat.ARGB32, false);
+                screenshot.LoadImage(File.ReadAllBytes(scene.FullName));
+                scenes.Add(new ScenePng(scene, screenshot));
             }
+
+            selectedScene = scenes.Count == 0 ? 0 : scenes.Count - 1;
+            scenes.Sort((a, b) => a.info.LastWriteTime.CompareTo(b.info.LastWriteTime));
+            sceneManagerScrollPos.y = 0;
         }
 
-        private void MakeNewDirectory(string directoryName)
+        private void CreateDirectory(string directoryName)
         {
+            string root = kankyoModeFlag ? kankyoScenePath : saveScenePath;
             directoryName = string.Join("", directoryName.Split(Path.GetInvalidFileNameChars()));
-            string newDirectory = Path.Combine(saveScenePath, directoryName);
+            string newDirectory = Path.Combine(root, directoryName);
             if (!Directory.Exists(newDirectory))
             {
                 Directory.CreateDirectory(newDirectory);
             }
-            GetSaveDirectories();
+            GetSceneDirectories();
             SwitchDirectory(directoryName);
         }
 
         private void DeleteDirectory()
         {
-            string directory = Path.Combine(saveScenePath, directoryList[selectedDirectory]);
+            string root = kankyoModeFlag ? kankyoScenePath : saveScenePath;
+            string directory = Path.Combine(root, directoryList[selectedDirectory]);
             if (Directory.Exists(directory))
             {
                 DirectoryInfo dirInfo = new DirectoryInfo(directory);
@@ -161,39 +170,67 @@ namespace CM3D2.MultipleMaids.Plugin
                     finfo.Delete();
                 }
                 dirInfo.Delete();
+                currentDirectory = sceneDirectoryName;
             }
 
-            RefreshSaveManager();
+            RefreshSceneManager();
         }
 
-        private void DeleteFile()
+        private void DeleteScene()
         {
-            string file = saveScenes[selectedSave].info.FullName;
+            string file = scenes[selectedScene].info.FullName;
             if (File.Exists(file))
             {
-                saveScenes[selectedSave].info.Delete();
-                saveScenes.RemoveAt(selectedSave);
+                scenes[selectedScene].info.Delete();
+                scenes.RemoveAt(selectedScene);
             }
 
-            RefreshSaveManager();
+            RefreshSceneManager();
+        }
+
+        private void OverwriteScene()
+        {
+            string file = scenes[selectedScene].info.FullName;
+            if (!File.Exists(file))
+            {
+                RefreshSceneManager();
+            }
+            else
+            {
+                Debug.Log($"deleted {file}");
+                File.Delete(file);
+                scenes.RemoveAt(selectedScene);
+                sceneManagerScrollPos.y = 0;
+            }
         }
 
         private void SaveScene()
         {
-            string saveDirectory = Path.Combine(saveScenePath, currentDirectory);
+            string target = currentDirectory;
+
+            bool scene = target.Equals(sceneDirectoryName);
+            bool kankyo = target.Equals(kankyoDirectoryName);
+
+            if (scene || kankyo)
+                target = "";
+
+            string saveDirectory;
+
+            saveDirectory = kankyoModeFlag
+                ? Path.Combine(kankyoScenePath, target)
+                : Path.Combine(saveScenePath, target);
 
             if (!Directory.Exists(saveDirectory))
             {
-
                 thum_byte_to_base64_ = "";
                 thum_file_path_ = "";
-                RefreshSaveManager();
+                RefreshSceneManager();
                 return;
             }
 
-            string sceneString = SerializeScene(true);
+            string sceneString = SerializeScene();
 
-            #region MM GUI stuff
+            #region MM screenshot processing stuff
 
             Texture2D screenshot = new Texture2D(1, 1, TextureFormat.ARGB32, false);
             screenshot.LoadImage(File.ReadAllBytes(thum_file_path_));
@@ -227,62 +264,95 @@ namespace CM3D2.MultipleMaids.Plugin
             thum_byte_to_base64_ = "";
             thum_file_path_ = "";
 
-            string filePath = Path.Combine(saveDirectory, $"mmsave{DateTime.Now:yyyyMMddHHmmss}.png");
+            string sceneType = kankyoModeFlag ? "mmkankyou" : "mmsave";
+
+            string filePath;
+
+            filePath = Path.Combine(saveDirectory, $"{sceneType}{DateTime.Now:yyyyMMddHHmmss}.png");
+
             using (FileStream fileStream = File.Create(filePath))
             using (MemoryStream sceneStream = new MemoryStream(Encoding.Unicode.GetBytes(sceneString)))
             {
                 byte[] screenshotBuffer = screenshot.EncodeToPNG();
                 byte[] sceneBuffer = LZMA.Compress(sceneStream);
                 fileStream.Write(screenshotBuffer, 0, screenshotBuffer.Length);
+                if (kankyoModeFlag) fileStream.Write(kankyoHeader, 0, kankyoHeader.Length);
                 fileStream.Write(sceneBuffer, 0, sceneBuffer.Length);
             }
-            saveScenes.Add(new SavePng(new FileInfo(filePath), screenshot));
-            selectedSave = saveScenes.Count - 1;
+            scenes.Add(new ScenePng(new FileInfo(filePath), screenshot));
+            selectedScene = scenes.Count - 1;
         }
 
         private void ReadScene()
         {
-            string filePath = saveScenes[selectedSave].info.FullName;
+            string filePath = scenes[selectedScene].info.FullName;
             if (!File.Exists(filePath))
             {
-                RefreshSaveManager();
+                RefreshSceneManager();
                 sceneData = null;
                 return;
             }
 
             using (FileStream fileStream = File.OpenRead(filePath))
             {
-                long bytesRead = 0;
-                int j = 0;
-                int b;
+                long pos = fileStream.Position = fileStream.Length - pngEnd.Length;
+                byte[] buf = new byte[pngEnd.Length];
 
-                while ((b = fileStream.ReadByte()) != -1)
+                while (true)
                 {
-                    bytesRead++;
-                    while (j >= 0 && b != pngEnd[j])
+                    if (pos < 0)
                     {
-                        j = border[j];
+                        sceneData = null;
+                        return;
                     }
 
-                    if (++j == pngEnd.Length)
-                    {
-                        fileStream.Position += 4;
-                        using (MemoryStream sceneStream = LZMA.Decompress(fileStream))
-                        {
-                            sceneData = Encoding.Unicode.GetString(sceneStream.ToArray());
-                            return;
-                        }
-                    }
+                    fileStream.Position = pos;
+                    fileStream.Read(buf, 0, pngEnd.Length);
+
+                    if (BytesEqual(buf, pngEnd)) break;
+
+                    --pos;
                 }
-                sceneData = null;
+                fileStream.Position += 4;
+
+                byte[] kankyo = new byte[6];
+                fileStream.Read(kankyo, 0, kankyo.Length);
+
+                if (BytesEqual(kankyo, kankyoHeader))
+                {
+                    kankyoScene = true;
+                }
+                else
+                {
+                    kankyoScene = false;
+                    fileStream.Position -= 6;
+                }
+
+                using (MemoryStream sceneStream = LZMA.Decompress(fileStream))
+                {
+                    sceneData = Encoding.Unicode.GetString(sceneStream.ToArray());
+                    return;
+                }
+            }
+        }
+
+        private static bool BytesEqual(byte[] a, byte[] b)
+        {
+            if (a.Length != b.Length) return false;
+
+            for (long i = 0; i < a.Length; i++)
+            {
+                if (a[i] != b[i]) return false;
             }
+
+            return true;
         }
 
-        private class SavePng
+        private class ScenePng
         {
             public FileInfo info { get; }
             public Texture2D screenshot { get; }
-            public SavePng(FileInfo info, Texture2D screenshot)
+            public ScenePng(FileInfo info, Texture2D screenshot)
             {
                 this.info = info;
                 this.screenshot = screenshot;