SoldierLevelRecord.cs 3.8 KB

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