Movement/VariableMovement/VariableMovementWithState.cs

64 lines
1.9 KiB
C#
Raw Normal View History

2022-03-09 21:46:49 +03:00
using UnityEngine.Events;
using UnityEngine.InputSystem;
namespace Syntriax.Modules.Movement.VariableMovement
{
public class VariableMovementWithState : IVariableMovementWithState
{
public UnityEvent<bool> OnToggleStateChanged { get; protected set; } = null;
private bool _enabled = false;
public bool Enabled
{
get => _enabled;
set
{
bool isNewValue = _enabled != value;
_enabled = value;
if (isNewValue)
OnToggleStateChanged.Invoke(value);
}
}
private VMAsset _asset;
public VMAsset Asset
{
get => _asset;
set
{
if (actionReference != null)
{
actionReference.performed -= Performed;
actionReference.canceled -= Cancelled;
}
foreach (InputAction action in inputClass)
if (action.name == value.Name)
{
actionReference = action;
actionReference.performed += Performed;
actionReference.canceled += Cancelled;
break;
}
_asset = value;
Enabled = false;
}
}
protected readonly IInputActionCollection inputClass;
protected InputAction actionReference = null;
public VariableMovementWithState(VMAsset asset, IInputActionCollection inputClass)
{
this.inputClass = inputClass;
OnToggleStateChanged = new UnityEvent<bool>();
Asset = asset;
}
protected void Cancelled(InputAction.CallbackContext obj) => Enabled = false;
protected void Performed(InputAction.CallbackContext obj) => Enabled = true;
}
}