SceneManagerScenePane.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using UnityEngine;
  2. namespace MeidoPhotoStudio.Plugin;
  3. public class SceneManagerScenePane : BasePane
  4. {
  5. public static readonly float ThumbnailScale = 0.55f;
  6. private readonly SceneManager sceneManager;
  7. private readonly SceneModalWindow sceneModalWindow;
  8. private readonly Button addSceneButton;
  9. private Vector2 sceneScrollPos;
  10. public SceneManagerScenePane(SceneManager sceneManager, SceneModalWindow sceneModalWindow)
  11. {
  12. this.sceneManager = sceneManager;
  13. this.sceneModalWindow = sceneModalWindow;
  14. addSceneButton = new("+");
  15. addSceneButton.ControlEvent += (_, _) =>
  16. sceneManager.SaveScene(overwrite: false);
  17. }
  18. public override void Draw()
  19. {
  20. var sceneImageStyle = new GUIStyle(GUI.skin.label)
  21. {
  22. alignment = TextAnchor.MiddleCenter,
  23. padding = new RectOffset(0, 0, 0, 0),
  24. };
  25. var addSceneStyle = new GUIStyle(GUI.skin.button)
  26. {
  27. alignment = TextAnchor.MiddleCenter,
  28. fontSize = 60,
  29. };
  30. GUILayout.BeginVertical();
  31. var sceneWidth = SceneManager.SceneDimensions.x * ThumbnailScale;
  32. var sceneHeight = SceneManager.SceneDimensions.y * ThumbnailScale;
  33. var sceneGridWidth = parent.WindowRect.width - SceneManagerDirectoryPane.ListWidth;
  34. var sceneLayoutOptions = new[]
  35. {
  36. GUILayout.Height(sceneHeight),
  37. GUILayout.Width(sceneWidth),
  38. };
  39. var columns = Mathf.Max(1, (int)(sceneGridWidth / sceneWidth));
  40. var rows = (int)Mathf.Ceil(sceneManager.SceneList.Count + 1 / (float)columns);
  41. sceneScrollPos = GUILayout.BeginScrollView(sceneScrollPos);
  42. GUILayout.BeginHorizontal();
  43. GUILayout.FlexibleSpace();
  44. GUILayout.BeginVertical();
  45. var currentScene = -1;
  46. for (var i = 0; i < rows; i++)
  47. {
  48. GUILayout.BeginHorizontal();
  49. for (var j = 0; j < columns; j++, currentScene++)
  50. {
  51. if (currentScene is -1)
  52. {
  53. addSceneButton.Draw(addSceneStyle, sceneLayoutOptions);
  54. }
  55. else if (currentScene < sceneManager.SceneList.Count)
  56. {
  57. var scene = sceneManager.SceneList[currentScene];
  58. if (GUILayout.Button(scene.Thumbnail, sceneImageStyle, sceneLayoutOptions))
  59. {
  60. sceneManager.SelectScene(currentScene);
  61. sceneModalWindow.ShowSceneDialogue();
  62. }
  63. }
  64. }
  65. GUILayout.EndHorizontal();
  66. }
  67. GUILayout.EndVertical();
  68. GUILayout.FlexibleSpace();
  69. GUILayout.EndHorizontal();
  70. GUILayout.EndScrollView();
  71. GUILayout.EndVertical();
  72. }
  73. }