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 变量 public int BarIndex; public Text BarLab; public Image BarBk0; public Image BarBk1; public Button BarBtn; public Sprite BarIcon { get { return ManaReso.Load(Icon_ + "副", Folder.UI); } } public SkillStatus BarStatus { get { return BarStatus_; } set { BarStatus_ = value; if (BarStatus_ == SkillStatus.Cool) { BarBk0.SetActive(true); BarBk1.SetActive(false); } else if (BarStatus_ == SkillStatus.Buy) { if (SkillTab != SkillTab.Null && ItemStatus != SkillStatus.Upgrade) { BarBk0.SetActive(false); BarBk1.SetActive(true); BarBtn.interactable = false; BarLab.text = ""; } else { BarBk0.SetActive(false); BarBk1.SetActive(true); BarBtn.interactable = true; BarLab.text = ""; } } } } public override SkillStatus ItemStatus { get { return ItemStatus_; } set { ItemStatus_ = value; if (SkillTab == SkillTab.Null) { return; } if (ItemStatus_ == SkillStatus.Lock) { ManaLan.Add(ItemBtnLab, new LanStr("UI", "Fe_BtnLab0"), "\n", new LanStr("UI", "Fe_BtnLab4"), UnlockLv); } else if (ItemStatus_ == SkillStatus.UnLock) { if (UnlockCur == Current.Free) { ManaLan.Add(ItemBtnLab, new LanStr("UI", "Fe_BtnLab1")); } else { ManaLan.Add(ItemBtnLab, new LanStr("UI", "Fe_BtnLab1"), "\n", ImageParse(UnlockCur), UnlockAmt.ToString("0")); } } else if (ItemStatus_ == SkillStatus.Upgrade) { ManaLan.Add(ItemBtnLab, new LanStr("UI", "Fe_BtnLab2"), "\n", ImageParse(UpgradeCur), NewUpgradeAmt.ToString("0")); } } } public SkillStatus BarStatus_; #endregion public BigSkill(XmlAttributeCollection attribute) : base(attribute) { BarIndex = Auxiliary.IntParse(attribute[4].Value,0); SkillType = SkillType.BigSkill; } public override void Annul() { CoolTimer = CD * (1 + CdBuff); BarLab.color = Color.white; BarStatus = SkillStatus.Cool; ManaData.CoolList.Add(this); AnnulA(); ManaDebug.Log(string.Format("技能结束 {0}", Name)); } public override void AnnulA() { 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(); 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)); return true; } else { return false; } } public override void RegistValue(float elapse, List> useList, 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 = BarIcon; 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 { RegistName(ItemTit); 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) { ShowSkillBar(); ManaDebug.Log(string.Format("技能{0}已解锁 等级 : {1}", Name, Level)); } if (BarStatus == SkillStatus.Use) { UseA(); if (UseTimer < elapse) { if (useList.Count > 0) { if (UseTimer < ManaData.CircleTimer) { useList[0].UniqueAdd(this); } else { int ffCircle = 1 + Mathf.FloorToInt(((UseTimer - ManaData.CircleTimer) / ManaData.CircleTime)); useList[ffCircle].UniqueAdd(this); } } } else { UseTimer -= elapse; 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}", BarIndex)); BarBk0 = ManaReso.Get(string.Format("F_SkillBk{0}0", BarIndex)); BarBk1 = ManaReso.Get(string.Format("F_SkillBk{0}1", BarIndex)); BarBtn = BarBk1.GetComponent