using System.Collections.Generic; using BriarQueen.Data.Identifiers; using BriarQueen.Data.IO.Saves; using BriarQueen.Framework.Events.Save; using BriarQueen.Framework.Events.UI; using BriarQueen.Framework.Managers.Levels.Data; using BriarQueen.Framework.Managers.UI; using Cysharp.Threading.Tasks; using UnityEngine; namespace BriarQueen.Framework.Managers.Player.Data.Codex { public class CodexTrigger : BaseItem, ICodexTrigger { [Header("Codex")] [SerializeField] private CodexEntrySo _codexEntry; [SerializeField] private bool _removeTrigger; public override UICursorService.CursorStyle ApplicableCursorStyle => UICursorService.CursorStyle.Inspect; public override string InteractableName => !string.IsNullOrWhiteSpace(InteractableTooltip) ? InteractableTooltip : _codexEntry.Title; public GameObject TriggerObject => GameObject; public CodexEntrySo Entry => _codexEntry; public bool RemoveTrigger => _removeTrigger; public override async UniTask OnInteract(ItemDataSo item = null) { if (!CheckEmptyHands()) return; if (!PlayerManager.CodexUnlocked()) { EventCoordinator.PublishImmediate(new DisplayInteractEvent(InteractEventIDs.Get(ItemInteractKey.CodexLocked))); return; } PlayerManager.UnlockCodexEntry(_codexEntry); if (_removeTrigger) { await Remove(); } } protected override void UpdateSaveGameOnRemoval() { var save = SaveManager.CurrentSave; Debug.Log($"[Base Item] Found save - {save.SaveFileName}"); save.RemovedItems ??= new List(); save.RemovedItems.Add(new ItemSaveData { UniqueIdentifier = _codexEntry.UniqueID }); EventCoordinator.PublishImmediate(new RequestGameSaveEvent()); } } }