MaidIKPane.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using UnityEngine;
  2. namespace MeidoPhotoStudio.Plugin;
  3. public class MaidIKPane : BasePane
  4. {
  5. private readonly MeidoManager meidoManager;
  6. private readonly Toggle ikToggle;
  7. private readonly Toggle releaseIKToggle;
  8. private readonly Toggle boneIKToggle;
  9. public MaidIKPane(MeidoManager meidoManager)
  10. {
  11. this.meidoManager = meidoManager;
  12. ikToggle = new(Translation.Get("maidPoseWindow", "ikToggle"), true);
  13. ikToggle.ControlEvent += (_, _) =>
  14. SetIK(IKToggle.IK, ikToggle.Value);
  15. releaseIKToggle = new(Translation.Get("maidPoseWindow", "releaseToggle"));
  16. releaseIKToggle.ControlEvent += (_, _) =>
  17. SetIK(IKToggle.Release, releaseIKToggle.Value);
  18. boneIKToggle = new(Translation.Get("maidPoseWindow", "boneToggle"));
  19. boneIKToggle.ControlEvent += (_, _) =>
  20. SetIK(IKToggle.Bone, boneIKToggle.Value);
  21. }
  22. private enum IKToggle
  23. {
  24. IK,
  25. Release,
  26. Bone,
  27. }
  28. public override void UpdatePane()
  29. {
  30. updating = true;
  31. ikToggle.Value = meidoManager.ActiveMeido.IK;
  32. releaseIKToggle.Value = meidoManager.ActiveMeido.Stop;
  33. boneIKToggle.Value = meidoManager.ActiveMeido.Bone;
  34. updating = false;
  35. }
  36. public override void Draw()
  37. {
  38. var active = meidoManager.HasActiveMeido;
  39. GUILayout.BeginHorizontal();
  40. GUI.enabled = active;
  41. ikToggle.Draw();
  42. GUI.enabled = active && meidoManager.ActiveMeido.Stop;
  43. releaseIKToggle.Draw();
  44. GUI.enabled = active && ikToggle.Value;
  45. boneIKToggle.Draw();
  46. GUILayout.EndHorizontal();
  47. GUI.enabled = true;
  48. }
  49. protected override void ReloadTranslation()
  50. {
  51. ikToggle.Label = Translation.Get("maidPoseWindow", "ikToggle");
  52. releaseIKToggle.Label = Translation.Get("maidPoseWindow", "releaseToggle");
  53. boneIKToggle.Label = Translation.Get("maidPoseWindow", "boneToggle");
  54. }
  55. private void SetIK(IKToggle toggle, bool value)
  56. {
  57. if (updating)
  58. return;
  59. if (toggle is IKToggle.IK)
  60. meidoManager.ActiveMeido.IK = value;
  61. else if (toggle is IKToggle.Release)
  62. meidoManager.ActiveMeido.Stop = false;
  63. else if (toggle is IKToggle.Bone)
  64. meidoManager.ActiveMeido.Bone = value;
  65. }
  66. }