82 lines
2.3 KiB
C#
82 lines
2.3 KiB
C#
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
|
|
{
|
|
UpdateBindings();
|
|
|
|
_asset = value;
|
|
|
|
Enabled = false;
|
|
}
|
|
}
|
|
|
|
private IInputActionCollection _inputCollection = null;
|
|
public IInputActionCollection InputCollection
|
|
{
|
|
set
|
|
{
|
|
if (_inputCollection == value)
|
|
return;
|
|
|
|
_inputCollection = value;
|
|
UpdateBindings();
|
|
}
|
|
}
|
|
|
|
protected InputAction actionReference = null;
|
|
|
|
public VariableMovementWithState(VMAsset asset, IInputActionCollection inputCollection)
|
|
{
|
|
InputCollection = inputCollection;
|
|
OnToggleStateChanged = new UnityEvent<bool>();
|
|
Asset = asset;
|
|
}
|
|
|
|
protected void Cancelled(InputAction.CallbackContext obj) => Enabled = false;
|
|
protected void Performed(InputAction.CallbackContext obj) => Enabled = true;
|
|
|
|
protected void UpdateBindings()
|
|
{
|
|
if (actionReference != null)
|
|
{
|
|
actionReference.performed -= Performed;
|
|
actionReference.canceled -= Cancelled;
|
|
}
|
|
|
|
if (_inputCollection != null)
|
|
foreach (InputAction action in _inputCollection)
|
|
if (action.name == Asset.Name)
|
|
{
|
|
actionReference = action;
|
|
actionReference.performed += Performed;
|
|
actionReference.canceled += Cancelled;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|