Browse Source

Add callback to Meido body load

habeebweeb 4 years ago
parent
commit
826bec34e4

+ 1 - 8
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/Managers/MeidoManager.cs

@@ -139,8 +139,6 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
         {
         {
             BeginCallMeidos?.Invoke(this, EventArgs.Empty);
             BeginCallMeidos?.Invoke(this, EventArgs.Empty);
 
 
-            bool hadActiveMeidos = HasActiveMeido;
-
             UnloadMeidos();
             UnloadMeidos();
 
 
             if (SelectMeidoList.Count == 0)
             if (SelectMeidoList.Count == 0)
@@ -156,12 +154,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
 
 
         private System.Collections.IEnumerator LoadMeidos()
         private System.Collections.IEnumerator LoadMeidos()
         {
         {
-            foreach (int slot in SelectMeidoList)
-            {
-                Meido meido = Meidos[slot];
-                ActiveMeidoList.Add(meido);
-                meido.BeginLoad();
-            }
+            foreach (int slot in SelectMeidoList) ActiveMeidoList.Add(Meidos[slot]);
 
 
             for (int i = 0; i < ActiveMeidoList.Count; i++) ActiveMeidoList[i].Load(i);
             for (int i = 0; i < ActiveMeidoList.Count; i++) ActiveMeidoList[i].Load(i);
 
 

+ 40 - 38
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/Meido/Meido.cs

@@ -54,7 +54,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
         public bool Loading { get; private set; }
         public bool Loading { get; private set; }
         public string FirstName => Maid.status.firstName;
         public string FirstName => Maid.status.firstName;
         public string LastName => Maid.status.lastName;
         public string LastName => Maid.status.lastName;
-        public bool Busy => Maid.IsBusy && Loading;
+        public bool Busy => Maid.IsBusy || Loading;
         public bool CurlingFront => Maid.IsItemChange("skirt", "めくれスカート")
         public bool CurlingFront => Maid.IsItemChange("skirt", "めくれスカート")
             || Maid.IsItemChange("onepiece", "めくれスカート");
             || Maid.IsItemChange("onepiece", "めくれスカート");
         public bool CurlingBack => Maid.IsItemChange("skirt", "めくれスカート後ろ")
         public bool CurlingBack => Maid.IsItemChange("skirt", "めくれスカート後ろ")
@@ -171,19 +171,17 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
             IKManager.SelectMaid += (s, args) => OnUpdateMeido(args);
             IKManager.SelectMaid += (s, args) => OnUpdateMeido(args);
         }
         }
 
 
-        public void BeginLoad()
+        public void Load(int slot)
         {
         {
+            if (Busy) return;
+
+            Slot = slot;
+
             FreeLook = false;
             FreeLook = false;
             Maid.Visible = true;
             Maid.Visible = true;
             Body.boHeadToCam = true;
             Body.boHeadToCam = true;
             Body.boEyeToCam = true;
             Body.boEyeToCam = true;
             Body.SetBoneHitHeightY(-1000f);
             Body.SetBoneHitHeightY(-1000f);
-        }
-
-        public void Load(int slot)
-        {
-            Slot = slot;
-            Loading = true;
 
 
             if (!Body.isLoadedBody)
             if (!Body.isLoadedBody)
             {
             {
@@ -191,16 +189,46 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
                 Maid.AllProcPropSeqStart();
                 Maid.AllProcPropSeqStart();
             }
             }
 
 
-            GameMain.Instance.StartCoroutine(Load());
+            StartLoad(OnBodyLoad);
         }
         }
 
 
-        private IEnumerator Load()
+        private void StartLoad(Action callback)
         {
         {
-            while (Maid.IsBusy) yield return null;
+            if (Loading) return;
+            GameMain.Instance.StartCoroutine(Load(callback));
+        }
 
 
+        private IEnumerator Load(Action callback)
+        {
+            Loading = true;
+            while (Maid.IsBusy) yield return null;
             yield return new WaitForEndOfFrame();
             yield return new WaitForEndOfFrame();
+            callback();
+            Loading = false;
+        }
+
+        private void OnBodyLoad()
+        {
+            if (!initialized)
+            {
+                DefaultEyeRotL = Body.quaDefEyeL;
+                DefaultEyeRotR = Body.quaDefEyeR;
+
+                InitializeGravityControls();
+
+                initialized = true;
+            }
+
+            if (BlendSetValueBackup == null) BackupBlendSetValues();
+
+            if (HairGravityValid) hairGravityDragPoint.Move += OnGravityEvent;
+            if (SkirtGravityValid) skirtGravityDragPoint.Move += OnGravityEvent;
+
+            IKManager.Initialize();
 
 
-            OnBodyLoad();
+            IK = true;
+            Stop = false;
+            Bone = false;
         }
         }
 
 
         public void Unload()
         public void Unload()
@@ -583,32 +611,6 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
             return cache;
             return cache;
         }
         }
 
 
-        private void OnBodyLoad()
-        {
-            if (!initialized)
-            {
-                TMorph faceMorph = Body.Face.morph;
-                DefaultEyeRotL = Body.quaDefEyeL;
-                DefaultEyeRotR = Body.quaDefEyeR;
-
-                InitializeGravityControls();
-
-                initialized = true;
-            }
-
-            if (BlendSetValueBackup == null) BackupBlendSetValues();
-
-            if (HairGravityValid) hairGravityDragPoint.Move += OnGravityEvent;
-            if (SkirtGravityValid) skirtGravityDragPoint.Move += OnGravityEvent;
-
-            IKManager.Initialize();
-
-            IK = true;
-            Stop = false;
-            Bone = false;
-            Loading = false;
-        }
-
         private void InitializeGravityControls()
         private void InitializeGravityControls()
         {
         {
             hairGravityControl = InitializeGravityControl("hair");
             hairGravityControl = InitializeGravityControl("hair");