MyRoomPropsPane.cs 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. using System.Collections.Generic;
  2. using UnityEngine;
  3. namespace COM3D2.MeidoPhotoStudio.Plugin
  4. {
  5. using static MenuFileUtility;
  6. internal class MyRoomPropsPane : BasePane
  7. {
  8. private readonly PropManager propManager;
  9. private readonly Dropdown propCategoryDropdown;
  10. private Vector2 propListScrollPos;
  11. private string SelectedCategory => Constants.MyRoomPropCategories[propCategoryDropdown.SelectedItemIndex];
  12. private List<MyRoomItem> myRoomPropList;
  13. private string currentCategory;
  14. public MyRoomPropsPane(PropManager propManager)
  15. {
  16. this.propManager = propManager;
  17. propCategoryDropdown = new Dropdown(Translation.GetArray("doguCategories", Constants.MyRoomPropCategories));
  18. propCategoryDropdown.SelectionChange += (s, a) => ChangePropCategory(SelectedCategory);
  19. ChangePropCategory(SelectedCategory);
  20. }
  21. protected override void ReloadTranslation()
  22. {
  23. propCategoryDropdown.SetDropdownItems(
  24. Translation.GetArray("doguCategories", Constants.MyRoomPropCategories)
  25. );
  26. }
  27. public override void Draw()
  28. {
  29. const float dropdownButtonHeight = 30f;
  30. const float dropdownButtonWidth = 120f;
  31. GUILayoutOption[] dropdownLayoutOptions = new GUILayoutOption[] {
  32. GUILayout.Height(dropdownButtonHeight),
  33. GUILayout.Width(dropdownButtonWidth)
  34. };
  35. GUILayout.BeginHorizontal();
  36. GUILayout.FlexibleSpace();
  37. propCategoryDropdown.Draw(dropdownLayoutOptions);
  38. GUILayout.FlexibleSpace();
  39. GUILayout.EndHorizontal();
  40. float windowHeight = Screen.height * 0.6f;
  41. const int buttonSize = 64;
  42. const int offsetLeft = 15;
  43. const int offsetTop = 85;
  44. const int columns = 3;
  45. int listCount = myRoomPropList.Count;
  46. Rect positionRect = new Rect(offsetLeft, offsetTop + dropdownButtonHeight, 220, windowHeight);
  47. Rect viewRect = new Rect(
  48. 0, 0, buttonSize * columns, (buttonSize * Mathf.Ceil(listCount / (float)columns)) + 5
  49. );
  50. propListScrollPos = GUI.BeginScrollView(positionRect, propListScrollPos, viewRect);
  51. for (int i = 0; i < listCount; i++)
  52. {
  53. float x = i % columns * buttonSize;
  54. float y = i / columns * buttonSize;
  55. MyRoomItem myRoomItem = myRoomPropList[i];
  56. Rect iconRect = new Rect(x, y, buttonSize, buttonSize);
  57. if (GUI.Button(iconRect, "")) propManager.SpawnMyRoomProp(myRoomItem);
  58. GUI.DrawTexture(iconRect, myRoomItem.Icon);
  59. }
  60. GUI.EndScrollView();
  61. GUILayout.Space(windowHeight);
  62. }
  63. private void ChangePropCategory(string category)
  64. {
  65. if (currentCategory == category) return;
  66. currentCategory = category;
  67. propListScrollPos = Vector2.zero;
  68. myRoomPropList = Constants.MyRoomPropDict[category];
  69. if (myRoomPropList[0].Icon == null)
  70. {
  71. foreach (MyRoomItem item in myRoomPropList)
  72. {
  73. item.Icon = (Texture2D)MyRoomCustom.PlacementData.GetData(item.ID).GetThumbnail();
  74. }
  75. }
  76. }
  77. }
  78. }