64 lines
1.9 KiB
C#
64 lines
1.9 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
|
||
|
{
|
||
|
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;
|
||
|
}
|
||
|
}
|