using UnityEngine;
using System.Collections;
using System.Collections.Generic;

namespace Games.ImpactModle
{
    public enum BUFFICON
    {
        MAX_BUFFICONUM = 5, //主角头像显示的最大buff 图标位  加一个宠物Buff  但是最多只能显示4个buff
    }

    public enum BUFFTYPE
    {
        DEBUFF =0, //减益BUFF
        BUFF =1,//增益BUFF
    }

    //玩家身上的一些buff产生的效果
    public enum DISABLESTATE
    {
        None = -1,
        Disable_UseSkill = 0, //不能使用技能
        Disable_Move,    //不能移动
        Disable_Select,  //不能选择目标
        GodState,        //无敌状态
        StealState,      //隐身状态
        TauntState,      //嘲讽状态
        BlackScreen,     //黑屏状态
        Chaos,           //混乱
        Disable_BeSelect, // 不可被选中状态
    }

    public class ImpactInfo
    {
        public void CleanUp()
        {
            m_nHandleId = 0;
            m_nIsForever = false;//Buff 是否永久
            m_nRemainTime = 0;//Buff 剩余时间(单位s)
            m_nAddnum = 0;  //叠加个数
        }

        private uint m_nHandleId;//Buff Id
        public uint HandleId
        {
            get { return m_nHandleId; }
            set { m_nHandleId = value; }
        }
        private bool m_nIsForever;//Buff 是否永久
        public bool IsForever
        {
            get { return m_nIsForever; }
            set { m_nIsForever = value; }
        }
        private float m_nRemainTime;//Buff 剩余时间(单位s)
        public float RemainTime
        {
            get { return m_nRemainTime; }
            set { m_nRemainTime = value; }
        }
        private int m_nAddnum;
        public int AddNum
        {
            get { return m_nAddnum; }
            set { m_nAddnum = value; }
        }
    }

    public  class ClientImpactInfo
    {
        public string m_BuffDescribe = "";

        public void CleanUp()
        {
            m_nImpactId =-1;//Buff Id
            m_BuffDescribe = "";
        }

        List<ImpactInfo> m_ImpactInfos = new List<ImpactInfo>();

        public void RemoveBuff(uint handleId)
        {
            for (int i = 0; i < m_ImpactInfos.Count; i++)
            {
                if (m_ImpactInfos[i].HandleId == handleId)
                {
                    m_ImpactInfos.RemoveAt(i);
                    break;
                }
            }
        }

        public void AddBuff(ImpactInfo impact)
        {
            for(int i=0;i< m_ImpactInfos.Count;i++)
            {
                if(m_ImpactInfos[i].HandleId == impact.HandleId)
                {
                    m_ImpactInfos.RemoveAt(i);
                    break;
                }
            }
            m_ImpactInfos.Add(impact);
        }

        public bool IsVaild()
        {
            return (m_nImpactId != -1 && m_ImpactInfos.Count > 0);
        }
        private int m_nImpactId;//Buff Id
        public int ImpactId
        {
            get { return m_nImpactId; }
            set { m_nImpactId = value; }
        }

        public bool IsForever
        {
            get
            {
                for (int i = 0; i < m_ImpactInfos.Count; i++)
                {
                    if (m_ImpactInfos[i].IsForever == true)
                        return true;
                }
                return false;
            }
        }

        public int AddNum
        {
            get
            {
                int num = 0;
                for (int i = 0; i < m_ImpactInfos.Count; i++)
                {
                    num += m_ImpactInfos[i].AddNum;
                }
                return num;
            }
        }

        public float RemainTime
        {
            get
            {
                float remain = 0;
                for (int i = 0; i < m_ImpactInfos.Count; i++)
                {
                    if (remain < m_ImpactInfos[i].RemainTime)
                        remain = m_ImpactInfos[i].RemainTime;
                }
                return remain;
            }
        }
    }
}