CameraPane.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. using System.Linq;
  2. using UnityEngine;
  3. namespace MeidoPhotoStudio.Plugin;
  4. public class CameraPane : BasePane
  5. {
  6. private readonly CameraManager cameraManager;
  7. private readonly SelectionGrid cameraGrid;
  8. private readonly Slider zRotationSlider;
  9. private readonly Slider fovSlider;
  10. private string header;
  11. public CameraPane(CameraManager cameraManager)
  12. {
  13. this.cameraManager = cameraManager;
  14. this.cameraManager.CameraChange += (_, _) =>
  15. UpdatePane();
  16. var camera = CameraUtility.MainCamera.camera;
  17. var eulerAngles = camera.transform.eulerAngles;
  18. zRotationSlider = new(Translation.Get("cameraPane", "zRotation"), 0f, 360f, eulerAngles.z)
  19. {
  20. HasReset = true,
  21. HasTextField = true,
  22. };
  23. zRotationSlider.ControlEvent += (_, _) =>
  24. {
  25. if (updating)
  26. return;
  27. var newRotation = camera.transform.eulerAngles;
  28. newRotation.z = zRotationSlider.Value;
  29. camera.transform.rotation = Quaternion.Euler(newRotation);
  30. };
  31. var fieldOfView = camera.fieldOfView;
  32. fovSlider = new(Translation.Get("cameraPane", "fov"), 20f, 150f, fieldOfView, fieldOfView)
  33. {
  34. HasReset = true,
  35. HasTextField = true,
  36. };
  37. fovSlider.ControlEvent += (_, _) =>
  38. {
  39. if (updating)
  40. return;
  41. camera.fieldOfView = fovSlider.Value;
  42. };
  43. cameraGrid = new(Enumerable.Range(1, cameraManager.CameraCount).Select(x => x.ToString()).ToArray());
  44. cameraGrid.ControlEvent += (_, _) =>
  45. {
  46. if (updating)
  47. return;
  48. cameraManager.CurrentCameraIndex = cameraGrid.SelectedItemIndex;
  49. };
  50. header = Translation.Get("cameraPane", "header");
  51. }
  52. public override void Draw()
  53. {
  54. MpsGui.Header(header);
  55. MpsGui.WhiteLine();
  56. cameraGrid.Draw();
  57. zRotationSlider.Draw();
  58. fovSlider.Draw();
  59. }
  60. public override void UpdatePane()
  61. {
  62. updating = true;
  63. var camera = CameraUtility.MainCamera.camera;
  64. zRotationSlider.Value = camera.transform.eulerAngles.z;
  65. fovSlider.Value = camera.fieldOfView;
  66. cameraGrid.SelectedItemIndex = cameraManager.CurrentCameraIndex;
  67. updating = false;
  68. }
  69. protected override void ReloadTranslation()
  70. {
  71. zRotationSlider.Label = Translation.Get("cameraPane", "zRotation");
  72. fovSlider.Label = Translation.Get("cameraPane", "fov");
  73. header = Translation.Get("cameraPane", "header");
  74. }
  75. }