FlowerCard.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. using UnityEngine;
  2. using UnityEngine.UI;
  3. using UnityEngine.Events;
  4. using UnityEngine.EventSystems;
  5. using System.Collections;
  6. using System.Collections.Generic;
  7. public class FlowerCard : MonoBehaviour
  8. {
  9. #region 变量
  10. public int SelectIndex;
  11. public int ScrollSelectIndex;
  12. public bool SelectLock;
  13. public float LeftBorder;
  14. public float RightBorder;
  15. public Transform SeleItem;
  16. public Transform ScrollSeleItem;
  17. public List<Transform> ItemList;
  18. public List<FlowerInfo> InfoList;
  19. public ScrollRectPlus ScrollRect;
  20. #endregion
  21. public void RegistValue()
  22. {
  23. InfoList = new List<FlowerInfo>();
  24. ItemList = new List<Transform>();
  25. SelectIndex = -1;
  26. ScrollRect = ManaReso.Get<ScrollRectPlus>("H_Scrr");
  27. ScrollRect.DragEvent += OnDrag;
  28. ScrollRect.EndDragEvent += OnEndDrag;
  29. MoveVec moveVec = ScrollRect.content.CreateMoveVec();
  30. moveVec.OnStart += () =>
  31. {
  32. SelectLock = true;
  33. };
  34. moveVec.OnFinish += () =>
  35. {
  36. SelectLock = false;
  37. };
  38. }
  39. public void Add(FlowerInfo flowerInfo)
  40. {
  41. Transform tra = ManaReso.GetFlowerItemH();
  42. tra.CreateTweenScale(new Vector3(1, 1, 1), new Vector3(1.25f, 1.25f, 1), 0.25f, true, true, Curve.EaseOutQuad);
  43. Image image = tra.transform.GetChild(0).GetComponent<Image>();
  44. image.sprite = flowerInfo.Sprite;
  45. Vector2 newSize = flowerInfo.Sprite.rect.size;
  46. newSize.x *= 0.2f;
  47. newSize.y *= 0.2f;
  48. image.rectTransform.sizeDelta = newSize;
  49. Button button = tra.GetComponent<Button>();
  50. button.onClick.AddListener
  51. (
  52. () =>
  53. {
  54. Select(tra);
  55. }
  56. );
  57. InfoList.Add(flowerInfo);
  58. ItemList.Add(tra);
  59. }
  60. public void Close()
  61. {
  62. if (ItemList.Valid() == false)
  63. {
  64. return;
  65. }
  66. SeleItem.TweenBacScale();
  67. SeleItem = null;
  68. SelectIndex = -1;
  69. for (int i = 0; i < ItemList.Count; i++)
  70. {
  71. ManaReso.SaveUI(ItemList[i]);
  72. }
  73. Vector3 delta = ScrollRect.transform.position - ItemList[0].transform.position;
  74. delta.y = 0;
  75. delta.z = 0;
  76. ScrollRect.content.MoveVec(ScrollRect.content.transform.position + delta, 0.25f, Curve.EaseOutQuad);
  77. InfoList = new List<FlowerInfo>();
  78. ItemList = new List<Transform>();
  79. ManaReso.Get<ContentSizeFitter>("H_Grid").enabled = true;
  80. ManaReso.Get<HorizontalLayoutGroup>("H_Grid").enabled = true;
  81. }
  82. public void Select(int index)
  83. {
  84. if (SelectLock)
  85. {
  86. return;
  87. }
  88. if (SelectIndex != index)
  89. {
  90. if (SeleItem != null)
  91. {
  92. SeleItem.TweenBacScale();
  93. }
  94. SelectIndex = index;
  95. SeleItem = ItemList[index];
  96. SeleItem.TweenForScale();
  97. SeleItem.transform.SetAsLastSibling();
  98. ManaGarden.SetFlowerCard(InfoList[index]);
  99. Vector3 delta = ScrollRect.transform.position - SeleItem.transform.position;
  100. delta.y = 0;
  101. delta.z = 0;
  102. ScrollRect.content.MoveVec(ScrollRect.content.transform.position + delta, 0.25f, Curve.EaseOutQuad);
  103. }
  104. }
  105. public void Select(Transform item)
  106. {
  107. Select(ItemList.IndexOf(item));
  108. }
  109. public void PrevItem()
  110. {
  111. if (SelectIndex > 0)
  112. {
  113. Select(SelectIndex - 1);
  114. }
  115. }
  116. public void NextItem()
  117. {
  118. if (SelectIndex < ItemList.Count - 1)
  119. {
  120. Select(SelectIndex + 1);
  121. }
  122. }
  123. private void OnDrag(PointerEventData eventData)
  124. {
  125. if (ItemList.Count > 2)
  126. {
  127. ScrollRect.horizontal = true;
  128. if (ScrollRect.content.position.x < LeftBorder)
  129. {
  130. ScrollRect.content.SetX(LeftBorder);
  131. }
  132. else if (ScrollRect.content.position.x > RightBorder)
  133. {
  134. ScrollRect.content.SetX(RightBorder);
  135. }
  136. }
  137. else
  138. {
  139. ScrollRect.horizontal = false;
  140. }
  141. float minX = 999999999;
  142. for (int i = 0; i < ItemList.Count; i++)
  143. {
  144. float x = Mathf.Abs(ItemList[i].localPosition.x - ScrollRect.content.InverseTransformPoint(ScrollRect.transform.position).x);
  145. if (x < minX)
  146. {
  147. minX = x;
  148. ScrollSeleItem = ItemList[i];
  149. ScrollSelectIndex = i;
  150. }
  151. }
  152. if (ScrollSelectIndex != SelectIndex)
  153. {
  154. SeleItem.TweenBacScale();
  155. ScrollSeleItem.TweenForScale();
  156. ScrollSeleItem.SetAsLastSibling();
  157. SeleItem = ScrollSeleItem;
  158. SelectIndex = ScrollSelectIndex;
  159. ManaGarden.SetFlowerCard(InfoList[ScrollSelectIndex]);
  160. }
  161. }
  162. private void OnEndDrag(PointerEventData eventData)
  163. {
  164. Vector3 delta = ScrollRect.transform.position - SeleItem.transform.position;
  165. delta.y = 0;
  166. delta.z = 0;
  167. ScrollRect.content.MoveVec(ScrollRect.content.transform.position + delta, 0.25f, Curve.EaseOutQuad);
  168. }
  169. }