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

@@ -0,0 +1,137 @@
using BriarQueen.Data.Identifiers;
using BriarQueen.Framework.Coordinators.Events;
using BriarQueen.Framework.Events.UI;
using BriarQueen.Framework.Managers.Audio;
using BriarQueen.Framework.Managers.Interaction.Data;
using BriarQueen.Framework.Managers.IO;
using BriarQueen.Framework.Managers.Levels;
using BriarQueen.Framework.Managers.Player.Data;
using BriarQueen.Framework.Managers.UI;
using BriarQueen.Framework.Services.Tutorials;
using Cysharp.Threading.Tasks;
using UnityEngine;
using VContainer;
namespace BriarQueen.Game.Items.HoverZones
{
public class TransitionZone : MonoBehaviour, IInteractable
{
[Header("Level Setup")]
[SerializeField]
private LevelKey _levelToLoad;
[SerializeField]
private string _levelName;
[SerializeField]
private string _lockedTooltipText = string.Empty;
[SerializeField]
private string _lockedInteractText = string.Empty;
[SerializeField]
private bool _locked;
[Header("UI Setup")]
[SerializeField]
private UICursorService.CursorStyle _cursorStyle = UICursorService.CursorStyle.Travel;
[Header("Optional")]
[SerializeField]
private SFXKey _soundEffectOnClick;
protected EventCoordinator EventCoordinator;
protected LevelManager LevelManager;
protected SaveManager SaveManager;
protected AudioManager AudioManager;
protected TutorialService TutorialService;
public CanvasGroup CanvasGroup;
public bool CanInteract()
{
return true;
}
protected void Awake()
{
if(CanvasGroup == null)
CanvasGroup = GetComponent<CanvasGroup>();
}
protected void Start()
{
if (_locked && CheckUnlockStatus())
Unlock();
}
public UICursorService.CursorStyle ApplicableCursorStyle => _cursorStyle;
public virtual string InteractableName => _locked ? _lockedTooltipText : _levelName;
public virtual async UniTask OnInteract(ItemDataSo item = null)
{
if (_locked)
{
var message = !string.IsNullOrEmpty(_lockedInteractText) ? _lockedInteractText
: InteractEventIDs.Get(EnvironmentInteractKey.Locked);
EventCoordinator.Publish(new DisplayInteractEvent(message));
return;
}
if (item != null)
{
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(ItemInteractKey.CantUseItem)));
return;
}
var levelId = AssetKeyIdentifiers.Get(_levelToLoad);
if (_soundEffectOnClick != SFXKey.None)
{
AudioManager.Play(AudioNameIdentifiers.Get(_soundEffectOnClick));
}
var loaded = await LevelManager.LoadLevel(levelId);
if (!loaded)
{
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(EnvironmentInteractKey.CantGoThere)));
}
TutorialService.DisplayTutorial(TutorialPopupID.ReturnToPreviousLevel);
}
public virtual UniTask EnterHover()
{
return UniTask.CompletedTask;
}
public virtual UniTask ExitHover()
{
return UniTask.CompletedTask;
}
public void Unlock()
{
_locked = false;
}
protected virtual bool CheckUnlockStatus()
{
return false;
}
[Inject]
public void Construct(LevelManager levelManager, EventCoordinator eventCoordinator,
SaveManager saveManager, AudioManager audioManager, TutorialService tutorialService)
{
LevelManager = levelManager;
EventCoordinator = eventCoordinator;
SaveManager = saveManager;
AudioManager = audioManager;
TutorialService = tutorialService;
}
}
}