Sfoglia il codice sorgente

Add head/eye to camera toggle

habeebweeb 4 anni fa
parent
commit
55c923db0b

+ 5 - 3
COM3D2.MeidoPhotoStudio.Plugin/Config/MeidoPhotoStudio/Translations/en/translation.ui.json

@@ -65,10 +65,12 @@
         "baseTab": "Base",
         "customTab": "Custom"
     },
-    "freeLook": {
+    "freeLookPane": {
         "freeLookToggle": "F-Look",
-        "x": "Look X",
-        "y": "Look Y"
+        "headToCamToggle": "Head",
+        "eyeToCamToggle": "Eye",
+        "xSlider": "Look X",
+        "ySlider": "Look Y"
     },
     "attachMpnPropPane": {
         "attachButton": "Attach",

+ 2 - 2
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/GUI/Panes/MainWindowPanes/PoseWindowPane.cs

@@ -39,7 +39,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
             this.maidFaceLookPane = AddPane(new MaidFaceLookPane(meidoManager));
             this.maidFaceLookPane.Enabled = false;
 
-            this.freeLookToggle = new Toggle(Translation.Get("freeLook", "freeLookToggle"), false);
+            this.freeLookToggle = new Toggle(Translation.Get("freeLookPane", "freeLookToggle"), false);
             this.freeLookToggle.ControlEvent += (s, a) => SetMaidFreeLook();
 
             this.savePoseToggle = new Toggle(Translation.Get("posePane", "saveToggle"));
@@ -68,7 +68,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
 
         protected override void ReloadTranslation()
         {
-            this.freeLookToggle.Label = Translation.Get("freeLook", "freeLookToggle");
+            this.freeLookToggle.Label = Translation.Get("freeLookPane", "freeLookToggle");
             this.savePoseToggle.Label = Translation.Get("posePane", "saveToggle");
             this.saveHandToggle.Label = Translation.Get("handPane", "saveToggle");
             this.flipButton.Label = Translation.Get("flipIK", "flipButton");

+ 38 - 10
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/GUI/Panes/PoseWindowPanes/MaidFreeLookPane.cs

@@ -7,29 +7,48 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
         private MeidoManager meidoManager;
         private Slider lookXSlider;
         private Slider lookYSlider;
+        private Toggle headToCamToggle;
+        private Toggle eyeToCamToggle;
 
         public MaidFaceLookPane(MeidoManager meidoManager)
         {
             this.meidoManager = meidoManager;
-            this.lookXSlider = new Slider(Translation.Get("freeLook", "x"), -0.6f, 0.6f);
+            this.lookXSlider = new Slider(Translation.Get("freeLookPane", "xSlider"), -0.6f, 0.6f);
             this.lookXSlider.ControlEvent += (s, a) => SetMaidLook();
 
-            this.lookYSlider = new Slider(Translation.Get("freeLook", "y"), 0.5f, -0.55f);
+            this.lookYSlider = new Slider(Translation.Get("freeLookPane", "ySlider"), 0.5f, -0.55f);
             this.lookYSlider.ControlEvent += (s, a) => SetMaidLook();
 
+            this.headToCamToggle = new Toggle(Translation.Get("freeLookPane", "headToCamToggle"));
+            this.headToCamToggle.ControlEvent += (s, a) => SetHeadToCam(headToCamToggle.Value, eye: false);
+
+            this.eyeToCamToggle = new Toggle(Translation.Get("freeLookPane", "eyeToCamToggle"));
+            this.eyeToCamToggle.ControlEvent += (s, a) => SetHeadToCam(eyeToCamToggle.Value, eye: true);
         }
 
         protected override void ReloadTranslation()
         {
-            this.lookXSlider.Label = Translation.Get("freeLook", "x");
-            this.lookYSlider.Label = Translation.Get("freeLook", "y");
+            this.lookXSlider.Label = Translation.Get("freeLookPane", "xSlider");
+            this.lookYSlider.Label = Translation.Get("freeLookPane", "ySlider");
+            this.headToCamToggle.Label = Translation.Get("freeLookPane", "headToCamToggle");
+            this.eyeToCamToggle.Label = Translation.Get("freeLookPane", "eyeToCamToggle");
+        }
+
+        public void SetHeadToCam(bool value, bool eye = false)
+        {
+            if (updating) return;
+
+            Meido meido = this.meidoManager.ActiveMeido;
+
+            if (eye) meido.EyeToCam = value;
+            else meido.HeadToCam = value;
         }
 
         public void SetMaidLook()
         {
             if (updating) return;
 
-            TBody body = this.meidoManager.ActiveMeido.Maid.body0;
+            TBody body = this.meidoManager.ActiveMeido.Body;
             body.offsetLookTarget = new Vector3(lookYSlider.Value, 1f, lookXSlider.Value);
         }
 
@@ -47,11 +66,13 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
 
         public override void UpdatePane()
         {
-            TBody body = this.meidoManager.ActiveMeido.Maid.body0;
+            Meido meido = this.meidoManager.ActiveMeido;
             this.updating = true;
             this.SetBounds();
-            this.lookXSlider.Value = body.offsetLookTarget.z;
-            this.lookYSlider.Value = body.offsetLookTarget.x;
+            this.lookXSlider.Value = meido.Body.offsetLookTarget.z;
+            this.lookYSlider.Value = meido.Body.offsetLookTarget.x;
+            this.eyeToCamToggle.Value = meido.EyeToCam;
+            this.headToCamToggle.Value = meido.HeadToCam;
             this.updating = false;
         }
 
@@ -59,8 +80,15 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
         {
             GUI.enabled = this.meidoManager.HasActiveMeido && this.meidoManager.ActiveMeido.FreeLook;
             GUILayout.BeginHorizontal();
-            lookXSlider.Draw();
-            lookYSlider.Draw();
+            this.lookXSlider.Draw();
+            this.lookYSlider.Draw();
+            GUILayout.EndHorizontal();
+
+            GUI.enabled = this.meidoManager.HasActiveMeido;
+
+            GUILayout.BeginHorizontal();
+            this.eyeToCamToggle.Draw();
+            this.headToCamToggle.Draw();
             GUILayout.EndHorizontal();
 
             GUI.enabled = true;

+ 28 - 1
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/Meido/Meido.cs

@@ -66,6 +66,28 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
                 OnUpdateMeido();
             }
         }
+        public bool HeadToCam
+        {
+            get => !Body.isLoadedBody ? false : Body.boHeadToCam;
+            set
+            {
+                if (!Body.isLoadedBody || HeadToCam == value) return;
+                Body.boHeadToCam = value;
+                if (!HeadToCam && !EyeToCam) FreeLook = false;
+                OnUpdateMeido();
+            }
+        }
+        public bool EyeToCam
+        {
+            get => !Body.isLoadedBody ? false : Body.boEyeToCam;
+            set
+            {
+                if (!Body.isLoadedBody || EyeToCam == value) return;
+                Body.boEyeToCam = value;
+                if (!HeadToCam && !EyeToCam) FreeLook = false;
+                OnUpdateMeido();
+            }
+        }
         public bool Stop
         {
             get
@@ -79,7 +101,12 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
                 else
                 {
                     if (value) Maid.GetAnimation().Stop();
-                    else this.SetPose(this.CachedPose.Pose);
+                    else
+                    {
+                        Body.boEyeToCam = true;
+                        Body.boHeadToCam = true;
+                        this.SetPose(this.CachedPose.Pose);
+                    }
                     OnUpdateMeido();
                 }
             }