Refine UI stack and add Ashwick keypad puzzle
This commit is contained in:
@@ -4,6 +4,8 @@ using BriarQueen.Framework.Coordinators.Events;
|
||||
using BriarQueen.Framework.Effects;
|
||||
using BriarQueen.Framework.Events.UI;
|
||||
using BriarQueen.Framework.Managers.Input;
|
||||
using BriarQueen.Framework.Managers.UI;
|
||||
using BriarQueen.Framework.Managers.UI.Base;
|
||||
using BriarQueen.Framework.Managers.UI.Events;
|
||||
using BriarQueen.Framework.Services.Game;
|
||||
using BriarQueen.Game.Effects;
|
||||
@@ -19,7 +21,7 @@ using VContainer;
|
||||
|
||||
namespace BriarQueen.UI.Menus
|
||||
{
|
||||
public class MainMenuWindow : MonoBehaviour
|
||||
public class MainMenuWindow : MonoBehaviour, IUIOverlayHost
|
||||
{
|
||||
[Header("Intro Screen")]
|
||||
[SerializeField]
|
||||
@@ -38,9 +40,9 @@ namespace BriarQueen.UI.Menus
|
||||
[FormerlySerializedAs("_mainMenuWindowCanvasGroup")]
|
||||
private CanvasGroup _mainMenuGroup;
|
||||
|
||||
[Header("Buttons")]
|
||||
[Header("Display")]
|
||||
[SerializeField]
|
||||
private CanvasGroup _buttonsGroup;
|
||||
private CanvasGroup _displayGroup;
|
||||
|
||||
[SerializeField]
|
||||
private AnimatedSelectionButtonGroup _mainMenuSelectionGroup;
|
||||
@@ -93,6 +95,14 @@ namespace BriarQueen.UI.Menus
|
||||
useUnscaledTime = true
|
||||
};
|
||||
|
||||
[SerializeField]
|
||||
private TweenSettings _settingsOverlayTweenSettings = new()
|
||||
{
|
||||
duration = 0.25f,
|
||||
ease = Ease.OutQuad,
|
||||
useUnscaledTime = true
|
||||
};
|
||||
|
||||
[SerializeField]
|
||||
private TweenSettings _pressStartPulseTweenSettings = new()
|
||||
{
|
||||
@@ -106,23 +116,31 @@ namespace BriarQueen.UI.Menus
|
||||
private float _pressStartPulseMinimumAlpha = 0.25f;
|
||||
|
||||
private CancellationTokenSource _introCts;
|
||||
private CancellationTokenSource _settingsOverlayCts;
|
||||
private CancellationTokenSource _selectSaveCts;
|
||||
private EventCoordinator _eventCoordinator;
|
||||
private GameService _gameService;
|
||||
private InputManager _inputManager;
|
||||
private UIManager _uiManager;
|
||||
private Sequence _pressStartFadeSequence;
|
||||
private Sequence _pressStartPulseSequence;
|
||||
private Sequence _settingsOverlaySequence;
|
||||
private Sequence _selectSaveSequence;
|
||||
|
||||
private bool _introFinished;
|
||||
private bool _introTransitioning;
|
||||
|
||||
[Inject]
|
||||
public void Construct(GameService gameService, EventCoordinator eventCoordinator, InputManager inputManager)
|
||||
public void Construct(
|
||||
GameService gameService,
|
||||
EventCoordinator eventCoordinator,
|
||||
InputManager inputManager,
|
||||
UIManager uiManager)
|
||||
{
|
||||
_gameService = gameService;
|
||||
_eventCoordinator = eventCoordinator;
|
||||
_inputManager = inputManager;
|
||||
_uiManager = uiManager;
|
||||
}
|
||||
|
||||
private void Awake()
|
||||
@@ -139,6 +157,7 @@ namespace BriarQueen.UI.Menus
|
||||
private void OnEnable()
|
||||
{
|
||||
BindButtons();
|
||||
_uiManager?.RegisterMainMenuOverlayHost(this);
|
||||
|
||||
_eventCoordinator?.PublishImmediate(new UIToggleHudEvent(false));
|
||||
_inputManager?.BindSubmitForStart(OnIntroSubmit);
|
||||
@@ -164,22 +183,27 @@ namespace BriarQueen.UI.Menus
|
||||
private void OnDisable()
|
||||
{
|
||||
UnbindButtons();
|
||||
_uiManager?.UnregisterMainMenuOverlayHost(this);
|
||||
|
||||
_inputManager?.ResetSubmitBind(OnIntroSubmit);
|
||||
_eventCoordinator?.Unsubscribe<UIBackRequestedEvent>(OnBackRequested);
|
||||
|
||||
StopIntroTweens();
|
||||
StopSettingsOverlayTween();
|
||||
StopSelectSaveTween();
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
_uiManager?.UnregisterMainMenuOverlayHost(this);
|
||||
|
||||
if (_selectSaveWindow != null)
|
||||
{
|
||||
_selectSaveWindow.OnCloseWindow -= CloseSelectSaveWindow;
|
||||
}
|
||||
|
||||
StopIntroTweens();
|
||||
StopSettingsOverlayTween();
|
||||
StopSelectSaveTween();
|
||||
}
|
||||
|
||||
@@ -386,7 +410,7 @@ namespace BriarQueen.UI.Menus
|
||||
|
||||
private void OnSettingsClicked()
|
||||
{
|
||||
_eventCoordinator?.PublishImmediate(new UIToggleSettingsWindow(true));
|
||||
_eventCoordinator?.PublishImmediate(new UIToggleSettingsWindow(true, SettingsOpenSource.MainMenu));
|
||||
}
|
||||
|
||||
private void OnQuitClicked()
|
||||
@@ -432,9 +456,9 @@ namespace BriarQueen.UI.Menus
|
||||
endValue = 1f,
|
||||
settings = _selectSaveTweenSettings
|
||||
}))
|
||||
.Group(Tween.Alpha(_buttonsGroup, new TweenSettings<float>
|
||||
.Group(Tween.Alpha(_displayGroup, new TweenSettings<float>
|
||||
{
|
||||
startValue = _buttonsGroup.alpha,
|
||||
startValue = _displayGroup.alpha,
|
||||
endValue = 0f,
|
||||
settings = _selectSaveTweenSettings
|
||||
}));
|
||||
@@ -483,9 +507,9 @@ namespace BriarQueen.UI.Menus
|
||||
endValue = 0f,
|
||||
settings = _selectSaveTweenSettings
|
||||
}))
|
||||
.Group(Tween.Alpha(_buttonsGroup, new TweenSettings<float>
|
||||
.Group(Tween.Alpha(_displayGroup, new TweenSettings<float>
|
||||
{
|
||||
startValue = _buttonsGroup.alpha,
|
||||
startValue = _displayGroup.alpha,
|
||||
endValue = 1f,
|
||||
settings = _selectSaveTweenSettings
|
||||
}));
|
||||
@@ -544,6 +568,19 @@ namespace BriarQueen.UI.Menus
|
||||
CancelAndDispose(ref _selectSaveCts);
|
||||
}
|
||||
|
||||
private void ResetSettingsOverlayCtsAndCancelRunning()
|
||||
{
|
||||
StopSequence(ref _settingsOverlaySequence);
|
||||
CancelAndDispose(ref _settingsOverlayCts);
|
||||
_settingsOverlayCts = new CancellationTokenSource();
|
||||
}
|
||||
|
||||
private void StopSettingsOverlayTween()
|
||||
{
|
||||
StopSequence(ref _settingsOverlaySequence);
|
||||
CancelAndDispose(ref _settingsOverlayCts);
|
||||
}
|
||||
|
||||
private static void StopSequence(ref Sequence sequence)
|
||||
{
|
||||
if (sequence.isAlive)
|
||||
@@ -597,5 +634,67 @@ namespace BriarQueen.UI.Menus
|
||||
group.interactable = inputEnabled;
|
||||
group.blocksRaycasts = inputEnabled;
|
||||
}
|
||||
|
||||
public async UniTask SuspendForOverlay()
|
||||
{
|
||||
if (_mainMenuGroup == null)
|
||||
return;
|
||||
|
||||
ResetSettingsOverlayCtsAndCancelRunning();
|
||||
SetCanvasGroupInteractivity(_mainMenuGroup, false);
|
||||
|
||||
try
|
||||
{
|
||||
_settingsOverlaySequence = Sequence.Create(useUnscaledTime: true)
|
||||
.Group(Tween.Alpha(_displayGroup, new TweenSettings<float>
|
||||
{
|
||||
startValue = _displayGroup.alpha,
|
||||
endValue = 0f,
|
||||
settings = _settingsOverlayTweenSettings
|
||||
}));
|
||||
|
||||
await _settingsOverlaySequence.ToUniTask(cancellationToken: _settingsOverlayCts.Token);
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
return;
|
||||
}
|
||||
finally
|
||||
{
|
||||
_settingsOverlaySequence = default;
|
||||
}
|
||||
}
|
||||
|
||||
public async UniTask ResumeFromOverlay()
|
||||
{
|
||||
if (_mainMenuGroup == null)
|
||||
return;
|
||||
|
||||
ResetSettingsOverlayCtsAndCancelRunning();
|
||||
|
||||
try
|
||||
{
|
||||
_settingsOverlaySequence = Sequence.Create(useUnscaledTime: true)
|
||||
.Group(Tween.Alpha(_displayGroup, new TweenSettings<float>
|
||||
{
|
||||
startValue = _displayGroup.alpha,
|
||||
endValue = 1f,
|
||||
settings = _settingsOverlayTweenSettings
|
||||
}));
|
||||
|
||||
await _settingsOverlaySequence.ToUniTask(cancellationToken: _settingsOverlayCts.Token);
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
return;
|
||||
}
|
||||
finally
|
||||
{
|
||||
_settingsOverlaySequence = default;
|
||||
}
|
||||
|
||||
SetCanvasGroupInteractivity(_mainMenuGroup, true);
|
||||
_mainMenuSelectionGroup?.SelectIndex(1, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user