CameraPane.cs 2.8 KB

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