| | 1 | | using UnityEngine; |
| | 2 | | using DCL.Helpers; |
| | 3 | |
|
| | 4 | | public class ControlsHUDController : IHUD |
| | 5 | | { |
| | 6 | | internal ControlsHUDView view; |
| | 7 | |
|
| | 8 | | private bool prevMouseLockState = false; |
| | 9 | |
|
| | 10 | | public event System.Action OnControlsOpened; |
| | 11 | | public event System.Action OnControlsClosed; |
| | 12 | |
|
| 3 | 13 | | public ControlsHUDController() |
| | 14 | | { |
| 3 | 15 | | view = UnityEngine.Object.Instantiate(Resources.Load<GameObject>("ControlsHUD")).GetComponent<ControlsHUDView>() |
| 3 | 16 | | view.name = "_ControlsHUD"; |
| 3 | 17 | | view.gameObject.SetActive(false); |
| | 18 | |
|
| 3 | 19 | | view.onToggleActionTriggered += ToggleVisibility; |
| 3 | 20 | | view.onCloseActionTriggered += Hide; |
| | 21 | |
|
| 3 | 22 | | if (!DCL.Configuration.EnvironmentSettings.RUNNING_TESTS) |
| | 23 | | { |
| 0 | 24 | | KernelConfig.i.EnsureConfigInitialized().Then(config => OnKernelConfigChanged(config, null)); |
| 0 | 25 | | KernelConfig.i.OnChange += OnKernelConfigChanged; |
| | 26 | | } |
| 3 | 27 | | } |
| | 28 | |
|
| | 29 | | public void SetVisibility(bool visible) |
| | 30 | | { |
| 2 | 31 | | if (!view) |
| 0 | 32 | | return; |
| | 33 | |
|
| 2 | 34 | | if (IsVisible() && !visible) |
| | 35 | | { |
| 0 | 36 | | if (prevMouseLockState) |
| | 37 | | { |
| 0 | 38 | | Utils.LockCursor(); |
| | 39 | | } |
| | 40 | |
|
| 0 | 41 | | view.showHideAnimator.Hide(); |
| 0 | 42 | | OnControlsClosed?.Invoke(); |
| | 43 | |
|
| 0 | 44 | | AudioScriptableObjects.fadeOut.Play(true); |
| 0 | 45 | | } |
| 2 | 46 | | else if (!IsVisible() && visible) |
| | 47 | | { |
| 2 | 48 | | prevMouseLockState = Utils.isCursorLocked; |
| 2 | 49 | | Utils.UnlockCursor(); |
| 2 | 50 | | view.gameObject.SetActive(true); |
| 2 | 51 | | view.showHideAnimator.Show(); |
| 2 | 52 | | OnControlsOpened?.Invoke(); |
| 2 | 53 | | AudioScriptableObjects.fadeIn.Play(true); |
| | 54 | | } |
| 2 | 55 | | } |
| | 56 | |
|
| | 57 | | public void Dispose() |
| | 58 | | { |
| 3 | 59 | | if (view) |
| | 60 | | { |
| 3 | 61 | | Object.Destroy(view.gameObject); |
| | 62 | | } |
| | 63 | |
|
| 3 | 64 | | if (!DCL.Configuration.EnvironmentSettings.RUNNING_TESTS) |
| | 65 | | { |
| 0 | 66 | | KernelConfig.i.OnChange -= OnKernelConfigChanged; |
| | 67 | | } |
| 3 | 68 | | } |
| | 69 | |
|
| 0 | 70 | | public void ToggleVisibility() { SetVisibility(!IsVisible()); } |
| | 71 | |
|
| | 72 | | public bool IsVisible() |
| | 73 | | { |
| 4 | 74 | | if (!view) |
| 0 | 75 | | return false; |
| | 76 | |
|
| 4 | 77 | | return view.showHideAnimator.isVisible; |
| | 78 | | } |
| | 79 | |
|
| | 80 | | public void Hide(bool restorePointerLockStatus) |
| | 81 | | { |
| 0 | 82 | | if (!restorePointerLockStatus) |
| 0 | 83 | | prevMouseLockState = false; |
| 0 | 84 | | SetVisibility(false); |
| 0 | 85 | | } |
| | 86 | |
|
| | 87 | | private void OnKernelConfigChanged(KernelConfigModel current, KernelConfigModel previous) |
| | 88 | | { |
| 0 | 89 | | view?.voiceChatButton.SetActive(current.comms.voiceChatEnabled); |
| 0 | 90 | | view?.builderInWorldButton.SetActive(current.features.enableBuilderInWorld); |
| 0 | 91 | | } |
| | 92 | | } |