MyRoomPropsPane.cs 3.0 KB

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