Files
A-Fairytale-Gone-Bad-Briar-…/Assets/Scripts/Game/Items/Zones/TransitionZone.cs

137 lines
4.1 KiB
C#

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