Преглед на файлове

Move blend set pane and update dropdown

Face blendset dropdown was not updated when changing maids
habeebweeb преди 4 години
родител
ревизия
a1d3efd25b

+ 78 - 0
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/GUI/Panes/FaceWindowPanes/MaidFaceBlendPane.cs

@@ -0,0 +1,78 @@
+using System;
+using UnityEngine;
+
+namespace COM3D2.MeidoPhotoStudio.Plugin
+{
+    internal class MaidFaceBlendPane : BasePane
+    {
+        private MeidoManager meidoManager;
+        private Dropdown faceBlendDropdown;
+        private Button facePrevButton;
+        private Button faceNextButton;
+
+        public MaidFaceBlendPane(MeidoManager meidoManager)
+        {
+            this.meidoManager = meidoManager;
+
+            this.faceBlendDropdown = new Dropdown(
+                Translation.GetArray("faceBlendPresetsDropdown", Constants.FaceBlendList)
+            );
+            this.faceBlendDropdown.SelectionChange += (s, a) =>
+            {
+                if (updating) return;
+                string faceBlend = Constants.FaceBlendList[this.faceBlendDropdown.SelectedItemIndex];
+                this.meidoManager.ActiveMeido.SetFaceBlendSet(faceBlend);
+            };
+
+            this.facePrevButton = new Button("<");
+            this.facePrevButton.ControlEvent += (s, a) => this.faceBlendDropdown.Step(-1);
+
+            this.faceNextButton = new Button(">");
+            this.faceNextButton.ControlEvent += (s, a) => this.faceBlendDropdown.Step(1);
+        }
+
+        protected override void ReloadTranslation()
+        {
+            this.updating = true;
+            faceBlendDropdown.SetDropdownItems(
+                Translation.GetArray("faceBlendPresetsDropdown", Constants.FaceBlendList)
+            );
+            this.updating = false;
+        }
+
+        public override void Draw()
+        {
+            float arrowButtonSize = 30;
+            GUILayoutOption[] arrowLayoutOptions = {
+                GUILayout.Width(arrowButtonSize),
+                GUILayout.Height(arrowButtonSize)
+            };
+
+            float dropdownButtonHeight = arrowButtonSize;
+            float dropdownButtonWidth = 153f;
+            GUILayoutOption[] dropdownLayoutOptions = new GUILayoutOption[] {
+                GUILayout.Height(dropdownButtonHeight),
+                GUILayout.Width(dropdownButtonWidth)
+            };
+
+            GUI.enabled = this.meidoManager.HasActiveMeido;
+
+            GUILayout.BeginHorizontal();
+            this.facePrevButton.Draw(arrowLayoutOptions);
+            this.faceBlendDropdown.Draw(dropdownLayoutOptions);
+            this.faceNextButton.Draw(arrowLayoutOptions);
+            GUILayout.EndHorizontal();
+            GUI.enabled = true;
+        }
+
+        public override void UpdatePane()
+        {
+            this.updating = true;
+            int faceBlendSetIndex = Constants.FaceBlendList.FindIndex(
+                blend => blend == this.meidoManager.ActiveMeido.FaceBlendSet
+            );
+            this.faceBlendDropdown.SelectedItemIndex = Mathf.Clamp(faceBlendSetIndex, 0, Constants.FaceBlendList.Count);
+            this.updating = false;
+        }
+    }
+}

+ 5 - 56
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/GUI/Panes/MainWindowPanes/FaceWindowPane.cs

@@ -7,74 +7,27 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
     {
         private MeidoManager meidoManager;
         private MaidFaceSliderPane maidFaceSliderPane;
+        private MaidFaceBlendPane maidFaceBlendPane;
         private MaidSwitcherPane maidSwitcherPane;
-        private Dropdown faceBlendDropdown;
-        private Button facePrevButton;
-        private Button faceNextButton;
 
         public FaceWindowPane(MeidoManager meidoManager, MaidSwitcherPane maidSwitcherPane)
         {
             this.meidoManager = meidoManager;
-            // this.meidoManager.UpdateMeido += UpdateMeido;
 
             this.maidSwitcherPane = maidSwitcherPane;
 
             this.maidFaceSliderPane = new MaidFaceSliderPane(this.meidoManager);
-
-            this.faceBlendDropdown = new Dropdown(
-                Translation.GetArray("faceBlendPresetsDropdown", Constants.FaceBlendList)
-            );
-            this.faceBlendDropdown.SelectionChange += (s, a) =>
-            {
-                if (updating) return;
-                string faceBlend = Constants.FaceBlendList[this.faceBlendDropdown.SelectedItemIndex];
-                this.meidoManager.ActiveMeido.SetFaceBlend(faceBlend);
-                this.UpdatePanes();
-            };
-
-            this.facePrevButton = new Button("<");
-            this.facePrevButton.ControlEvent += (s, a) => this.faceBlendDropdown.Step(-1);
-
-            this.faceNextButton = new Button(">");
-            this.faceNextButton.ControlEvent += (s, a) => this.faceBlendDropdown.Step(1);
-        }
-
-        protected override void ReloadTranslation()
-        {
-            updating = true;
-            faceBlendDropdown.SetDropdownItems(
-                Translation.GetArray("faceBlendPresetsDropdown", Constants.FaceBlendList)
-            );
-            updating = false;
+            this.maidFaceBlendPane = new MaidFaceBlendPane(this.meidoManager);
         }
 
         public override void Draw()
         {
-            float arrowButtonSize = 30;
-            GUILayoutOption[] arrowLayoutOptions = {
-                GUILayout.Width(arrowButtonSize),
-                GUILayout.Height(arrowButtonSize)
-            };
-
-            float dropdownButtonHeight = arrowButtonSize;
-            float dropdownButtonWidth = 153f;
-            GUILayoutOption[] dropdownLayoutOptions = new GUILayoutOption[] {
-                GUILayout.Height(dropdownButtonHeight),
-                GUILayout.Width(dropdownButtonWidth)
-            };
-
             this.maidSwitcherPane.Draw();
 
-            GUI.enabled = this.meidoManager.HasActiveMeido;
-
-            GUILayout.BeginHorizontal();
-            this.facePrevButton.Draw(arrowLayoutOptions);
-            this.faceBlendDropdown.Draw(dropdownLayoutOptions);
-            this.faceNextButton.Draw(arrowLayoutOptions);
-            GUILayout.EndHorizontal();
-
             this.scrollPos = GUILayout.BeginScrollView(this.scrollPos);
 
+            this.maidFaceBlendPane.Draw();
+
             this.maidFaceSliderPane.Draw();
 
             GUILayout.EndScrollView();
@@ -88,12 +41,8 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
                 this.meidoManager.ActiveMeido.Maid.boMabataki = false;
                 this.meidoManager.ActiveMeido.Maid.body0.Face.morph.EyeMabataki = 0f;
                 this.maidFaceSliderPane.UpdatePane();
+                this.maidFaceBlendPane.UpdatePane();
             }
         }
-
-        private void UpdateMeido(object sender, EventArgs args)
-        {
-            UpdatePanes();
-        }
     }
 }

+ 19 - 5
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/Meido/Meido.cs

@@ -12,6 +12,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
         private static CharacterMgr characterMgr = GameMain.Instance.CharacterMgr;
         public readonly int stockNo;
         public static readonly PoseInfo defaultPose = new PoseInfo(0, 0, "pose_taiki_f");
+        public static readonly string defaultFaceBlendSet = "通常";
         public Maid Maid { get; private set; }
         public Texture2D Image { get; private set; }
         public string FirstName { get; private set; }
@@ -41,7 +42,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
                 if (this.isFreeLook == value) return;
                 this.isFreeLook = value;
                 Maid.body0.trsLookTarget = this.isFreeLook ? null : GameMain.Instance.MainCamera.transform;
-                this.UpdateMeido?.Invoke(this, MeidoUpdateEventArgs.Empty);
+                OnUpdateMeido();
             }
         }
         public bool IsStop
@@ -58,7 +59,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
                 {
                     if (value) Maid.GetAnimation().Stop();
                     else this.SetPose(this.CachedPose.PoseName);
-                    this.UpdateMeido?.Invoke(this, MeidoUpdateEventArgs.Empty);
+                    OnUpdateMeido();
                 }
             }
         }
@@ -71,7 +72,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
                 if (this.isBone == value) return;
                 this.isBone = value;
                 if (this.dragPointManager != null) this.dragPointManager.IsBone = this.isBone;
-                this.UpdateMeido?.Invoke(this, MeidoUpdateEventArgs.Empty);
+                OnUpdateMeido();
             }
         }
         public bool Visible
@@ -85,6 +86,12 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
             get => cachedPose;
             private set => cachedPose = value;
         }
+        private string faceBlendSet = defaultFaceBlendSet;
+        public string FaceBlendSet
+        {
+            get => faceBlendSet;
+            private set => faceBlendSet = value;
+        }
 
         public Meido(int stockMaidIndex)
         {
@@ -254,13 +261,15 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
             Maid.body0.jbMuneR.enabled = !drag;
         }
 
-        public void SetFaceBlend(string blendValue)
+        public void SetFaceBlendSet(string blendSet)
         {
+            FaceBlendSet = blendSet;
             Maid.boMabataki = false;
             TMorph morph = Maid.body0.Face.morph;
             morph.EyeMabataki = 0f;
-            morph.MulBlendValues(blendValue, 1f);
+            morph.MulBlendValues(blendSet, 1f);
             morph.FixBlendValues_Face();
+            OnUpdateMeido();
         }
 
         public void SetFaceBlendValue(string hash, float value)
@@ -321,6 +330,11 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
             this.IsBone = false;
         }
 
+        private void OnUpdateMeido(MeidoUpdateEventArgs args = null)
+        {
+            this.UpdateMeido?.Invoke(this, args ?? MeidoUpdateEventArgs.Empty);
+        }
+
         private void OnMeidoSelect(object sender, MeidoUpdateEventArgs args)
         {
             UpdateMeido?.Invoke(this, args);