GravityControlPane.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using UnityEngine;
  2. namespace COM3D2.MeidoPhotoStudio.Plugin
  3. {
  4. internal class GravityControlPane : BasePane
  5. {
  6. private readonly MeidoManager meidoManager;
  7. private readonly Toggle hairToggle;
  8. private readonly Toggle skirtToggle;
  9. private readonly Toggle globalToggle;
  10. public GravityControlPane(MeidoManager meidoManager)
  11. {
  12. this.meidoManager = meidoManager;
  13. hairToggle = new Toggle(Translation.Get("gravityControlPane", "hairToggle"));
  14. hairToggle.ControlEvent += (s, a) => ToggleGravity(hairToggle.Value, skirt: false);
  15. skirtToggle = new Toggle(Translation.Get("gravityControlPane", "skirtToggle"));
  16. skirtToggle.ControlEvent += (s, a) => ToggleGravity(skirtToggle.Value, skirt: true);
  17. globalToggle = new Toggle(Translation.Get("gravityControlPane", "globalToggle"));
  18. globalToggle.ControlEvent += (s, a) => SetGlobalGravity(globalToggle.Value);
  19. }
  20. public override void Draw()
  21. {
  22. bool enabled = meidoManager.HasActiveMeido;
  23. GUI.enabled = enabled;
  24. MpsGui.Header("Gravity Control");
  25. MpsGui.WhiteLine();
  26. Meido meido = meidoManager.ActiveMeido;
  27. GUILayout.BeginHorizontal();
  28. GUI.enabled = enabled && meido.HairGravityValid;
  29. hairToggle.Draw();
  30. GUI.enabled = enabled && meido.SkirtGravityValid;
  31. skirtToggle.Draw();
  32. GUILayout.EndHorizontal();
  33. GUI.enabled = enabled;
  34. globalToggle.Draw();
  35. GUI.enabled = true;
  36. }
  37. public override void UpdatePane()
  38. {
  39. if (!meidoManager.HasActiveMeido) return;
  40. Meido meido = meidoManager.ActiveMeido;
  41. updating = true;
  42. hairToggle.Value = meido.HairGravityActive;
  43. skirtToggle.Value = meido.SkirtGravityActive;
  44. updating = false;
  45. }
  46. private void ToggleGravity(bool value, bool skirt = false)
  47. {
  48. if (updating) return;
  49. if (meidoManager.GlobalGravity)
  50. {
  51. foreach (Meido meido in meidoManager.ActiveMeidoList)
  52. {
  53. if (skirt) meido.SkirtGravityActive = value;
  54. else meido.HairGravityActive = value;
  55. }
  56. }
  57. else
  58. {
  59. if (skirt) meidoManager.ActiveMeido.SkirtGravityActive = value;
  60. else meidoManager.ActiveMeido.HairGravityActive = value;
  61. }
  62. }
  63. private void SetGlobalGravity(bool value) => meidoManager.GlobalGravity = value;
  64. }
  65. }