SupplyBoxAction.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. using System;
  2. using System.Collections;
  3. using ExtensionMethods;
  4. using UnityEngine;
  5. public class SupplyBoxAction : BaseBehaviour
  6. {
  7. public bool Opened
  8. {
  9. get
  10. {
  11. return this.attribute.Opened;
  12. }
  13. }
  14. private void Awake()
  15. {
  16. this.attribute = base.GetComponent<SupplyAttribute>();
  17. this.stateMachine = base.GetComponent<StateMachine>();
  18. this.spineAnim = base.GetComponent<SpineAnimationController>();
  19. }
  20. private void Start()
  21. {
  22. this.stateMachine.AddStates(typeof(SupplyBoxAction.StateEnum));
  23. this.stateMachine.OnEnter += this.OnMyStateEnter;
  24. this.ChangeState((!this.attribute.Opened) ? SupplyBoxAction.StateEnum.Unknow : SupplyBoxAction.StateEnum.Null);
  25. }
  26. private void Update()
  27. {
  28. if (this.stateMachine.currentState == "Unknow" && Vector2.Distance(R.Player.Transform.position, base.transform.position) <= this.attribute.ShowDistance)
  29. {
  30. this.UnknowToKnow();
  31. }
  32. }
  33. private void OnMyStateEnter(object sender, StateMachine.StateEventArgs args)
  34. {
  35. SupplyBoxAction.StateEnum stateEnum = EnumTools.ToEnum<SupplyBoxAction.StateEnum>(args.state, false);
  36. switch (stateEnum)
  37. {
  38. case SupplyBoxAction.StateEnum.Null:
  39. case SupplyBoxAction.StateEnum.EnLv0ToLv1:
  40. case SupplyBoxAction.StateEnum.EnLv1ToLv2:
  41. case SupplyBoxAction.StateEnum.EnLv2ToLv3:
  42. case SupplyBoxAction.StateEnum.EnLv3ToLv4:
  43. case SupplyBoxAction.StateEnum.EnLv4ToNull:
  44. case SupplyBoxAction.StateEnum.HPLv0ToLv1:
  45. case SupplyBoxAction.StateEnum.HPLv1ToLv2:
  46. case SupplyBoxAction.StateEnum.HPLv2ToLv3:
  47. case SupplyBoxAction.StateEnum.HPLv3ToLv4:
  48. case SupplyBoxAction.StateEnum.HPLv4ToNull:
  49. case SupplyBoxAction.StateEnum.KeyLv0ToLv1:
  50. case SupplyBoxAction.StateEnum.KeyLv1ToLv2:
  51. case SupplyBoxAction.StateEnum.KeyLv2ToLv3:
  52. case SupplyBoxAction.StateEnum.KeyLv3ToLv4:
  53. case SupplyBoxAction.StateEnum.KeyLv4ToNull:
  54. case SupplyBoxAction.StateEnum.MoneyHit:
  55. case SupplyBoxAction.StateEnum.MoneyNull:
  56. case SupplyBoxAction.StateEnum.UnknowToEnergy:
  57. case SupplyBoxAction.StateEnum.UnknowToHP:
  58. case SupplyBoxAction.StateEnum.UnknowToKey:
  59. case SupplyBoxAction.StateEnum.UnknowToMoney:
  60. case SupplyBoxAction.StateEnum.UnknowToWPower:
  61. case SupplyBoxAction.StateEnum.WPLv0ToLv1:
  62. case SupplyBoxAction.StateEnum.WPLv1ToLv2:
  63. case SupplyBoxAction.StateEnum.WPLv2ToLv3:
  64. case SupplyBoxAction.StateEnum.WPLv3ToLv4:
  65. case SupplyBoxAction.StateEnum.WPLv4ToNull:
  66. this.spineAnim.Play(stateEnum, false, true, 1f);
  67. break;
  68. case SupplyBoxAction.StateEnum.Unknow:
  69. this.spineAnim.Play(stateEnum, true, false, 1f);
  70. break;
  71. }
  72. }
  73. public void ChangeState(SupplyBoxAction.StateEnum nextSta)
  74. {
  75. if (EnumTools.IsInEnum<SupplyBoxAction.DieSta>(this.stateMachine.currentState, false))
  76. {
  77. return;
  78. }
  79. this.stateMachine.SetState(nextSta);
  80. }
  81. private void UnknowToKnow()
  82. {
  83. SupplyAttribute.SupplyBoxType supplyBox = this.attribute.SupplyBox;
  84. if (supplyBox != SupplyAttribute.SupplyBoxType.Flash)
  85. {
  86. if (supplyBox != SupplyAttribute.SupplyBoxType.Money)
  87. {
  88. if (supplyBox == SupplyAttribute.SupplyBoxType.Cheat)
  89. {
  90. this.ChangeState(SupplyBoxAction.StateEnum.UnknowToWPower);
  91. }
  92. }
  93. else
  94. {
  95. this.ChangeState(SupplyBoxAction.StateEnum.UnknowToMoney);
  96. }
  97. }
  98. else
  99. {
  100. this.ChangeState(SupplyBoxAction.StateEnum.UnknowToEnergy);
  101. }
  102. }
  103. private void OnDrawGizmosSelected()
  104. {
  105. Vector3 from = base.transform.position + Vector3.up;
  106. Vector3 vector = base.transform.position.AddY(-Physics2D.Raycast(base.transform.position, Vector2.down, 10f).distance);
  107. Gizmos.color = Color.cyan;
  108. Gizmos.DrawLine(from, vector);
  109. Gizmos.DrawLine(vector.AddX(-1f), vector.AddX(1f));
  110. }
  111. public Coroutine WaitForBreak()
  112. {
  113. return base.StartCoroutine(this.WaitForBreakCoroutine());
  114. }
  115. private IEnumerator WaitForBreakCoroutine()
  116. {
  117. while (!this.attribute.Opened)
  118. {
  119. yield return null;
  120. }
  121. yield break;
  122. }
  123. private SupplyAttribute attribute;
  124. private SpineAnimationController spineAnim;
  125. private StateMachine stateMachine;
  126. private enum DieSta
  127. {
  128. Null,
  129. EnLv4ToNull,
  130. HPLv4ToNull,
  131. KeyLv4ToNull,
  132. MoneyNull,
  133. WPLv4ToNull
  134. }
  135. public enum StateEnum
  136. {
  137. Null,
  138. EnLv0ToLv1,
  139. EnLv1ToLv2,
  140. EnLv2ToLv3,
  141. EnLv3ToLv4,
  142. EnLv4ToNull,
  143. HPLv0ToLv1,
  144. HPLv1ToLv2,
  145. HPLv2ToLv3,
  146. HPLv3ToLv4,
  147. HPLv4ToNull,
  148. KeyLv0ToLv1,
  149. KeyLv1ToLv2,
  150. KeyLv2ToLv3,
  151. KeyLv3ToLv4,
  152. KeyLv4ToNull,
  153. MoneyHit,
  154. MoneyNull,
  155. Unknow,
  156. UnknowToEnergy,
  157. UnknowToHP,
  158. UnknowToKey,
  159. UnknowToMoney,
  160. UnknowToWPower,
  161. WPLv0ToLv1,
  162. WPLv1ToLv2,
  163. WPLv2ToLv3,
  164. WPLv3ToLv4,
  165. WPLv4ToNull
  166. }
  167. }