using System; using UnityEngine; using UnityEngine.UI; namespace LapinerTools.uMyGUI { public class uMyGUI_TexturePicker : MonoBehaviour { [SerializeField] private GameObject m_texturePrefab; [SerializeField] private GameObject m_selectionPrefab; [SerializeField] private float m_offsetStart; [SerializeField] private float m_offsetEnd; [SerializeField] private float m_padding = 4f; [SerializeField] private Action m_buttonCallback; private Texture2D[] m_textures = new Texture2D[0]; private RectTransform m_rectTransform; private float m_elementSize = 1f; private GameObject m_selectionInstance; private GameObject[] m_instances = new GameObject[0]; public GameObject TexturePrefab { get { return m_texturePrefab; } set { m_texturePrefab = value; } } public GameObject SelectionPrefab { get { return m_selectionPrefab; } set { m_selectionPrefab = value; } } public float OffsetStart { get { return m_offsetStart; } set { m_offsetStart = value; } } public float OffsetEnd { get { return m_offsetEnd; } set { m_offsetEnd = value; } } public float Padding { get { return m_padding; } set { m_padding = value; } } public Action ButtonCallback { get { return m_buttonCallback; } set { m_buttonCallback = value; } } public Texture2D[] Textures { get { return m_textures; } set { m_textures = value; } } private RectTransform RTransform { get { return (!(m_rectTransform != null)) ? (m_rectTransform = GetComponent()) : m_rectTransform; } } public GameObject[] Instances { get { return m_instances; } } public void SetSelection(int p_selectionIndex) { if (m_selectionPrefab != null) { if (p_selectionIndex < 0 || p_selectionIndex >= m_instances.Length) { UnityEngine.Object.Destroy(m_selectionInstance); m_selectionInstance = null; return; } if (m_selectionInstance == null) { m_selectionInstance = UnityEngine.Object.Instantiate(m_selectionPrefab); } else { RectTransform component = m_selectionInstance.GetComponent(); Vector2 anchoredPosition = component.anchoredPosition; anchoredPosition.x = m_selectionPrefab.GetComponent().anchoredPosition.x; component.anchoredPosition = anchoredPosition; } SetRectTransformPosition(m_selectionInstance.GetComponent(), p_selectionIndex, m_elementSize); } else { Debug.LogError("uMyGUI_TexturePicker: SetSelection: you have passed a non negative selection index '" + p_selectionIndex + "', but the SelectionPrefab was not provided in the inspector or via script!"); } } public void SetTextures(Texture2D[] p_textures, int p_selectedIndex) { if (m_texturePrefab != null) { m_textures = p_textures; UnityEngine.Object.Destroy(m_selectionInstance); for (int i = 0; i < m_instances.Length; i++) { UnityEngine.Object.Destroy(m_instances[i]); } m_instances = new GameObject[p_textures.Length]; float num = 0f; for (int j = 0; j < p_textures.Length; j++) { m_instances[j] = UnityEngine.Object.Instantiate(m_texturePrefab); RectTransform component = m_instances[j].GetComponent(); m_elementSize = component.rect.width; SetRectTransformPosition(component, j, m_elementSize); RawImage rawImage = TryFindComponent(m_instances[j]); if (rawImage != null) { rawImage.texture = p_textures[j]; } else { Debug.LogError("uMyGUI_TexturePicker: SetTextures: TexturePrefab must have a RawImage component attached (can be in children)."); } if (m_buttonCallback != null) { Button button = TryFindComponent