BetterInputField.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using UnityEngine;
  6. using UnityEngine.Events;
  7. using UnityEngine.EventSystems;
  8. using UnityEngine.UI;
  9. namespace TheraBytes.BetterUi
  10. {
  11. [HelpURL("https://documentation.therabytes.de/better-ui/BetterInputField.html")]
  12. [AddComponentMenu("Better UI/Controls/Better Input Field", 30)]
  13. public class BetterInputField : InputField, IBetterTransitionUiElement
  14. {
  15. public List<Transitions> BetterTransitions { get { return betterTransitions; } }
  16. public List<Graphic> AdditionalPlaceholders { get { return additionalPlaceholders; } }
  17. [SerializeField, DefaultTransitionStates]
  18. List<Transitions> betterTransitions = new List<Transitions>();
  19. [SerializeField]
  20. List<Graphic> additionalPlaceholders = new List<Graphic>();
  21. protected override void DoStateTransition(SelectionState state, bool instant)
  22. {
  23. base.DoStateTransition(state, instant);
  24. if (!(base.gameObject.activeInHierarchy))
  25. return;
  26. foreach (var info in betterTransitions)
  27. {
  28. info.SetState(state.ToString(), instant);
  29. }
  30. }
  31. public override void OnUpdateSelected(BaseEventData eventData)
  32. {
  33. base.OnUpdateSelected(eventData);
  34. DisplayPlaceholders(this.text);
  35. }
  36. void DisplayPlaceholders(string input)
  37. {
  38. bool show = string.IsNullOrEmpty(input);
  39. if (Application.isPlaying)
  40. {
  41. foreach (var ph in additionalPlaceholders)
  42. {
  43. ph.enabled = show;
  44. }
  45. }
  46. }
  47. }
  48. }