SwordsControl.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.TextCore.Text;
  5. public class SwordsControl : MonoBehaviour
  6. {
  7. public enum SwordsControlState
  8. {
  9. Damage,
  10. Scale,
  11. All
  12. }
  13. public float intervalTime; //造成伤害的间隔时间
  14. public int boostNum;
  15. public List<MoveCharacter> moveCharacrters = new List<MoveCharacter>(); //被造成伤害的角色
  16. public float totalTime; //多少时间后消失
  17. [HideInInspector] public float time; //经过的时间
  18. public GameObject parent;
  19. public PlayerController owner;
  20. public int conductId;
  21. [Header("伤害基数")]
  22. public int damage;
  23. [Header("范围基数")]
  24. public float scale;
  25. public SwordsControlState swordsControl;
  26. public float[] stageSize;
  27. public int[] demonicDieNum;
  28. private void Start()
  29. {
  30. if (swordsControl != SwordsControlState.Damage)
  31. {
  32. print(111111);
  33. transform.parent.parent.localScale = Vector3.one * scale * TranSize(boostNum);
  34. }
  35. }
  36. private void Update()
  37. {
  38. time += Time.deltaTime;
  39. if (time >= totalTime)
  40. {
  41. owner.conductCanRelease[conductId] = true;
  42. parent.SetActive(false);
  43. }
  44. }
  45. private void OnTriggerEnter(Collider other)
  46. {
  47. BeHitTrigger beHitTrigger = other.GetComponent<BeHitTrigger>();
  48. if (beHitTrigger != null)
  49. {
  50. if (beHitTrigger.owner.gameObject.tag == "Enemy")
  51. {
  52. MoveCharacter character = other.GetComponentInParent<MoveCharacter>();
  53. moveCharacrters.Add(character);
  54. character.sustainedInjuryTime = intervalTime;
  55. character.sustainedInjury_IntervalTime = intervalTime;
  56. if(swordsControl != SwordsControlState.Scale)
  57. {
  58. character.sustainedInjury_damage = damage * boostNum;
  59. }
  60. character.isSustainedInjury = true;
  61. }
  62. }
  63. }
  64. private void OnTriggerExit(Collider other)
  65. {
  66. BeHitTrigger beHitTrigger = other.GetComponent<BeHitTrigger>();
  67. if (beHitTrigger != null)
  68. {
  69. if (beHitTrigger.owner.gameObject.tag == "Enemy")
  70. {
  71. MoveCharacter character = other.GetComponentInParent<MoveCharacter>();
  72. if (moveCharacrters.Exists(i => i == character))
  73. {
  74. character.isSustainedInjury = false;
  75. moveCharacrters.Remove(character);
  76. }
  77. }
  78. }
  79. }
  80. private void OnDisable()
  81. {
  82. for (int i = 0; i < moveCharacrters.Count; i++)
  83. {
  84. moveCharacrters[i].isSustainedInjury = false;
  85. }
  86. }
  87. private float TranSize(int dieNum)
  88. {
  89. for (int i = stageSize.Length - 1; i >= 0; i--)
  90. {
  91. if (dieNum >= demonicDieNum[i])
  92. {
  93. if (i == stageSize.Length - 1)
  94. {
  95. return stageSize[i];
  96. }
  97. float size = stageSize[i] + (stageSize[i + 1] - stageSize[i]) / (demonicDieNum[i + 1] - demonicDieNum[i]) * (dieNum - demonicDieNum[i]);
  98. return size;
  99. }
  100. }
  101. return 1;
  102. }
  103. }