| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using Sirenix.OdinInspector;
- using cfg;
- using TMPro;
- public class SoldierEXP : MonoBehaviour
- {
- [System.Serializable]
- public struct SingleSoldierEXP
- {
- [DisplayOnly]
- [LabelText("士兵种类")]
- public SoldierType st;
- [DisplayOnly]
- public int curEXP;
- [DisplayOnly]
- //士兵当前等级/升级到下一级是哪一级
- public int level;
- }
- //自己
- static public SoldierEXP expInstance;
- [DisplayOnly]
- [LabelText("每种士兵经验值")]
- public SingleSoldierEXP[] ssexp = new SingleSoldierEXP[3];
- [LabelText("升到下一级所需的经验值")]
- public SingleSoldierEXP[] needEXP = new SingleSoldierEXP[3];
- [Header("等级文本(临时)")]
- public TextMeshProUGUI[] levels=new TextMeshProUGUI[3];
- //读升级数据的脚本
- private SoldierLevelRecord slr;
- private void OnEnable()
- {
- expInstance = this;
- slr = GetComponent<SoldierLevelRecord>();
- }
- private void Start()
- {
- SoldierType[] sts = GameManager.curSoldiers;
- for (int i = 0; i < 3; i++)
- {
- ssexp[i].st = sts[i];
- ssexp[i].level = 1;
- needEXP[i].st = sts[i];
- needEXP[i].level = 1;
- }
- }
- //经验不断加加加加到厌倦~
- public void AddEXP(SoldierType st, int exp)
- {
- for(int i = 0; i < 3; i++)
- {
- if (ssexp[i].st == st)
- {
- //满级了就不加了
- if (ssexp[i].level == SoldierLevelRecord.maxLevels[i])
- {
- return;
- }
- ssexp[i].curEXP += exp;
- JudgeEXP(st);
- break;
- }
- }
- }
- //判定某种士兵的经验值是否足以升级
- private void JudgeEXP(SoldierType st)
- {
- for(int i = 0; i < 3; i++)
- {
- if (ssexp[i].st == st)
- {
- while (ssexp[i].curEXP >= needEXP[i].curEXP)
- {
- //升级
- ssexp[i].level += 1;
- levels[i].text = "LV" + ssexp[i].level.ToString();
- SingleSoldierLevel s = null;
- foreach (SoldierLevelRecord.SoldierEXPList sel in SoldierLevelRecord.soldierEXPlists)
- {
- if (sel.st == st)
- {
- foreach(SingleSoldierLevel ssl in sel.ssl)
- {
- if (ssl.Level == ssexp[i].level)
- {
- s = ssl;
- }
- }
- break;
- }
- }
- //读取升级后该士兵的增益
- slr.ReadSoldierBuff(st, s);
- //满了就先试一下
- if (ssexp[i].level == SoldierLevelRecord.maxLevels[i])
- {
- levels[i].text = "LV" + ssexp[i].level.ToString() + "(满)";
- levels[i].color = Color.red;
- return;
- }
- //设置下一级所需的经验值
- SetNextEXP(st);
- }
- break;
- }
- }
- }
- //设置下一级所需的经验值
- public void SetNextEXP(SoldierType st)
- {
- for(int i = 0; i < 3; i++)
- {
- if (needEXP[i].st == st)
- {
- needEXP[i].level += 1;
- foreach(SoldierLevelRecord.SoldierEXPList sel in SoldierLevelRecord.soldierEXPlists)
- {
- if (sel.st == st)
- {
- foreach (SingleSoldierLevel ssl in sel.ssl)
- {
- if (ssl.Level == needEXP[i].level)
- {
- needEXP[i].curEXP = ssl.EXP;
- break;
- }
- }
- break;
- }
- }
- break;
- }
- }
- }
- }
|