using UnityEngine; using UnityEngine.UI; using System; using System.Xml; using System.Text; using System.Collections; using System.Collections.Generic; public class BigSkill : Skill { #region 变量 #region 配置 public int SkillIndex; #endregion public Text BarLab; public Image BarBk0; public Image BarBk1; public Button BarBtn; public SkillStatus BarStatus { get { return _BarStatus; } set { _BarStatus = value; if (_BarStatus == SkillStatus.Cool) { BarBk0.SetActive(true); BarBk1.SetActive(false); ManaData.CoolList.Add(this); } else if (_BarStatus == SkillStatus.Buy) { if (SkillTab != SkillTab.Null && ItemStatus != SkillStatus.Upgrade) { BarBk0.SetActive(false); BarBk1.SetActive(true); BarBtn.interactable = false; BarLab.text = ""; BarBk1.material = ManaReso.Load("GrayMat", Folder.Shader); } else { BarBk0.SetActive(false); BarBk1.SetActive(true); BarBtn.interactable = true; BarLab.text = ""; } } else if (_BarStatus == SkillStatus.Use) { } else { throw new Exception(); } } } public new SkillStatus ItemStatus { get { return _ItemStatus; } set { _ItemStatus = value; if (SkillTab == SkillTab.Null) { return; } if (_ItemStatus == SkillStatus.Lock) { ManaText.Add(ItemBtnLab, new LanStr("UI", "Fe_BtnLab0"), "\n", new LanStr("UI", "Fe_BtnLab4"), UnlockLv); } else if (_ItemStatus == SkillStatus.UnLock) { ManaText.Add(ItemBtnLab, new LanStr("UI", "Fe_BtnLab1")); } else if (_ItemStatus == SkillStatus.Upgrade) { ManaText.Add(ItemTit, new LanStr("SkillName", _Name), " ", (Level + 1).ToString()); ManaText.Add(ItemBtnLab, new LanStr("UI", "Fe_BtnLab2")); } else { throw new Exception(_ItemStatus.ToString()); } } } public SkillStatus _BarStatus; #endregion public BigSkill(XmlAttributeCollection attribute) : base(attribute) { SkillIndex = IntParse(attribute[4].Value); SkillType = SkillType.BigSkill; } public override void Annul() { CoolTimer = CD * (1 + CdBuff); BarLab.color = Color.white; BarStatus = SkillStatus.Cool; AnnulConti(); ManaDebug.Log(string.Format("技能结束 {0}", Name)); } public override void AnnulConti() { ManaData.SkillPlus -= NewPlus; ManaData.SkillPerson -= NewPerson; ManaData.SkillPersonBuff -= NewPersonBuff; ManaData.SkillCoinPerson -= NewCoinPerson; if (Math.Abs(NewSkillCD) > 0.0005f) { for (int i = 0; i < ManaData.SkillList.Count; i++) { ManaData.SkillList[i].ReceiveCool(-NewSkillCD, true, false); } } if (Math.Abs(NewSkillCdBuff) > 0.0005f) { for (int i = 0; i < ManaData.SkillList.Count; i++) { ManaData.SkillList[i].ReceiveCool(-NewSkillCdBuff, true, true); } } } public override bool DoUse() { UseTimer -= Time.deltaTime; BarLab.text = UseTimer.ToString("0.0"); if (UseTimer <= 0) { Annul(); ManaData.UseList.Remove(this); return true; } else { return false; } } public override bool DoCool() { CoolTimer -= Time.deltaTime; TimeSpan timeSpan = new TimeSpan(0, 0, 0, (int)CoolTimer); BarLab.text = string.Format("{0} : {1}", timeSpan.Minutes, timeSpan.Seconds); BarBk0.fillAmount = CoolTimer / CD; if (CoolTimer <= 0) { BarStatus = SkillStatus.Buy; ManaDebug.Log(string.Format("技能{0}已冷却", Name)); ManaData.CoolList.Remove(this); return true; } else { return false; } } public override void RegistValue(float elapse, List> ffList, XmlAttributeCollection attribute) { Level = int.Parse(attribute[4].Value); UseTimer = float.Parse(attribute[6].Value); CoolTimer = float.Parse(attribute[5].Value); _ItemStatus = (SkillStatus)Enum.Parse(typeof(SkillStatus), attribute[2].Value); _BarStatus = (SkillStatus)Enum.Parse(typeof(SkillStatus), attribute[3].Value); BarBtn.onClick.AddListener(Buy); BarBk1.sprite = ManaReso.Load(Icon + "副", Folder.Skill); NewPlus = Plus; NewPerson = Person; NewSkillCD = SkillCD; NewDuration = Duration; NewCoinOnce = CoinOnce; NewSkillCdBuff = SkillCdBuff; NewPersonBuff = PersonBuff; NewCoinPerson = CoinPerson; NewUpgradeAmt = UpgradeAmt; NewCoinOnceBuff = CoinOnceBuff; if (SkillTab == SkillTab.Null) { BarBk1.material = null; } else { ManaText.Add(ItemTit, new LanStr("SkillName", _Name)); ItemLab.text = Description(0); ItemBtn.onClick.AddListener(OnClick); for (int i = 0; i < Level; i++) { NewUpgradeAmt = Auxiliary.FmlParse(UpgradeFml, "a", NewUpgradeAmt.ToString()); } UpgradeValue(ref NewPlus, Plus, UpgradePlus, Level); UpgradeValue(ref NewSkillCdBuff, UpgradeCD, Level); UpgradeValue(ref NewPersonBuff, PersonBuff, UpgradePerson, Level); UpgradeValue(ref NewCoinOnceBuff, UpgradeCoinOnce, Level); UpgradeValue(ref NewPerson, Person, UpgradePerson, Level); UpgradeValue(ref NewSkillCD, SkillCD, UpgradeCD, Level); UpgradeValue(ref NewDuration, Duration, UpgradeDuration, Level); UpgradeValue(ref NewCoinOnce, CoinOnce, UpgradeCoinOnce, Level); UpgradeValue(ref NewCoinPerson, CoinPerson, UpgradePlus, Level); if (_ItemStatus == SkillStatus.Upgrade) { BarBk1.material = null; ShowSkillBar(); ManaDebug.Log(string.Format("技能{0}已解锁 等级 : {1}", Name, Level)); } if (_BarStatus == SkillStatus.Use) { UseConti(); if (UseTimer < elapse) { if (ffList.Count > 0) { if (UseTimer < ManaData.CircleTimer) { ffList[0].UniqueAdd(this); } else { int ffCircle = 1 + Mathf.FloorToInt(((UseTimer - ManaData.CircleTimer) / ManaData.CircleTime)); ffList[ffCircle].UniqueAdd(this); } } } else { UseTimer -= elapse; ManaData.UseList.Add(this); BarBk1.SetActive(true); BarLab.color = Color.blue; } } else if (_BarStatus == SkillStatus.Cool) { CoolTimer -= elapse; } } ItemStatus = ItemStatus; BarStatus = BarStatus; } public override void ReceiveCool(float amt, bool current, bool buff) { if (!ReduceCD) { return; } if (current) { if (BarStatus != SkillStatus.Cool) { return; } if (buff) { CoolTimer -= CD * amt; } else { CoolTimer -= amt; } } else { if (buff) { CdBuff -= amt; } else { CD -= amt; } } } public override void RegistReference() { base.RegistReference(); BarLab = ManaReso.Get(string.Format("F_SkillLab{0}", SkillIndex - 1)); BarBk0 = ManaReso.Get(string.Format("F_SkillBk{0}0", SkillIndex - 1)); BarBk1 = ManaReso.Get(string.Format("F_SkillBk{0}1", SkillIndex - 1)); BarBtn = BarBk1.GetComponent