/// /// Created by SWAN Dev /// using UnityEngine; using System; using System.Collections; using UnityEngine.UI; using UnityEngine.Events; /// /// Dynamic UI Label. /// (Last updated: 2018-10-11) /// public class DLabel : MonoBehaviour { [Header("[ Text ]")] public Text title; #if UNITY_EDITOR //for checking label height at development runtime, //check the boolean forceUpdate in inspector to update value. public float m_LabelHeight = 0f; public bool forceUpdate = false; void Update() { if(forceUpdate) { forceUpdate = false; m_LabelHeight = LabelHeight; } } #endif [Header("[ InputField - Basic ]")] public bool m_IsInputField = false; public int m_CharacterLimit = 0; public InputField.ContentType m_ContentType = InputField.ContentType.Standard; public bool m_ReadOnly = false; [HideInInspector] public InputField m_InputField = null; [Header("[ Number ]")] public bool m_EnableValueLimit = false; public float m_MinValue = 0; public float m_MaxValue = 0; [Header("[ Callback ]")] public UnityEvent m_OnSetTextEvent; public Action m_OnSetText; void OnEnable() { if(title == null) { title = GetComponent(); } _cachedText = title.text; if(m_IsInputField) { if(m_InputField == null) { m_InputField = GetComponent()? GetComponent() : gameObject.AddComponent(); } m_InputField.textComponent = title; m_InputField.onValueChanged.RemoveAllListeners(); m_InputField.onValueChanged.AddListener(delegate { _OnInputFieldValueChange(); }); m_InputField.characterLimit = m_CharacterLimit; m_InputField.contentType = m_ContentType; m_InputField.readOnly = m_ReadOnly; } } private void _OnInputFieldValueChange() { if(m_InputField) SetText(m_InputField.text); } private string _cachedText = ""; public void SetText(string text) { if(m_EnableValueLimit) { float f = 0f; if(float.TryParse(text, out f)) { if(f < m_MinValue || f > m_MaxValue) { f = Mathf.Clamp(f, m_MinValue, m_MaxValue); } } text = f.ToString(); } if(m_InputField == null) { title.text = text; } else { m_InputField.text = text; } _cachedText = text; m_OnSetTextEvent.Invoke(); if (m_OnSetText != null) { m_OnSetText(this); } } public string GetText(bool noUguiDelay = false) { return noUguiDelay ? _cachedText : title.text; } public int GetInt(bool noUguiDelay = false) { string tempText = noUguiDelay ? _cachedText : title.text; int num = 0; int.TryParse(tempText, out num); return num; } public float GetFloat(bool noUguiDelay = false) { string tempText = noUguiDelay ? _cachedText : title.text; float f = 0f; float.TryParse(tempText, out f); return f; } public void ClearText() { SetText(""); } public void SetColor(Color color) { title.color = color; } public void UpdateRectSizeDeltaW(float padding = 0) { title.rectTransform.sizeDelta = new Vector2(LabelWidth + padding, title.rectTransform.sizeDelta.y); } public void UpdateRectSizeDeltaH(float padding = 0) { title.rectTransform.sizeDelta = new Vector2(title.rectTransform.sizeDelta.x, LabelHeight + padding); } public float LabelHeight { get{ // Update the canvases to get the updated rect of the text Canvas.ForceUpdateCanvases(); return title.preferredHeight; } } public float LabelWidth { get{ // Update the canvases to get the updated rect of the text Canvas.ForceUpdateCanvases(); return title.preferredWidth; } } }