SceneWindow.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. using UnityEngine;
  2. namespace MeidoPhotoStudio.Plugin;
  3. public class SceneWindow : BaseWindow
  4. {
  5. private const float ResizeHandleSize = 15f;
  6. private readonly SceneManager sceneManager;
  7. private readonly SceneManagerTitleBarPane titleBar;
  8. private readonly SceneManagerDirectoryPane directoryList;
  9. private readonly SceneManagerScenePane sceneGrid;
  10. private Rect resizeHandleRect;
  11. private bool resizing;
  12. private bool visible;
  13. public SceneWindow(SceneManager sceneManager)
  14. {
  15. windowRect.width = Screen.width * 0.65f;
  16. windowRect.height = Screen.height * 0.75f;
  17. windowRect.x = Screen.width * 0.5f - windowRect.width * 0.5f;
  18. windowRect.y = Screen.height * 0.5f - windowRect.height * 0.5f;
  19. resizeHandleRect = new(0f, 0f, ResizeHandleSize, ResizeHandleSize);
  20. this.sceneManager = sceneManager;
  21. var sceneModalWindow = new SceneModalWindow(this.sceneManager);
  22. titleBar = AddPane(new SceneManagerTitleBarPane(sceneManager));
  23. titleBar.CloseChange += (_, _) =>
  24. Visible = false;
  25. directoryList = AddPane(new SceneManagerDirectoryPane(sceneManager, sceneModalWindow));
  26. sceneGrid = AddPane(new SceneManagerScenePane(sceneManager, sceneModalWindow));
  27. }
  28. public override bool Visible
  29. {
  30. get => visible;
  31. set
  32. {
  33. visible = value;
  34. if (visible && !sceneManager.Initialized)
  35. sceneManager.Initialize();
  36. }
  37. }
  38. public override void GUIFunc(int id)
  39. {
  40. HandleResize();
  41. Draw();
  42. if (!resizing)
  43. GUI.DragWindow();
  44. }
  45. public override void Update()
  46. {
  47. base.Update();
  48. if (InputManager.GetKeyDown(MpsKey.OpenSceneManager))
  49. Visible = !Visible;
  50. }
  51. public override void Deactivate() =>
  52. Visible = false;
  53. public override void Draw()
  54. {
  55. GUI.enabled = !SceneManager.Busy && !Modal.Visible;
  56. GUILayout.BeginArea(new(10f, 10f, windowRect.width - 20f, windowRect.height - 20f));
  57. titleBar.Draw();
  58. GUILayout.BeginHorizontal();
  59. directoryList.Draw();
  60. sceneGrid.Draw();
  61. GUILayout.EndHorizontal();
  62. GUILayout.EndArea();
  63. GUI.Box(resizeHandleRect, GUIContent.none);
  64. }
  65. private void HandleResize()
  66. {
  67. resizeHandleRect.x = windowRect.width - ResizeHandleSize;
  68. resizeHandleRect.y = windowRect.height - ResizeHandleSize;
  69. if (!resizing && Input.GetMouseButton(0) && resizeHandleRect.Contains(Event.current.mousePosition))
  70. resizing = true;
  71. if (resizing)
  72. {
  73. var rectWidth = Event.current.mousePosition.x;
  74. var rectHeight = Event.current.mousePosition.y;
  75. var minWidth = Utility.GetPix(
  76. SceneManagerDirectoryPane.ListWidth + (int)(SceneManager.SceneDimensions.x
  77. * SceneManagerScenePane.ThumbnailScale));
  78. windowRect.width = Mathf.Max(minWidth, rectWidth);
  79. windowRect.height = Mathf.Max(300, rectHeight);
  80. if (!Input.GetMouseButton(0))
  81. resizing = false;
  82. }
  83. }
  84. }