SoldierLevelRecord.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using cfg;
  5. public class SoldierLevelRecord : MonoBehaviour
  6. {
  7. public LevelSelect levelSelect;
  8. [System.Serializable]
  9. public struct SoldierExtraBuff
  10. {
  11. public SoldierType st;
  12. public int summonAttack; //起手式伤害
  13. public int marchAttack; //行军式伤害
  14. public int hp; //血量
  15. public int armor; //护甲
  16. public int mp; //蓝耗
  17. public int armorPiercing; //穿甲
  18. public int shootDownDamage; //击落伤害
  19. public float shootDownDamageRate; //击飞落地伤害比率
  20. }
  21. public struct SoldierEXPList
  22. {
  23. public SoldierType st;
  24. public List<SingleSoldierLevel> ssl;
  25. }
  26. [DisplayOnly]
  27. public SoldierExtraBuff[] seb = new SoldierExtraBuff[3];
  28. private SoldierBuff sb;
  29. //本局游戏的士兵表
  30. static public SoldierEXPList[] soldierEXPlists = new SoldierEXPList[3];
  31. //本局游戏三个士兵的等级上限
  32. static public int[] maxLevels = new int[3];
  33. //excel表
  34. private List<SingleSoldierLevel> expList;
  35. //把整个表按照士兵种类分出来
  36. static public List<SoldierEXPList> allSoldierEXPLists;
  37. private void Start()
  38. {
  39. expList = GameManager.instance.allCfgData.CfgSoldierLevel.DataList;
  40. for (int i = 0; i < 3; i++)
  41. {
  42. seb[i].st = GameManager.curSoldiers[i];
  43. soldierEXPlists[i].st = seb[i].st;
  44. }
  45. allSoldierEXPLists = new List<SoldierEXPList>();
  46. RecordLevelLists();
  47. CurGameSoldierEXPList();
  48. Test_LevelSetting test_LevelSetting = GetComponent<Test_LevelSetting>();
  49. //测试用——开局士兵初始等级
  50. if(test_LevelSetting != null && levelSelect.isDebug)
  51. {
  52. test_LevelSetting.TestLevel();
  53. }
  54. }
  55. private SoldierType TranStringToSoldierType(string sname)
  56. {
  57. return (SoldierType)System.Enum.Parse(typeof(SoldierType), sname);
  58. }
  59. //读取本局游戏的几个士兵表
  60. public void CurGameSoldierEXPList()
  61. {
  62. int id = 0;
  63. foreach(SoldierType st in GameManager.curSoldiers)
  64. {
  65. foreach (SoldierEXPList sel in allSoldierEXPLists)
  66. {
  67. if (sel.st == st)
  68. {
  69. soldierEXPlists[id].ssl = sel.ssl;
  70. maxLevels[id] = sel.ssl.Count + 1;
  71. GetComponent<SoldierEXP>().SetNextEXP(st);
  72. id++;
  73. break;
  74. }
  75. }
  76. }
  77. }
  78. //把升级表按士兵种类分放
  79. private void RecordLevelLists()
  80. {
  81. string sname = expList[0].Soldier;
  82. SoldierType st = TranStringToSoldierType(sname);
  83. SoldierEXPList sel;
  84. sel.st = st;
  85. List<SingleSoldierLevel> curSSL = new List<SingleSoldierLevel>();
  86. foreach(SingleSoldierLevel ssl in expList)
  87. {
  88. if (ssl.Soldier == sname)
  89. {
  90. curSSL.Add(ssl);
  91. }
  92. else
  93. {
  94. sel.ssl = curSSL;
  95. allSoldierEXPLists.Add(sel);
  96. curSSL = new List<SingleSoldierLevel>();
  97. sname = ssl.Soldier;
  98. st = TranStringToSoldierType(sname);
  99. sel.st = st;
  100. curSSL.Add(ssl);
  101. }
  102. }
  103. sel.ssl = curSSL;
  104. allSoldierEXPLists.Add(sel);
  105. }
  106. //士兵当前的加成
  107. public void ReadSoldierBuff(SoldierType st, SingleSoldierLevel ssl)
  108. {
  109. for(int i = 0; i < 3; i++)
  110. {
  111. if (seb[i].st == st)
  112. {
  113. seb[i].summonAttack = ssl.SummonAttack;
  114. seb[i].marchAttack = ssl.MarchAttack;
  115. seb[i].hp = ssl.HP;
  116. seb[i].armor = ssl.Armor;
  117. seb[i].mp = ssl.MP;
  118. seb[i].armorPiercing = ssl.ArmorPierce;
  119. seb[i].shootDownDamage = ssl.ShootDownDamage;
  120. seb[i].shootDownDamageRate = ssl.ShootDownDamageRate;
  121. break;
  122. }
  123. }
  124. }
  125. public void SoldierAddLevelBuff(Demonic dem)
  126. {
  127. for (int i = 0; i < 3; i++)
  128. {
  129. if (seb[i].st == dem.soldierType)
  130. {
  131. sb = dem.GetComponent<SoldierBuff>();
  132. sb.AddSummonAttack(seb[i].summonAttack);
  133. sb.AddMarchAttack(seb[i].marchAttack);
  134. sb.AddHP(seb[i].hp);
  135. sb.AddArmor(seb[i].armor);
  136. sb.AddShootDownDamage(seb[i].shootDownDamage);
  137. sb.AddShootDownDamageRate(seb[i].shootDownDamageRate);
  138. break;
  139. }
  140. }
  141. }
  142. }