Refine UI stack and add Ashwick keypad puzzle

This commit is contained in:
2026-05-15 13:02:12 +01:00
parent 806cf80110
commit 58050abded
69 changed files with 17470 additions and 2752 deletions

View File

@@ -341,12 +341,10 @@ namespace BriarQueen.UI.Codex
if (_canvasGroup != null)
{
_canvasGroup.blocksRaycasts = false;
_canvasGroup.blocksRaycasts = true;
_canvasGroup.interactable = false;
}
TryUnregisterRaycaster();
_windowSequence = Sequence.Create(useUnscaledTime: true)
.Group(Tween.Alpha(_backgroundGroup, new TweenSettings<float>
{
@@ -375,6 +373,7 @@ namespace BriarQueen.UI.Codex
_canvasGroup.interactable = false;
}
TryUnregisterRaycaster();
gameObject.SetActive(false);
Debug.Log($"[CodexWindow] Codex Window Hide Complete.");
}
@@ -1276,4 +1275,4 @@ namespace BriarQueen.UI.Codex
private enum LeftPanelState { Categories, Locations, Entries }
}
}
}

View File

@@ -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);
}
}
}
}

View File

@@ -20,7 +20,7 @@ using VContainer;
namespace BriarQueen.UI.Menus
{
public class PauseMenuWindow : MonoBehaviour, IUIWindow
public class PauseMenuWindow : MonoBehaviour, IUIWindow, IUIOverlayHost
{
[Header("Root UI")]
[SerializeField] private CanvasGroup _canvasGroup;
@@ -186,11 +186,8 @@ namespace BriarQueen.UI.Menus
{
StopAndResetCancellation();
_canvasGroup.blocksRaycasts = false;
_canvasGroup.blocksRaycasts = true;
_canvasGroup.interactable = false;
TryUnregisterRaycaster();
try
{
@@ -212,9 +209,46 @@ namespace BriarQueen.UI.Menus
_canvasGroup.blocksRaycasts = false;
_canvasGroup.interactable = false;
TryUnregisterRaycaster();
gameObject.SetActive(false);
}
public async UniTask SuspendForOverlay()
{
StopAndResetCancellation();
_buttonsGroup.blocksRaycasts = false;
_buttonsGroup.interactable = false;
try
{
await FadeGroup(_buttonsGroup, 0f, _buttonFadeSettings, _cts.Token);
}
catch (OperationCanceledException)
{
return;
}
}
public async UniTask ResumeFromOverlay()
{
StopAndResetCancellation();
_buttonsGroup.blocksRaycasts = true;
_buttonsGroup.interactable = true;
try
{
await FadeGroup(_buttonsGroup, 1f, _buttonFadeSettings, _cts.Token);
}
catch (OperationCanceledException)
{
return;
}
SelectDefault();
}
// ── DI ────────────────────────────────────────────────────────
[Inject]
@@ -299,7 +333,7 @@ namespace BriarQueen.UI.Menus
private void OnSettingsClicked(UnderlineButton _)
{
_eventCoordinator?.Publish(new UIToggleSettingsWindow(true));
_eventCoordinator?.Publish(new UIToggleSettingsWindow(true, SettingsOpenSource.PauseMenu));
}
private void OnExitClicked(UnderlineButton _)
@@ -430,4 +464,4 @@ namespace BriarQueen.UI.Menus
_cts = new CancellationTokenSource();
}
}
}
}

View File

@@ -306,10 +306,8 @@ namespace BriarQueen.UI.Menus
StopAndResetCancellation();
_confirmUnappliedChangesWindow?.CloseImmediate();
_canvasGroup.blocksRaycasts = false;
_canvasGroup.blocksRaycasts = true;
_canvasGroup.interactable = false;
TryUnregisterRaycaster();
try
{
@@ -345,6 +343,10 @@ namespace BriarQueen.UI.Menus
_panelSequence = default;
}
_canvasGroup.blocksRaycasts = false;
_canvasGroup.interactable = false;
TryUnregisterRaycaster();
gameObject.SetActive(false);
}
@@ -916,6 +918,7 @@ namespace BriarQueen.UI.Menus
return;
_interactManager.AddUIRaycaster(_graphicRaycaster);
_interactManager.SetExclusiveRaycaster(_graphicRaycaster);
_raycasterRegistered = true;
}
@@ -928,7 +931,8 @@ namespace BriarQueen.UI.Menus
return;
_interactManager.RemoveUIRaycaster(_graphicRaycaster);
_interactManager.ClearExclusiveRaycaster();
_raycasterRegistered = false;
}
}
}
}

View File

@@ -28,4 +28,4 @@ namespace BriarQueen.UI.Scopes
builder.RegisterComponent(_newSaveWindow);
}
}
}
}