瀏覽代碼

Add free look toggle to maid head

Double click while holding alt to toggle free look
habeebweeb 4 年之前
父節點
當前提交
c476fd8906

+ 0 - 1
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/GUI/Panes/PoseWindowPanes/MaidFaceLookPane.cs

@@ -27,7 +27,6 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
             if (updating) return;
 
             TBody body = this.meidoManager.ActiveMeido.Maid.body0;
-
             body.offsetLookTarget = new Vector3(lookYSlider.Value, 1f, lookXSlider.Value);
         }
 

+ 3 - 11
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/GUI/Windows/MainWindows/MaidPoseWindow.cs

@@ -17,7 +17,8 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
         public MaidPoseWindow(MeidoManager meidoManager)
         {
             this.meidoManager = meidoManager;
-            this.meidoManager.SelectMeido += OnMeidoSelect;
+            this.meidoManager.SelectMeido += (s, a) => UpdatePanes();
+            this.meidoManager.FreeLookChange += (s, a) => UpdatePanes();
 
             this.maidPosePane = new MaidPoseSelectorPane(meidoManager);
             this.maidFaceLookPane = new MaidFaceLookPane(meidoManager);
@@ -64,11 +65,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
         private void SetMaidFreeLook()
         {
             if (this.updating) return;
-            TBody body = this.meidoManager.ActiveMeido.Maid.body0;
-            bool isFreeLook = this.freeLookToggle.Value;
-            body.trsLookTarget = isFreeLook ? null : GameMain.Instance.MainCamera.transform;
-            this.meidoManager.ActiveMeido.IsFreeLook = isFreeLook;
-            if (isFreeLook) this.maidFaceLookPane.SetMaidLook();
+            this.meidoManager.ActiveMeido.IsFreeLook = this.freeLookToggle.Value;
         }
 
         private void UpdatePanes()
@@ -93,11 +90,6 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
             }
         }
 
-        private void OnMeidoSelect(object sender, MeidoChangeEventArgs args)
-        {
-            UpdatePanes();
-        }
-
         private void OnTabChange(object sender, EventArgs args)
         {
             UpdatePanes();

+ 9 - 0
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/Managers/MeidoManager.cs

@@ -18,6 +18,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
         public event EventHandler EndCallMeidos;
         public event EventHandler BeginCallMeidos;
         public event EventHandler AnimeChange;
+        public event EventHandler FreeLookChange;
         private int selectedMeido = 0;
         public int SelectedMeido
         {
@@ -96,6 +97,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
                 meido.SelectMeido -= ChangeMeido;
                 meido.BodyLoad -= OnEndCallMeidos;
                 meido.AnimeChange -= OnAnimeChangeEvent;
+                meido.FreeLookChange -= OnFreeLookChangeEvent;
                 meido.Unload();
             }
             ActiveMeidoList.Clear();
@@ -108,6 +110,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
                 meido.SelectMeido -= ChangeMeido;
                 meido.BodyLoad -= OnEndCallMeidos;
                 meido.AnimeChange -= OnAnimeChangeEvent;
+                meido.FreeLookChange -= OnFreeLookChangeEvent;
                 meido.Deactivate();
             }
             ActiveMeidoList.Clear();
@@ -124,6 +127,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
                 meido.SelectMeido += ChangeMeido;
                 meido.BodyLoad += OnEndCallMeidos;
                 meido.AnimeChange += OnAnimeChangeEvent;
+                meido.FreeLookChange += OnFreeLookChangeEvent;
             }
 
             for (int i = 0; i < ActiveMeidoList.Count; i++)
@@ -143,6 +147,11 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
             this.AnimeChange?.Invoke(this.ActiveMeido, EventArgs.Empty);
         }
 
+        private void OnFreeLookChangeEvent(object sender, EventArgs args)
+        {
+            this.FreeLookChange?.Invoke(this.ActiveMeido, args);
+        }
+
         private void OnSelectMeido(MeidoChangeEventArgs args)
         {
             SelectMeido?.Invoke(this, args);

+ 4 - 0
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/Meido/IK/DragHead.cs

@@ -55,6 +55,10 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
                 maid.body0.quaDefEyeL.eulerAngles = defEyeRotL;
                 maid.body0.quaDefEyeR.eulerAngles = defEyeRotR;
             }
+            if (dragType == DragType.RotLocalY || dragType == DragType.RotLocalXZ)
+            {
+                meido.IsFreeLook = !meido.IsFreeLook;
+            }
         }
 
         protected override void InitializeDrag()

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

@@ -22,13 +22,19 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
         public event EventHandler<MeidoChangeEventArgs> SelectMeido;
         public event EventHandler BodyLoad;
         public event EventHandler AnimeChange;
+        public event EventHandler FreeLookChange;
         private bool isLoading = false;
-        public bool IsFreeLook { get; set; }
-        private bool isIK = false;
-        public bool IsIK
+        public bool IsIK { get; private set; }
+        private bool isFreeLook;
+        public bool IsFreeLook
         {
-            get => this.isIK;
-            private set => this.isIK = value;
+            get => isFreeLook;
+            set
+            {
+                this.isFreeLook = value;
+                Maid.body0.trsLookTarget = this.isFreeLook ? null : GameMain.Instance.MainCamera.transform;
+                this.FreeLookChange?.Invoke(this, EventArgs.Empty);
+            }
         }
         public bool IsStop
         {