using System.Collections; using System.Collections.Generic; using System.Linq; using BITFALL.Entities.Equipment.Melee; using BITFALL.Entities.Equipment.Universal.States; using BITFALL.Player.Inventory; using BITKit; using BITKit.Entities; using BITKit.StateMachine; using Cysharp.Threading.Tasks; using UnityEngine; using Draw = BITFALL.Entities.Equipment.Universal.States.Draw; namespace BITFALL.Entities.Equipment.Universal { public interface IUseState:IState{} public abstract class UseState : IUseState { [SerializeField] protected UniversalUseController useController; public virtual bool Enabled { get; set; } public virtual void Initialize() { } public virtual void OnStateEntry(IState old) { } public virtual void OnStateUpdate(float deltaTime) { } public virtual void OnStateExit(IState old, IState newState) { } } public class UniversalUseController : BITEquipBase { [SerializeField] private IAssetableItem[] supportedItems; public override bool IsSupportItem(IBasicItem _item) { return _item is not null && supportedItems.Any(x=>x.AddressablePath == _item.AddressablePath); } public override void Entry() { base.Entry(); TransitionState(); } public override void Exit() { base.Exit(); TransitionState(); } public override async UniTask ExitAsync() { await base.ExitAsync(); while (destroyCancellationToken.IsCancellationRequested is false) { if (animator[0].stateName == BITConstant.Player.Exit && animator[0].currentState.normalizedTime > 1) { break; } if (destroyCancellationToken.IsCancellationRequested) { break; } await UniTask.NextFrame(); } } } }