using System; using System.Collections; using System.Collections.Generic; using BITFALL.Items; using BITKit; using NodeCanvas.Framework; using UnityEngine; namespace BITFALL.Quest { public class PostmanReceiveItem : ActionTask { public BBParameter item; public BBParameter disposeItem; protected override void OnExecute() { base.OnExecute(); QuestPostman.OnRelease += OnRelease; } private void OnRelease(WorldItemContainer arg1, IBasicItem arg2) { if (arg2 != item.value) return; if (disposeItem.value) { arg1.Remove(arg2); } EndAction(); } protected override void OnStop() { base.OnStop(); QuestPostman.OnRelease -= OnRelease; } } public class QuestPostman : MonoBehaviour { public static event Action OnRelease; [SerializeField] private WorldItemContainer container; private readonly List addedItems=new(); private void Start() { container.OnRelease += _OnRelease; container.OnAdd += addedItems.Add; container.OnRemove +=x=> addedItems.Remove(x); } private void _OnRelease(bool obj) { if (!obj) return; foreach (var x in addedItems.ToArray()) { OnRelease?.Invoke(container,x); } addedItems.Clear(); } } }