using UnityEngine;
namespace Core.Input
{
///
/// Base component that switches between active input schemes
///
[DisallowMultipleComponent]
public class InputSchemeSwitcher : MonoBehaviour
{
///
/// The attached input schemes
///
protected InputScheme[] m_InputSchemes;
///
/// The default scheme based on the platform
///
protected InputScheme m_DefaultScheme;
///
/// The current scheme activated
///
protected InputScheme m_CurrentScheme;
///
/// Cache the schemes and activate the default
///
protected virtual void Awake()
{
m_InputSchemes = GetComponents();
foreach (InputScheme scheme in m_InputSchemes)
{
scheme.Deactivate(null);
if (m_CurrentScheme == null && scheme.isDefault)
{
m_DefaultScheme = scheme;
}
}
if (m_DefaultScheme == null)
{
Debug.LogError("[InputSchemeSwitcher] Default scheme not set.");
return;
}
m_DefaultScheme.Activate(null);
m_CurrentScheme = m_DefaultScheme;
}
///
/// Checks the different schemes and activates them if needed
///
protected virtual void Update()
{
foreach (InputScheme scheme in m_InputSchemes)
{
if (scheme.enabled || !scheme.shouldActivate)
{
continue;
}
if (m_CurrentScheme != null)
{
m_CurrentScheme.Deactivate(scheme);
}
scheme.Activate(m_CurrentScheme);
m_CurrentScheme = scheme;
break;
}
}
}
}