Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,23 @@ public class ControllerInputRemap {
public bool isEnabled = false;
public InputActionReference inputActionSubmit;
public UnityEvent<InputAction.CallbackContext> methodToCall;

internal bool isSubscribed = false;
}

public List<ControllerInputRemap> Redirectors = new List<ControllerInputRemap>();

private void Start() {
private void OnEnable() {
foreach (ControllerInputRemap r in Redirectors) {
if (r.isEnabled) {
Subscribe(r);
}
}
}

private void OnDisable() {
foreach (ControllerInputRemap r in Redirectors) {
EnableRemapping(r.id, r.isEnabled);
Unsubscribe(r);
}
}

Expand All @@ -43,10 +53,30 @@ public List<string> GetControllerRemappings () {
/// <param name="onOff">active</param>
public void EnableRemapping (string id, bool onOff) {
int index = Redirectors.FindIndex(x => x.id == id);
if (index < 0) return;

Redirectors[index].isEnabled = onOff;

if (!isActiveAndEnabled) return;

if (onOff) Subscribe(Redirectors[index]);
else Unsubscribe(Redirectors[index]);
}

private void Subscribe(ControllerInputRemap r) {
if (r.isSubscribed || r.inputActionSubmit == null || r.inputActionSubmit.action == null) return;

if (onOff) Redirectors[index].inputActionSubmit.action.performed += Redirectors[index].methodToCall.Invoke;
else Redirectors[index].inputActionSubmit.action.performed -= Redirectors[index].methodToCall.Invoke;
r.inputActionSubmit.action.Enable();
r.inputActionSubmit.action.performed += r.methodToCall.Invoke;
r.isSubscribed = true;
}

private void Unsubscribe(ControllerInputRemap r) {
if (!r.isSubscribed || r.inputActionSubmit == null || r.inputActionSubmit.action == null) return;

r.inputActionSubmit.action.performed -= r.methodToCall.Invoke;
// Note: We don't disable the action here as other components might be using the same InputActionReference
r.isSubscribed = false;
}
}
}