using System; using System.Collections; using System.Collections.Generic; using BITKit; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Interactions; namespace BITFALL.Scene { public class ActionBasedCancel : ActionBasedComponent { [SerializeField] private InputActionReference cancelAction; protected override void OnEnable() { base.OnEnable(); InputActionGroup.EnsureCreated(cancelAction); actionBasedObject.OnTick += OnTick; actionBasedObject.OnStarted += OnStarted; actionBasedObject.OnCompleted += OnStop; actionBasedObject.OnCanceled += OnStop; } protected override void OnDisable() { base.OnDisable(); actionBasedObject.OnTick -= OnTick; actionBasedObject.OnStarted -= OnStarted; actionBasedObject.OnCompleted -= OnStop; actionBasedObject.OnCanceled -= OnStop; } private void OnStarted() { InputActionGroup.RegisterCallback(cancelAction, Cancel); } private void OnStop() { InputActionGroup.UnRegisterCallback(cancelAction, Cancel); } private void OnTick(float obj) { switch (actionBasedObject.ActionMode) { case HoldAction when actionBasedObject.ElapsedTime>0.1f && InputActionGroup.GetAction(cancelAction).IsPressed() is false: throw new InGameException("取消互动"); } } private void Cancel(InputAction.CallbackContext context) { } } }