EffectPane.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using UnityEngine;
  2. namespace MeidoPhotoStudio.Plugin;
  3. public abstract class EffectPane<T> : BasePane
  4. where T : IEffectManager
  5. {
  6. protected readonly Toggle effectToggle;
  7. protected readonly Button resetEffectButton;
  8. private bool enabled;
  9. protected EffectPane(EffectManager effectManager)
  10. {
  11. EffectManager = effectManager.Get<T>();
  12. resetEffectButton = new(Translation.Get("effectsPane", "reset"));
  13. resetEffectButton.ControlEvent += (_, _) =>
  14. ResetEffect();
  15. effectToggle = new(Translation.Get("effectsPane", "onToggle"));
  16. effectToggle.ControlEvent += (_, _) =>
  17. Enabled = effectToggle.Value;
  18. }
  19. public override bool Enabled
  20. {
  21. get => enabled;
  22. set
  23. {
  24. enabled = value;
  25. if (updating)
  26. return;
  27. EffectManager.SetEffectActive(enabled);
  28. }
  29. }
  30. protected abstract T EffectManager { get; set; }
  31. public override void UpdatePane()
  32. {
  33. if (!EffectManager.Ready)
  34. return;
  35. updating = true;
  36. effectToggle.Value = EffectManager.Active;
  37. UpdateControls();
  38. updating = false;
  39. }
  40. public override void Draw()
  41. {
  42. GUILayout.BeginHorizontal();
  43. effectToggle.Draw();
  44. GUILayout.FlexibleSpace();
  45. GUI.enabled = Enabled;
  46. resetEffectButton.Draw();
  47. GUILayout.EndHorizontal();
  48. DrawPane();
  49. GUI.enabled = true;
  50. }
  51. protected override void ReloadTranslation()
  52. {
  53. updating = true;
  54. effectToggle.Label = Translation.Get("effectsPane", "onToggle");
  55. resetEffectButton.Label = Translation.Get("effectsPane", "reset");
  56. TranslatePane();
  57. updating = false;
  58. }
  59. protected abstract void TranslatePane();
  60. protected abstract void UpdateControls();
  61. protected abstract void DrawPane();
  62. private void ResetEffect()
  63. {
  64. EffectManager.Deactivate();
  65. EffectManager.SetEffectActive(true);
  66. UpdatePane();
  67. }
  68. }