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; } } } }