| | 1 | | using DCL; |
| | 2 | | using DCLFeatures.ScreencaptureCamera.CameraObject; |
| | 3 | | using System; |
| | 4 | | using UnityEngine; |
| | 5 | | using Object = UnityEngine.Object; |
| | 6 | |
|
| | 7 | | namespace DCLFeatures.ScreencaptureCamera.UI |
| | 8 | | { |
| | 9 | | public class ScreencaptureCameraHUDController : IDisposable |
| | 10 | | { |
| | 11 | | private readonly ScreencaptureCameraHUDView view; |
| | 12 | | private readonly ScreencaptureCameraBehaviour screencaptureCameraBehaviour; |
| | 13 | | private readonly DataStore dataStore; |
| | 14 | | private readonly HUDController hudController; |
| | 15 | |
|
| | 16 | | private InputAction_Trigger takeScreenshotAction; |
| | 17 | | private InputAction_Trigger closeWindowAction; |
| | 18 | | private InputAction_Hold mouseFirstClick; |
| | 19 | | private InputAction_Trigger toggleScreenshotCameraHUDAction; |
| | 20 | |
|
| 0 | 21 | | public ScreencaptureCameraHUDController(ScreencaptureCameraHUDView view, ScreencaptureCameraBehaviour screencapt |
| | 22 | | DataStore dataStore, HUDController hudController) |
| | 23 | | { |
| 0 | 24 | | this.view = view; |
| 0 | 25 | | this.screencaptureCameraBehaviour = screencaptureCameraBehaviour; |
| 0 | 26 | | this.dataStore = dataStore; |
| 0 | 27 | | this.hudController = hudController; |
| 0 | 28 | | } |
| | 29 | |
|
| | 30 | | public void Initialize() |
| | 31 | | { |
| 0 | 32 | | takeScreenshotAction = Resources.Load<InputAction_Trigger>("TakeScreenshot"); |
| 0 | 33 | | closeWindowAction = Resources.Load<InputAction_Trigger>("CloseWindow"); |
| 0 | 34 | | mouseFirstClick = Resources.Load<InputAction_Hold>("MouseFirstClickDown"); |
| 0 | 35 | | toggleScreenshotCameraHUDAction = Resources.Load<InputAction_Trigger>("ToggleScreenshotCameraHUD"); |
| | 36 | |
|
| 0 | 37 | | view.CloseButtonClicked += DisableScreenshotCameraMode; |
| 0 | 38 | | closeWindowAction.OnTriggered += DisableScreenshotCameraMode; |
| | 39 | |
|
| 0 | 40 | | view.TakeScreenshotButtonClicked += CaptureScreenshot; |
| 0 | 41 | | takeScreenshotAction.OnTriggered += CaptureScreenshot; |
| | 42 | |
|
| 0 | 43 | | view.CameraReelButtonClicked += OpenCameraReelGallery; |
| 0 | 44 | | view.ShortcutsInfoButtonClicked += view.ToggleShortcutsInfosHelpPanel; |
| | 45 | |
|
| 0 | 46 | | mouseFirstClick.OnStarted += HideShortcutsInfoPanel; |
| | 47 | |
|
| 0 | 48 | | toggleScreenshotCameraHUDAction.OnTriggered += ToggleViewVisibility; |
| 0 | 49 | | } |
| | 50 | |
|
| | 51 | | public void Dispose() |
| | 52 | | { |
| 0 | 53 | | view.CloseButtonClicked -= DisableScreenshotCameraMode; |
| 0 | 54 | | closeWindowAction.OnTriggered -= DisableScreenshotCameraMode; |
| | 55 | |
|
| 0 | 56 | | view.TakeScreenshotButtonClicked -= CaptureScreenshot; |
| 0 | 57 | | takeScreenshotAction.OnTriggered -= CaptureScreenshot; |
| | 58 | |
|
| 0 | 59 | | view.CameraReelButtonClicked -= OpenCameraReelGallery; |
| | 60 | |
|
| 0 | 61 | | view.ShortcutsInfoButtonClicked -= view.ToggleShortcutsInfosHelpPanel; |
| 0 | 62 | | toggleScreenshotCameraHUDAction.OnTriggered -= ToggleViewVisibility; |
| | 63 | |
|
| 0 | 64 | | Object.Destroy(view.gameObject); |
| 0 | 65 | | } |
| | 66 | |
|
| | 67 | | private void ToggleViewVisibility(DCLAction_Trigger _) |
| | 68 | | { |
| 0 | 69 | | if (!screencaptureCameraBehaviour.isScreencaptureCameraActive.Get()) return; |
| | 70 | |
|
| 0 | 71 | | SetVisibility(!view.IsVisible, screencaptureCameraBehaviour.HasStorageSpace); |
| | 72 | |
|
| 0 | 73 | | if (view.IsVisible) |
| 0 | 74 | | AudioScriptableObjects.UIShow.Play(); |
| | 75 | | else |
| 0 | 76 | | AudioScriptableObjects.UIHide.Play(); |
| | 77 | |
|
| 0 | 78 | | hudController.ToggleAllUIHiddenNotification(isHidden: !view.IsVisible, false); |
| 0 | 79 | | } |
| | 80 | |
|
| | 81 | | public void SetVisibility(bool isVisible, bool hasStorageSpace) |
| | 82 | | { |
| | 83 | | // Hide AllUIHidden notification when entering camera mode |
| 0 | 84 | | if (isVisible) |
| 0 | 85 | | hudController.ToggleAllUIHiddenNotification(isHidden: false, false); |
| | 86 | |
|
| 0 | 87 | | view.SetVisibility(isVisible, hasStorageSpace); |
| 0 | 88 | | } |
| | 89 | |
|
| | 90 | | private void HideShortcutsInfoPanel(DCLAction_Hold _) |
| | 91 | | { |
| 0 | 92 | | view.ToggleShortcutsInfosHelpPanel(); |
| 0 | 93 | | mouseFirstClick.OnStarted -= HideShortcutsInfoPanel; |
| 0 | 94 | | } |
| | 95 | |
|
| | 96 | | public void PlayScreenshotFX(Texture2D image, float splashDuration, float middlePauseDuration, float transitionD |
| | 97 | | { |
| 0 | 98 | | AudioScriptableObjects.takeScreenshot.Play(); |
| 0 | 99 | | view.ScreenshotCaptureAnimation(image, splashDuration, middlePauseDuration, transitionDuration); |
| 0 | 100 | | } |
| | 101 | |
|
| | 102 | | private void CaptureScreenshot(DCLAction_Trigger _) => |
| 0 | 103 | | screencaptureCameraBehaviour.CaptureScreenshot("Shortcut"); |
| | 104 | |
|
| | 105 | | private void CaptureScreenshot() => |
| 0 | 106 | | screencaptureCameraBehaviour.CaptureScreenshot("Button"); |
| | 107 | |
|
| | 108 | | private void DisableScreenshotCameraMode() => |
| 0 | 109 | | screencaptureCameraBehaviour.ToggleScreenshotCamera(isEnabled: false); |
| | 110 | |
|
| | 111 | | private void DisableScreenshotCameraMode(DCLAction_Trigger _) => |
| 0 | 112 | | DisableScreenshotCameraMode(); |
| | 113 | |
|
| | 114 | | private void OpenCameraReelGallery() => |
| 0 | 115 | | OpenCameraReelGallery("Camera"); |
| | 116 | |
|
| | 117 | | private void OpenCameraReelGallery(string source) |
| | 118 | | { |
| 0 | 119 | | if (!view.IsVisible) return; |
| 0 | 120 | | DisableScreenshotCameraMode(); |
| 0 | 121 | | dataStore.HUDs.cameraReelOpenSource.Set(source); |
| 0 | 122 | | dataStore.HUDs.cameraReelSectionVisible.Set(true); |
| 0 | 123 | | } |
| | 124 | | } |
| | 125 | | } |