112 lines
3.3 KiB
C#
112 lines
3.3 KiB
C#
using BriarQueen.Data.Identifiers;
|
|
using BriarQueen.Framework.Coordinators.Events;
|
|
using BriarQueen.Framework.Events.UI;
|
|
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 Cysharp.Threading.Tasks;
|
|
using UnityEngine;
|
|
using VContainer;
|
|
|
|
namespace BriarQueen.Game.Items.HoverZones
|
|
{
|
|
public class InteractZone : 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;
|
|
|
|
protected EventCoordinator EventCoordinator;
|
|
protected LevelManager LevelManager;
|
|
protected SaveManager SaveManager;
|
|
|
|
public CanvasGroup CanvasGroup;
|
|
|
|
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);
|
|
var loaded = await LevelManager.LoadLevel(levelId);
|
|
|
|
if (!loaded)
|
|
{
|
|
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(EnvironmentInteractKey.CantGoThere)));
|
|
}
|
|
}
|
|
|
|
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)
|
|
{
|
|
LevelManager = levelManager;
|
|
EventCoordinator = eventCoordinator;
|
|
SaveManager = saveManager;
|
|
}
|
|
}
|
|
} |