CardExpanding2D.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. /// <summary>
  2. /// Credit - ryanslikesocool
  3. /// Sourced from - https://github.com/ryanslikesocool/Unity-Card-UI
  4. /// </summary>
  5. using System.Collections;
  6. using System.Collections.Generic;
  7. using UnityEngine;
  8. using UnityEngine.UI;
  9. namespace UnityEngine.UI.Extensions
  10. {
  11. public class CardExpanding2D : MonoBehaviour
  12. {
  13. [SerializeField]
  14. private float lerpSpeed = 8f;
  15. [SerializeField]
  16. private RectTransform buttonRect = null;
  17. private Vector2 closeButtonMin = Vector2.zero;
  18. private Vector2 closeButtonMax = Vector2.zero;
  19. [SerializeField]
  20. private Vector2 cardSize = Vector2.zero;
  21. [SerializeField]
  22. private Vector2 pageSize = Vector2.zero;
  23. private Vector2 cardCenter = Vector2.zero;
  24. private Vector2 pageCenter = Vector2.zero;
  25. private Vector2 cardMin = Vector2.zero;
  26. private Vector2 cardMax = Vector2.zero;
  27. private Vector2 pageMin = Vector2.zero;
  28. private Vector2 pageMax = Vector2.zero;
  29. private RectTransform rectTrans;
  30. ///I wouldn't recommend changing animationActive's value here unless you want the card to start as a page.
  31. private int animationActive = -1;
  32. void Start()
  33. {
  34. rectTrans = GetComponent<RectTransform>();
  35. ///Setting up the button's starting color and page position.
  36. buttonRect.GetComponent<Image>().color = new Color32(228, 0, 0, 0);
  37. closeButtonMin = new Vector2(pageMin.x + pageSize.x - 64, pageMin.y + pageSize.y - 64);
  38. closeButtonMax = new Vector2(pageMax.x - 16, pageMax.y - 16);
  39. ///Setting up the card and page offsets.
  40. cardMin = new Vector2(cardCenter.x - cardSize.x * 0.5f, cardCenter.y - cardSize.y * 0.5f);
  41. cardMax = new Vector2(cardCenter.x + cardSize.x * 0.5f, cardCenter.y + cardSize.y * 0.5f);
  42. pageMin = new Vector2(pageCenter.x - pageSize.x * 0.5f, pageCenter.y - pageSize.y * 0.5f);
  43. pageMax = new Vector2(pageCenter.x + pageSize.x * 0.5f, pageCenter.y + pageSize.y * 0.5f);
  44. }
  45. void Update()
  46. {
  47. ///When animationActive == 1, the card is expanding into a page.
  48. if (animationActive == 1)
  49. {
  50. rectTrans.offsetMin = Vector2.Lerp(rectTrans.offsetMin, pageMin, Time.deltaTime * lerpSpeed);
  51. rectTrans.offsetMax = Vector2.Lerp(rectTrans.offsetMax, pageMax, Time.deltaTime * lerpSpeed);
  52. if (rectTrans.offsetMin.x < pageMin.x * 0.995f && rectTrans.offsetMin.y < pageMin.y * 0.995f && rectTrans.offsetMax.x > pageMax.x * 0.995f && rectTrans.offsetMax.y > pageMax.y * 0.995f)
  53. {
  54. rectTrans.offsetMin = pageMin;
  55. rectTrans.offsetMax = pageMax;
  56. ///Changes the button color so it's visible in the page view.
  57. buttonRect.GetComponent<Image>().color = Color32.Lerp(buttonRect.GetComponent<Image>().color, new Color32(228, 0, 0, 191), Time.deltaTime * lerpSpeed);
  58. if (Mathf.Abs(buttonRect.GetComponent<Image>().color.a - 191) < 2)
  59. {
  60. buttonRect.GetComponent<Image>().color = new Color32(228, 0, 0, 191);
  61. animationActive = 0;
  62. CardStack2D.canUseHorizontalAxis = true;
  63. }
  64. }
  65. ///When animationActive == -1, the page is shrinking into a card.
  66. }
  67. else if (animationActive == -1)
  68. {
  69. buttonRect.GetComponent<Image>().color = Color32.Lerp(buttonRect.GetComponent<Image>().color, new Color32(228, 0, 0, 0), Time.deltaTime * lerpSpeed * 1.25f);
  70. rectTrans.offsetMin = Vector2.Lerp(rectTrans.offsetMin, cardMin, Time.deltaTime * lerpSpeed);
  71. rectTrans.offsetMax = Vector2.Lerp(rectTrans.offsetMax, cardMax, Time.deltaTime * lerpSpeed);
  72. if (rectTrans.offsetMin.x > cardMin.x * 1.005f && rectTrans.offsetMin.y > cardMin.y * 1.005f && rectTrans.offsetMax.x < cardMax.x * 1.005f && rectTrans.offsetMax.y < cardMax.y * 1.005f)
  73. {
  74. rectTrans.offsetMin = cardMin;
  75. rectTrans.offsetMax = cardMax;
  76. ///Makes the button take up the whole card.
  77. buttonRect.offsetMin = Vector2.zero;
  78. buttonRect.offsetMax = Vector2.zero;
  79. animationActive = 0;
  80. CardStack2D.canUseHorizontalAxis = true;
  81. }
  82. }
  83. }
  84. public void ToggleCard()
  85. {
  86. CardStack2D.canUseHorizontalAxis = false;
  87. if (animationActive != 1)
  88. {
  89. animationActive = 1;
  90. cardCenter = transform.localPosition;
  91. ///Makes the button the right size in page view.
  92. buttonRect.offsetMin = closeButtonMin;
  93. buttonRect.offsetMax = closeButtonMax;
  94. }
  95. else if (animationActive != -1)
  96. {
  97. animationActive = -1;
  98. }
  99. }
  100. }
  101. }