using UnityEngine; namespace NovaSamples.UIControls { /// /// Base class for classes that provide input to . /// public abstract class TextFieldInputProvider : MonoBehaviour { [Tooltip("The input field to which this class provides input.")] [SerializeField] protected TextField inputField = null; [Tooltip("The focuser, used to determine when this class should start providing input.")] [SerializeField] protected TextFieldSelector selector = null; [SerializeField] [Tooltip("If true, the user can input newlines into the field.")] protected bool allowNewlines = true; protected abstract void HandleFocused(); protected abstract void HandleFocusLost(); protected virtual void OnEnable() { // Subscribe to focus change events selector.OnFocused += HandleFocused; selector.OnFocusLost += HandleFocusLost; } protected virtual void OnDisable() { // Unsubscribe from focus change events selector.OnFocused -= HandleFocused; selector.OnFocusLost -= HandleFocusLost; } /// /// Stub function for text/character validation. Can be extended to /// support different scenarios, e.g. numbers only, alphanumerics only, etc. /// /// /// protected bool IsValidChar(char c) { // Don't allow return chars or tabulator key to be entered into single line fields. if (!allowNewlines && (c == '\t' || c == '\r' || c == 10)) { return false; } // Null character if (c == 0) { return false; } // Delete key on mac if (c == 127) { return false; } return true; } } }