Tower.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using static Spine.Unity.Examples.SpineboyFootplanter;
  5. public class Tower : Character
  6. {
  7. private void Awake()
  8. {
  9. Init();
  10. }
  11. public bool GetAttack()
  12. {
  13. if (targetCharacter != null)
  14. {
  15. return true;
  16. }
  17. return false;
  18. }
  19. public void SearchTarget()
  20. {
  21. targetCharacter = searchTrigger.GetMinDisTarget(targetTypes, true);
  22. }
  23. public override void OnState()
  24. {
  25. base.OnState();
  26. SearchTarget();
  27. attackTime -= Time.deltaTime;
  28. dieKeepTime -= Time.deltaTime;
  29. bool isAttack = GetAttack();
  30. switch (state)
  31. {
  32. case CharacterState.Idle:
  33. if (isAttack)
  34. {
  35. Attack1();
  36. break;
  37. }
  38. break;
  39. case CharacterState.Attack:
  40. if (attackTime <= 0)
  41. {
  42. ChangeState(CharacterState.Idle);
  43. break;
  44. }
  45. break;
  46. case CharacterState.Die:
  47. if (dieKeepTime <= 0)
  48. {
  49. gameObject.SetActive(false);
  50. break;
  51. }
  52. break;
  53. default:
  54. break;
  55. }
  56. }
  57. public override void ChangeState(CharacterState newState)
  58. {
  59. switch (state)
  60. {
  61. case CharacterState.Idle:
  62. break;
  63. case CharacterState.Attack:
  64. aniCollider.Play("NotAttack", 1, 0);
  65. attackTarget = null;
  66. break;
  67. case CharacterState.Die:
  68. isDie = false;
  69. break;
  70. default:
  71. break;
  72. }
  73. CharacterState oldState = state;
  74. state = newState;
  75. switch (newState)
  76. {
  77. case CharacterState.Idle:
  78. ani.Play("idle", 0, 0);
  79. aniCollider.Play("Idle", 0, 0);
  80. rb.velocity = Vector3.zero;
  81. //animalAni.SetInteger("state", (int)PlayerState.Idle);
  82. break;
  83. case CharacterState.Attack:
  84. attackTarget = targetCharacter;
  85. if ((attackTarget.transform.position - transform.position).x > 0
  86. && bodyTrans.localScale.x > 0)
  87. {
  88. Turn();
  89. }
  90. else if ((attackTarget.transform.position - transform.position).x < 0
  91. && bodyTrans.localScale.x < 0)
  92. {
  93. Turn();
  94. }
  95. break;
  96. case CharacterState.Die:
  97. ani.Play("die", 0, 0);
  98. aniCollider.Play("Die", 0, 0);
  99. isDie = true;
  100. dieKeepTime = totalDieKeepTime;
  101. break;
  102. default:
  103. break;
  104. }
  105. }
  106. public override void BeHit(int damage, Vector3 force, bool changeHurt, float hurtTime, float repelValue)
  107. {
  108. hp -= damage;
  109. uiHp.Show(hp, totalHp);
  110. if (hp <= 0)
  111. {
  112. ChangeState(CharacterState.Die);
  113. }
  114. }
  115. }