PropsPane.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. using UnityEngine;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. namespace COM3D2.MeidoPhotoStudio.Plugin
  5. {
  6. internal class PropsPane : BasePane
  7. {
  8. private const string translationPrefix = "doguCategory";
  9. private PropManager propManager;
  10. private string currentCategory;
  11. private string SelectedCategory => Constants.doguCategories[this.doguCategoryDropdown.SelectedItemIndex];
  12. private Dropdown doguCategoryDropdown;
  13. private Dropdown doguDropdown;
  14. private Button addDoguButton;
  15. private Button nextDoguButton;
  16. private Button prevDoguButton;
  17. private Button nextDoguCategoryButton;
  18. private Button prevDoguCategoryButton;
  19. private string header;
  20. private static bool handItemsReady = false;
  21. private bool itemSelectorEnabled = true;
  22. public PropsPane(PropManager propManager)
  23. {
  24. this.header = Translation.Get("propsPane", "header");
  25. this.propManager = propManager;
  26. handItemsReady = MenuFileUtility.MenuFilesReady;
  27. if (!handItemsReady) Constants.MenuFilesChange += InitializeHandItems;
  28. this.doguCategoryDropdown = new Dropdown(Translation.GetArray("doguCategories", Constants.doguCategories));
  29. this.doguCategoryDropdown.SelectionChange += (s, a) => ChangeDoguCategory(SelectedCategory);
  30. this.doguDropdown = new Dropdown(new[] { string.Empty });
  31. this.addDoguButton = new Button("+");
  32. this.addDoguButton.ControlEvent += (s, a) => SpawnObject();
  33. this.nextDoguButton = new Button(">");
  34. this.nextDoguButton.ControlEvent += (s, a) => this.doguDropdown.Step(1);
  35. this.prevDoguButton = new Button("<");
  36. this.prevDoguButton.ControlEvent += (s, a) => this.doguDropdown.Step(-1);
  37. this.nextDoguCategoryButton = new Button(">");
  38. this.nextDoguCategoryButton.ControlEvent += (s, a) => this.doguCategoryDropdown.Step(1);
  39. this.prevDoguCategoryButton = new Button("<");
  40. this.prevDoguCategoryButton.ControlEvent += (s, a) => this.doguCategoryDropdown.Step(-1);
  41. ChangeDoguCategory(SelectedCategory);
  42. }
  43. protected override void ReloadTranslation()
  44. {
  45. this.header = Translation.Get("propsPane", "header");
  46. this.doguCategoryDropdown.SetDropdownItems(
  47. Translation.GetArray("doguCategories", Constants.doguCategories)
  48. );
  49. string category = SelectedCategory;
  50. string[] translationArray;
  51. if (category == Constants.customDoguCategories[Constants.DoguCategory.HandItem] && !handItemsReady)
  52. {
  53. translationArray = new[] { Translation.Get("systemMessage", "initializing") };
  54. }
  55. else
  56. {
  57. translationArray = GetTranslations(category);
  58. }
  59. doguDropdown.SetDropdownItems(translationArray);
  60. }
  61. public override void Draw()
  62. {
  63. float arrowButtonSize = 30;
  64. GUILayoutOption[] arrowLayoutOptions = {
  65. GUILayout.Width(arrowButtonSize),
  66. GUILayout.Height(arrowButtonSize)
  67. };
  68. float dropdownButtonHeight = arrowButtonSize;
  69. float dropdownButtonWidth = 120f;
  70. GUILayoutOption[] dropdownLayoutOptions = new GUILayoutOption[] {
  71. GUILayout.Height(dropdownButtonHeight),
  72. GUILayout.Width(dropdownButtonWidth)
  73. };
  74. MiscGUI.Header(this.header);
  75. MiscGUI.WhiteLine();
  76. GUILayout.BeginHorizontal();
  77. this.prevDoguCategoryButton.Draw(arrowLayoutOptions);
  78. this.doguCategoryDropdown.Draw(dropdownLayoutOptions);
  79. this.nextDoguCategoryButton.Draw(arrowLayoutOptions);
  80. GUILayout.EndHorizontal();
  81. GUI.enabled = itemSelectorEnabled;
  82. GUILayout.BeginHorizontal();
  83. this.doguDropdown.Draw(dropdownLayoutOptions);
  84. this.prevDoguButton.Draw(arrowLayoutOptions);
  85. this.nextDoguButton.Draw(arrowLayoutOptions);
  86. this.addDoguButton.Draw(arrowLayoutOptions);
  87. GUILayout.EndHorizontal();
  88. GUI.enabled = true;
  89. }
  90. private void InitializeHandItems(object sender, MenuFilesEventArgs args)
  91. {
  92. if (args.Type == MenuFilesEventArgs.EventType.HandItems)
  93. {
  94. handItemsReady = true;
  95. string selectedCategory = SelectedCategory;
  96. if (selectedCategory == Constants.customDoguCategories[Constants.DoguCategory.HandItem])
  97. {
  98. ChangeDoguCategory(selectedCategory, true);
  99. }
  100. }
  101. }
  102. private void ChangeDoguCategory(string category, bool force = false)
  103. {
  104. if (category != currentCategory || force)
  105. {
  106. currentCategory = category;
  107. string[] translationArray;
  108. if (category == Constants.customDoguCategories[Constants.DoguCategory.HandItem] && !handItemsReady)
  109. {
  110. translationArray = new[] { Translation.Get("systemMessage", "initializing") };
  111. itemSelectorEnabled = false;
  112. }
  113. else
  114. {
  115. translationArray = GetTranslations(category);
  116. itemSelectorEnabled = true;
  117. }
  118. doguDropdown.SetDropdownItems(translationArray, 0);
  119. }
  120. }
  121. private string[] GetTranslations(string category)
  122. {
  123. IEnumerable<string> itemList = Constants.DoguDict[category];
  124. if (category == Constants.customDoguCategories[Constants.DoguCategory.HandItem])
  125. {
  126. itemList = itemList.Select(item =>
  127. {
  128. string handItemAsOdogu = Utility.HandItemToOdogu(item);
  129. if (Translation.Has("propNames", handItemAsOdogu)) return handItemAsOdogu;
  130. else return item;
  131. });
  132. }
  133. string translationCategory = category == Constants.customDoguCategories[Constants.DoguCategory.BGSmall]
  134. ? "bgNames"
  135. : "propNames";
  136. return Translation.GetArray(translationCategory, itemList);
  137. }
  138. private void SpawnObject()
  139. {
  140. string assetName = Constants.DoguDict[SelectedCategory][this.doguDropdown.SelectedItemIndex];
  141. if (SelectedCategory == Constants.customDoguCategories[Constants.DoguCategory.BGSmall])
  142. {
  143. assetName = "BG_" + assetName;
  144. }
  145. this.propManager.SpawnObject(assetName);
  146. }
  147. }
  148. }