MaidIKPane.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using UnityEngine;
  2. namespace COM3D2.MeidoPhotoStudio.Plugin
  3. {
  4. public class MaidIKPane : BasePane
  5. {
  6. private MeidoManager meidoManager;
  7. private Toggle ikToggle;
  8. private Toggle releaseIKToggle;
  9. private Toggle boneIKToggle;
  10. private enum IKToggle
  11. {
  12. IK, Release, Bone
  13. }
  14. public MaidIKPane(MeidoManager meidoManager)
  15. {
  16. this.meidoManager = meidoManager;
  17. this.meidoManager.AnimeChange += (s, a) =>
  18. {
  19. if (!this.meidoManager.HasActiveMeido) return;
  20. if (TabsPane.SelectedTab == Constants.Window.Pose) Update();
  21. };
  22. this.ikToggle = new Toggle(Translation.Get("maidPoseWindow", "ikToggle"), true);
  23. this.ikToggle.ControlEvent += (s, a) => SetIK(IKToggle.IK, this.ikToggle.Value);
  24. this.releaseIKToggle = new Toggle(Translation.Get("maidPoseWindow", "releaseToggle"));
  25. this.releaseIKToggle.ControlEvent += (s, a) => SetIK(IKToggle.Release, this.releaseIKToggle.Value);
  26. this.boneIKToggle = new Toggle(Translation.Get("maidPoseWindow", "boneToggle"));
  27. this.boneIKToggle.ControlEvent += (s, a) => SetIK(IKToggle.Bone, this.boneIKToggle.Value);
  28. }
  29. private void SetIK(IKToggle toggle, bool value)
  30. {
  31. if (updating) return;
  32. if (toggle == IKToggle.IK) this.meidoManager.ActiveMeido.SetIKActive(value);
  33. else if (toggle == IKToggle.Release) this.meidoManager.ActiveMeido.IKRelease();
  34. else if (toggle == IKToggle.Bone) this.meidoManager.ActiveMeido.IsBone = value;
  35. }
  36. public override void Update()
  37. {
  38. this.updating = true;
  39. this.ikToggle.Value = this.meidoManager.ActiveMeido.IsIK;
  40. this.releaseIKToggle.Value = this.meidoManager.ActiveMeido.IsStop;
  41. this.boneIKToggle.Value = this.meidoManager.ActiveMeido.IsBone;
  42. this.updating = false;
  43. }
  44. public override void Draw(params GUILayoutOption[] layoutOptions)
  45. {
  46. bool active = this.meidoManager.HasActiveMeido;
  47. GUILayout.BeginHorizontal();
  48. GUI.enabled = active;
  49. this.ikToggle.Draw();
  50. GUI.enabled = active ? this.meidoManager.ActiveMeido.IsStop : false;
  51. this.releaseIKToggle.Draw();
  52. GUI.enabled = active ? this.ikToggle.Value : false;
  53. this.boneIKToggle.Draw();
  54. GUILayout.EndHorizontal();
  55. }
  56. }
  57. }