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 = "";
}
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.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)
{
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