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 SkillStatus BarStatus { get { return BarStatus_; } set { BarStatus_ = value; if (BarStatus_ == SkillStatus.Cool) { BarBk0.SetActive(true); BarBk1.SetActive(false); } else if (BarStatus_ == SkillStatus.UnLock) { BarBk0.SetActive(false); BarBk1.SetActive(true); } else if (BarStatus_ == SkillStatus.Buy) { BarBk0.SetActive(false); BarBk1.SetActive(true); BarBtn.interactable = true; } } } 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) { 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), Auxiliary.ShrinkNumberStr(NewUpgradeAmt)); } } } public SkillStatus BarStatus_; #endregion public BigSkill(XmlAttributeCollection attribute) : base(attribute) { BarIndex = Auxiliary.IntParse(attribute[4].Value,0); SkillType = SkillType.BigSkill; } public override void AnnulA() { CoolTimer = CD * CdBuff - 1; BarStatus = SkillStatus.Cool; ManaCenter.CoolList.Add(this); AnnulB(); } public override void AnnulB() { ManaCenter.SkillPlus -= NewPlus; ManaCenter.SkillPerson -= NewPerson; ManaCenter.SkillPersonBuff -= NewPersonBuff; ManaCenter.SkillCoinPerson -= NewCoinPerson; } public override bool DoUse() { UseTimer -= Time.deltaTime; TimeSpan timeSpan = new TimeSpan(0, 0, 0, Mathf.CeilToInt(UseTimer)); if (timeSpan.Hours >= 1) { BarLab.text = string.Format("{0} : {1}", timeSpan.Hours.ToString("00"), timeSpan.Minutes.ToString("00")); } else { BarLab.text = string.Format("{0} : {1}", timeSpan.Minutes.ToString("00"), timeSpan.Seconds.ToString("00")); } if (UseTimer <= 0) { AnnulA(); return true; } else { return false; } } public override bool DoCool() { CoolTimer -= Time.deltaTime; TimeSpan timeSpan = new TimeSpan(0, 0, 0, Mathf.CeilToInt(CoolTimer)); if (timeSpan.Hours >= 1) { BarLab.text = string.Format("{0} : {1}", timeSpan.Hours.ToString("00"), timeSpan.Minutes.ToString("00")); } else { BarLab.text = string.Format("{0} : {1}", timeSpan.Minutes.ToString("00"), timeSpan.Seconds.ToString("00")); } BarBk0.fillAmount = CoolTimer / CD; if (CoolTimer <= 0) { BarLab.text = ""; BarStatus = SkillStatus.Buy; return true; } else { return false; } } public override void Reactive() { if (BarStatus == SkillStatus.Use) { AnnulB(); ManaCenter.UseList.Remove(this); } else if (BarStatus == SkillStatus.Cool) { ManaCenter.CoolList.Remove(this); } } 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); BarBk1.material = Shortcut.GrayMat; BarStatus_ = (SkillStatus)Enum.Parse(typeof(SkillStatus), attribute[3].Value); ItemStatus_ = (SkillStatus)Enum.Parse(typeof(SkillStatus), attribute[2].Value); NewPlus = Plus; NewPerson = Person; NewSkillCD = SkillCD; NewDuration = Duration; NewCoinOnce = CoinOnce; NewSkillCdBuff = SkillCdBuff; NewPersonBuff = PersonBuff; NewCoinPerson = CoinPerson; NewUpgradeAmt = UpgradeAmt; NewCoinOnceBuff = CoinOnceBuff; BarBk1.sprite = Icon; BarBtn.onClick.RemoveAllListeners(); BarBtn.onClick.AddListener(Buy); if (SkillTab != SkillTab.Null) { ItemLab.text = GetDescription(0); ItemBtn.onClick.RemoveAllListeners(); ItemBtn.onClick.AddListener(OnClick); for (int i = 0; i < Level - 1; i++) { NewUpgradeAmt = Auxiliary.FmlParse(UpgradeFml, "a", NewUpgradeAmt.ToString()); } if (BarStatus_ == SkillStatus.Upgrade) { UpgradeValue(ref NewPlus, UpgradePlus, Level - 1); UpgradeValue(ref NewPersonBuff, UpgradePerson, Level - 1); UpgradeValue(ref NewCoinOnceBuff, UpgradeCoinOnce, Level - 1); UpgradeSkillCdBuff(ref NewSkillCdBuff, UpgradeCD, Level - 1); UpgradeValue(ref NewPerson, Person, UpgradePerson, Level - 1); UpgradeValue(ref NewSkillCD, SkillCD, UpgradeCD, Level - 1); UpgradeValue(ref NewDuration, Duration, UpgradeDuration, Level - 1); UpgradeValue(ref NewCoinOnce, CoinOnce, UpgradeCoinOnce, Level - 1); UpgradeValue(ref NewCoinPerson, CoinPerson, UpgradePlus, Level - 1); } } if (BarStatus_ == SkillStatus.Use) { UseA(); if (UseTimer < elapse) { if (useList.Count > 0) { if (UseTimer < ManaCenter.CircleTimer) { useList[0].UniqueAdd(this); } else { int circle = 1 + Mathf.FloorToInt((UseTimer - ManaCenter.CircleTimer) / ManaCenter.CircleTime); useList[circle].UniqueAdd(this); } } } else { UseTimer -= elapse; BarBk1.SetActive(true); } } else if (BarStatus_ == SkillStatus.Cool) { CoolTimer -= elapse; ManaCenter.CoolList.Add(this); } if (BarStatus_ != SkillStatus.UnLock) { BarBk1.material = null; } if (ItemStatus_ == SkillStatus.UnLock) { ManaUI.UpdateHint(); } BarStatus = BarStatus; ItemStatus = ItemStatus; } public override void ReceiveCool(float amt, bool current, bool buff) { if (!CoolLock) { return; } if (current) { if (BarStatus != SkillStatus.Cool) { return; } if (buff) { CoolTimer -= CD * amt; } else { CoolTimer -= amt; } } else { if (buff) { CdBuff = 1 - amt; } else { CD -= amt; } } } public override void UpdateStatus() { if (!ManaCenter.Complete) { return; } if (ManaCenter.Level >= UnlockLv) { if (SkillTab == SkillTab.Null) { if (BarStatus == SkillStatus.UnLock) { Unlock(); } } else { if (ItemStatus == SkillStatus.Lock) { if (UnlockCur == Current.Free) { Unlock(); } else { ItemStatus = SkillStatus.UnLock; ManaUI.UpdateHint(); } } } } } 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