PropManagerPane.cs 5.5 KB

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