MyRoomPropsPane.cs 3.0 KB

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