// Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2024 Kybernetik // using UnityEngine; using UnityEngine.Events; #if UNITY_UGUI using UnityEngine.UI; #endif namespace Animancer.Samples { /// A simple system for dynamically creating a list of buttons based on a template. /// /// Documentation: /// /// Basic Scene Setup - Buttons /// /// https://kybernetik.com.au/animancer/api/Animancer.Samples/SampleButton [AddComponentMenu(Strings.SamplesMenuPrefix + "Sample Button")] [AnimancerHelpUrl(typeof(SampleButton))] public class SampleButton : MonoBehaviour { /************************************************************************************************************************/ #if UNITY_UGUI /************************************************************************************************************************/ [SerializeField] private RectTransform _Transform; [SerializeField] private Button _Button; [SerializeField] private Text _Text; [SerializeField] private float _Spacing = 10; /************************************************************************************************************************/ /// Automatically gathers the serialized fields. protected virtual void OnValidate() { gameObject.GetComponentInParentOrChildren(ref _Transform); gameObject.GetComponentInParentOrChildren(ref _Button); gameObject.GetComponentInParentOrChildren(ref _Text); } /************************************************************************************************************************/ /// /// Initializes this button when called with `index` 0. /// Otherwise, creates a copy of this button and initializes it instead. /// public SampleButton AddButton( int index, string text, UnityAction onClick) { SampleButton button = this; if (index != 0) { button = Instantiate(button, button._Transform.parent); Vector2 position = button._Transform.anchoredPosition; position.y -= index * (button._Transform.sizeDelta.y + button._Spacing); button._Transform.anchoredPosition = position; } button._Button.onClick.AddListener(onClick); button._Text.text = text; button.name = text; return button; } /************************************************************************************************************************/ #else /************************************************************************************************************************/ protected virtual void Awake() { SampleReadMe.LogMissingUnityUIModuleError(this); } /************************************************************************************************************************/ public SampleButton AddButton( int index, string text, UnityAction onClick) => this; /************************************************************************************************************************/ #endif /************************************************************************************************************************/ } }