using Nova; using UnityEngine; using UnityEngine.Events; namespace NovaSamples.UIControls { /// /// A UI control which reacts to user input and fires click events /// public class Button : UIControl { [Tooltip("Event fired when the button is clicked.")] public UnityEvent OnClicked = null; private void OnEnable() { if (View.TryGetVisuals(out ButtonVisuals visuals)) { // Set default state visuals.UpdateVisualState(VisualState.Default); } // Subscribe to desired events View.UIBlock.AddGestureHandler(HandleClicked); View.UIBlock.AddGestureHandler(ButtonVisuals.HandleHovered); View.UIBlock.AddGestureHandler(ButtonVisuals.HandleUnhovered); View.UIBlock.AddGestureHandler(ButtonVisuals.HandlePressed); View.UIBlock.AddGestureHandler(ButtonVisuals.HandleReleased); View.UIBlock.AddGestureHandler(ButtonVisuals.HandlePressCanceled); } private void OnDisable() { // Unsubscribe from events View.UIBlock.RemoveGestureHandler(HandleClicked); View.UIBlock.RemoveGestureHandler(ButtonVisuals.HandleHovered); View.UIBlock.RemoveGestureHandler(ButtonVisuals.HandleUnhovered); View.UIBlock.RemoveGestureHandler(ButtonVisuals.HandlePressed); View.UIBlock.RemoveGestureHandler(ButtonVisuals.HandleReleased); View.UIBlock.RemoveGestureHandler(ButtonVisuals.HandlePressCanceled); } /// /// Fire the Unity event on Click. /// /// The click event data. /// The buttons visuals which received the click. private void HandleClicked(Gesture.OnClick evt, ButtonVisuals visuals) => OnClicked?.Invoke(); } }