TweenScale.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. using UnityEngine;
  2. using System;
  3. using System.Collections;
  4. public class TweenScale : Tween
  5. {
  6. #region
  7. public Vector3 Delta;
  8. public Vector3 Origin;
  9. public Vector3 Destination;
  10. public Transform Target;
  11. public CanvasGroup CG;
  12. public CurveFunctionV Func;
  13. #endregion
  14. public TweenScale(Transform target, Vector3 origin, Vector3 destination, float duration, bool originActive, bool destActive, Curve curve)
  15. {
  16. if (target.localScale == origin)
  17. {
  18. InForward = true;
  19. }
  20. else if (target.localScale == destination)
  21. {
  22. InBackward = true;
  23. }
  24. CG = target.GetComponent<CanvasGroup>();
  25. Func = ManaAnim.FunctionDicV[curve];
  26. Target = target;
  27. IsForward = false;
  28. IsBackward = false;
  29. Delta = destination - origin;
  30. Origin = origin;
  31. Duration = duration;
  32. DestActive = destActive;
  33. Destination = destination;
  34. OriginActive = originActive;
  35. OnForwardStart += () =>
  36. {
  37. Target.SetActive(true);
  38. if (CG != null)
  39. {
  40. CG.interactable = false;
  41. }
  42. };
  43. OnForwardFinish += () =>
  44. {
  45. Target.SetActive(DestActive);
  46. if (CG != null)
  47. {
  48. CG.interactable = DestActive;
  49. }
  50. };
  51. OnBackwardStart += () =>
  52. {
  53. Target.SetActive(true);
  54. if (CG != null)
  55. {
  56. CG.interactable = false;
  57. }
  58. };
  59. OnBackwardFinish += () =>
  60. {
  61. Target.SetActive(OriginActive);
  62. if (CG != null)
  63. {
  64. CG.interactable = OriginActive;
  65. }
  66. };
  67. }
  68. public override void StartForward()
  69. {
  70. base.StartForward();
  71. if (IsBackward)
  72. {
  73. Timer = Duration - Timer;
  74. }
  75. else
  76. {
  77. Target.localScale = Origin;
  78. }
  79. }
  80. public override void StartBackward()
  81. {
  82. base.StartBackward();
  83. if (IsForward)
  84. {
  85. Timer = Duration - Timer;
  86. }
  87. else
  88. {
  89. Target.localScale = Destination;
  90. }
  91. }
  92. public override bool DoForward()
  93. {
  94. Timer += Time.fixedDeltaTime;
  95. if (Timer > Duration)
  96. {
  97. Timer = 0;
  98. Target.localScale = Destination;
  99. IsForward = false;
  100. InBackward = true;
  101. OnForwardFinish.Invoke();
  102. ManaAnim.TweenForList.Remove(this);
  103. return true;
  104. }
  105. else
  106. {
  107. Target.localScale = Func(Timer, Duration, Origin, Delta);
  108. return false;
  109. }
  110. }
  111. public override bool DoBackward()
  112. {
  113. Timer += Time.fixedDeltaTime;
  114. if (Timer > Duration)
  115. {
  116. Timer = 0;
  117. Target.localScale = Origin;
  118. IsBackward = false;
  119. InForward = true;
  120. OnBackwardFinish.Invoke();
  121. ManaAnim.TweenBacList.Remove(this);
  122. return true;
  123. }
  124. else
  125. {
  126. Target.localScale = Func(Timer, Duration, Destination, -Delta);
  127. return false;
  128. }
  129. }
  130. }