PropManagerPane.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. using UnityEngine;
  2. namespace MeidoPhotoStudio.Plugin;
  3. public class PropManagerPane : BasePane
  4. {
  5. private readonly PropManager propManager;
  6. private readonly Dropdown propDropdown;
  7. private readonly Button previousPropButton;
  8. private readonly Button nextPropButton;
  9. private readonly Toggle dragPointToggle;
  10. private readonly Toggle gizmoToggle;
  11. private readonly Toggle shadowCastingToggle;
  12. private readonly Button deletePropButton;
  13. private readonly Button copyPropButton;
  14. private string propManagerHeader;
  15. public PropManagerPane(PropManager propManager)
  16. {
  17. this.propManager = propManager;
  18. this.propManager.PropListChange += (_, _) =>
  19. {
  20. UpdatePropList();
  21. UpdateToggles();
  22. };
  23. this.propManager.FromPropSelect += (_, _) =>
  24. {
  25. updating = true;
  26. propDropdown.SelectedItemIndex = CurrentDoguIndex;
  27. updating = false;
  28. UpdateToggles();
  29. };
  30. propDropdown = new(this.propManager.PropNameList);
  31. propDropdown.SelectionChange += (_, _) =>
  32. {
  33. if (updating)
  34. return;
  35. this.propManager.CurrentPropIndex = propDropdown.SelectedItemIndex;
  36. UpdateToggles();
  37. };
  38. previousPropButton = new("<");
  39. previousPropButton.ControlEvent += (_, _) =>
  40. propDropdown.Step(-1);
  41. nextPropButton = new(">");
  42. nextPropButton.ControlEvent += (_, _) =>
  43. propDropdown.Step(1);
  44. dragPointToggle = new(Translation.Get("propManagerPane", "dragPointToggle"));
  45. dragPointToggle.ControlEvent += (_, _) =>
  46. {
  47. if (updating || this.propManager.PropCount is 0)
  48. return;
  49. this.propManager.CurrentProp.DragPointEnabled = dragPointToggle.Value;
  50. };
  51. gizmoToggle = new(Translation.Get("propManagerPane", "gizmoToggle"));
  52. gizmoToggle.ControlEvent += (_, _) =>
  53. {
  54. if (updating || this.propManager.PropCount is 0)
  55. return;
  56. this.propManager.CurrentProp.GizmoEnabled = gizmoToggle.Value;
  57. };
  58. shadowCastingToggle = new(Translation.Get("propManagerPane", "shadowCastingToggle"));
  59. shadowCastingToggle.ControlEvent += (_, _) =>
  60. {
  61. if (updating || this.propManager.PropCount is 0)
  62. return;
  63. this.propManager.CurrentProp.ShadowCasting = shadowCastingToggle.Value;
  64. };
  65. copyPropButton = new(Translation.Get("propManagerPane", "copyButton"));
  66. copyPropButton.ControlEvent += (_, _) =>
  67. this.propManager.CopyProp(CurrentDoguIndex);
  68. deletePropButton = new(Translation.Get("propManagerPane", "deleteButton"));
  69. deletePropButton.ControlEvent += (_, _) =>
  70. this.propManager.RemoveProp(CurrentDoguIndex);
  71. propManagerHeader = Translation.Get("propManagerPane", "header");
  72. }
  73. private int CurrentDoguIndex =>
  74. propManager.CurrentPropIndex;
  75. public override void Draw()
  76. {
  77. const float buttonHeight = 30;
  78. var arrowLayoutOptions = new[]
  79. {
  80. GUILayout.Width(buttonHeight),
  81. GUILayout.Height(buttonHeight),
  82. };
  83. const float dropdownButtonWidth = 140f;
  84. var dropdownLayoutOptions = new[]
  85. {
  86. GUILayout.Height(buttonHeight),
  87. GUILayout.Width(dropdownButtonWidth),
  88. };
  89. MpsGui.Header(propManagerHeader);
  90. MpsGui.WhiteLine();
  91. GUI.enabled = propManager.PropCount > 0;
  92. GUILayout.BeginHorizontal();
  93. propDropdown.Draw(dropdownLayoutOptions);
  94. previousPropButton.Draw(arrowLayoutOptions);
  95. nextPropButton.Draw(arrowLayoutOptions);
  96. GUILayout.EndHorizontal();
  97. var noExpandWidth = GUILayout.ExpandWidth(false);
  98. GUILayout.BeginHorizontal();
  99. dragPointToggle.Draw(noExpandWidth);
  100. gizmoToggle.Draw(noExpandWidth);
  101. copyPropButton.Draw(noExpandWidth);
  102. deletePropButton.Draw(noExpandWidth);
  103. GUILayout.EndHorizontal();
  104. GUILayout.BeginHorizontal();
  105. shadowCastingToggle.Draw(noExpandWidth);
  106. GUILayout.EndHorizontal();
  107. GUI.enabled = true;
  108. }
  109. protected override void ReloadTranslation()
  110. {
  111. dragPointToggle.Label = Translation.Get("propManagerPane", "dragPointToggle");
  112. gizmoToggle.Label = Translation.Get("propManagerPane", "gizmoToggle");
  113. shadowCastingToggle.Label = Translation.Get("propManagerPane", "shadowCastingToggle");
  114. copyPropButton.Label = Translation.Get("propManagerPane", "copyButton");
  115. deletePropButton.Label = Translation.Get("propManagerPane", "deleteButton");
  116. propManagerHeader = Translation.Get("propManagerPane", "header");
  117. }
  118. private void UpdatePropList()
  119. {
  120. updating = true;
  121. propDropdown.SetDropdownItems(propManager.PropNameList, CurrentDoguIndex);
  122. updating = false;
  123. }
  124. private void UpdateToggles()
  125. {
  126. var prop = propManager.CurrentProp;
  127. if (!prop)
  128. return;
  129. updating = true;
  130. dragPointToggle.Value = prop.DragPointEnabled;
  131. gizmoToggle.Value = prop.GizmoEnabled;
  132. shadowCastingToggle.Value = prop.ShadowCasting;
  133. updating = false;
  134. }
  135. }