SoldierEXP.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using Sirenix.OdinInspector;
  5. using cfg;
  6. using TMPro;
  7. public class SoldierEXP : MonoBehaviour
  8. {
  9. [System.Serializable]
  10. public struct SingleSoldierEXP
  11. {
  12. [DisplayOnly]
  13. [LabelText("士兵种类")]
  14. public SoldierType st;
  15. [DisplayOnly]
  16. public int curEXP;
  17. [DisplayOnly]
  18. //士兵当前等级/升级到下一级是哪一级
  19. public int level;
  20. }
  21. //自己
  22. static public SoldierEXP expInstance;
  23. [DisplayOnly]
  24. [LabelText("每种士兵经验值")]
  25. public SingleSoldierEXP[] ssexp = new SingleSoldierEXP[3];
  26. [LabelText("升到下一级所需的经验值")]
  27. public SingleSoldierEXP[] needEXP = new SingleSoldierEXP[3];
  28. [Header("等级文本(临时)")]
  29. public TextMeshProUGUI[] levels=new TextMeshProUGUI[3];
  30. //读升级数据的脚本
  31. private SoldierLevelRecord slr;
  32. private void OnEnable()
  33. {
  34. expInstance = this;
  35. slr = GetComponent<SoldierLevelRecord>();
  36. }
  37. private void Start()
  38. {
  39. SoldierType[] sts = GameManager.curSoldiers;
  40. for (int i = 0; i < 3; i++)
  41. {
  42. ssexp[i].st = sts[i];
  43. ssexp[i].level = 1;
  44. needEXP[i].st = sts[i];
  45. needEXP[i].level = 1;
  46. }
  47. }
  48. //经验不断加加加加到厌倦~
  49. public void AddEXP(SoldierType st, int exp)
  50. {
  51. for(int i = 0; i < 3; i++)
  52. {
  53. if (ssexp[i].st == st)
  54. {
  55. //满级了就不加了
  56. if (ssexp[i].level == SoldierLevelRecord.maxLevels[i])
  57. {
  58. return;
  59. }
  60. ssexp[i].curEXP += exp;
  61. JudgeEXP(st);
  62. break;
  63. }
  64. }
  65. }
  66. //判定某种士兵的经验值是否足以升级
  67. private void JudgeEXP(SoldierType st)
  68. {
  69. for(int i = 0; i < 3; i++)
  70. {
  71. if (ssexp[i].st == st)
  72. {
  73. while (ssexp[i].curEXP >= needEXP[i].curEXP)
  74. {
  75. //升级
  76. ssexp[i].level += 1;
  77. levels[i].text = "LV" + ssexp[i].level.ToString();
  78. SingleSoldierLevel s = null;
  79. foreach (SoldierLevelRecord.SoldierEXPList sel in SoldierLevelRecord.soldierEXPlists)
  80. {
  81. if (sel.st == st)
  82. {
  83. foreach(SingleSoldierLevel ssl in sel.ssl)
  84. {
  85. if (ssl.Level == ssexp[i].level)
  86. {
  87. s = ssl;
  88. }
  89. }
  90. break;
  91. }
  92. }
  93. //读取升级后该士兵的增益
  94. slr.ReadSoldierBuff(st, s);
  95. //满了就先试一下
  96. if (ssexp[i].level == SoldierLevelRecord.maxLevels[i])
  97. {
  98. levels[i].text = "LV" + ssexp[i].level.ToString() + "(满)";
  99. levels[i].color = Color.red;
  100. return;
  101. }
  102. //设置下一级所需的经验值
  103. SetNextEXP(st);
  104. }
  105. break;
  106. }
  107. }
  108. }
  109. //设置下一级所需的经验值
  110. public void SetNextEXP(SoldierType st)
  111. {
  112. for(int i = 0; i < 3; i++)
  113. {
  114. if (needEXP[i].st == st)
  115. {
  116. needEXP[i].level += 1;
  117. foreach(SoldierLevelRecord.SoldierEXPList sel in SoldierLevelRecord.soldierEXPlists)
  118. {
  119. if (sel.st == st)
  120. {
  121. foreach (SingleSoldierLevel ssl in sel.ssl)
  122. {
  123. if (ssl.Level == needEXP[i].level)
  124. {
  125. needEXP[i].curEXP = ssl.EXP;
  126. break;
  127. }
  128. }
  129. break;
  130. }
  131. }
  132. break;
  133. }
  134. }
  135. }
  136. }