GravityControlPane.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. Meido meido = meidoManager.ActiveMeido;
  25. GUILayout.BeginHorizontal();
  26. GUI.enabled = enabled && meido.HairGravityValid;
  27. hairToggle.Draw();
  28. GUI.enabled = enabled && meido.SkirtGravityValid;
  29. skirtToggle.Draw();
  30. GUI.enabled = true;
  31. GUILayout.EndHorizontal();
  32. globalToggle.Draw();
  33. GUI.enabled = true;
  34. }
  35. public override void UpdatePane()
  36. {
  37. if (!meidoManager.HasActiveMeido) return;
  38. Meido meido = meidoManager.ActiveMeido;
  39. updating = true;
  40. hairToggle.Value = meido.HairGravityActive;
  41. skirtToggle.Value = meido.SkirtGravityActive;
  42. updating = false;
  43. }
  44. private void ToggleGravity(bool value, bool skirt = false)
  45. {
  46. if (updating) return;
  47. if (meidoManager.GlobalGravity)
  48. {
  49. foreach (Meido meido in meidoManager.ActiveMeidoList)
  50. {
  51. if (skirt) meido.SkirtGravityActive = value;
  52. else meido.HairGravityActive = value;
  53. }
  54. }
  55. else
  56. {
  57. if (skirt) meidoManager.ActiveMeido.SkirtGravityActive = value;
  58. else meidoManager.ActiveMeido.HairGravityActive = value;
  59. }
  60. }
  61. private void SetGlobalGravity(bool value) => meidoManager.GlobalGravity = value;
  62. }
  63. }