using System.Collections.Generic;
using Common.Utility.CombatEvent;
using Core.Utility;
using Excel2Json;
using Fort23.Core;
using Fort23.UTool;
using GameLogic.Combat.CombatTool;
using GameLogic.Hero;
namespace GameLogic.Combat.Hero
{
    /// 
    /// 法宝的管理
    /// 
    public class MagicWeaponControl
    {
        public bool isAutoUse;
        private BetterList _allMagicWeapon = new BetterList();
        /// 
        /// 全局CD
        /// 
        public float globalMagicWeaponCd;
        public CombatMagicWeaponEntity[] AllMagicWeapon
        {
            get { return _allMagicWeapon.ToArray(true); }
        }
        public int MagicWeaponCount
        {
            get { return _allMagicWeapon.Count; }
        }
        // private CombatMagicWeaponEntity _currUserMagicWeapon;
        public CombatHeroEntity combatHeroEntity;
        public void AddMagicWeapon(CombatMagicWeaponEntity combatMagicWeaponEntity)
        {
            if (combatHeroEntity.isPlayer)
            {
                AddMagicWeaponHeroEntityEventData addMagicWeaponHeroEntityEventData =
                    AddMagicWeaponHeroEntityEventData.Create();
                addMagicWeaponHeroEntityEventData.CombatMagicWeaponEntity = combatMagicWeaponEntity;
                CombatEventManager.Instance.Dispatch(CombatEventType.AddMagicWeaponHeroEntity,
                    addMagicWeaponHeroEntityEventData);
            }
            _allMagicWeapon.Add(combatMagicWeaponEntity);
        }
        public void RemoveMagicWeapon(CombatMagicWeaponEntity combatMagicWeaponEntity)
        {
            _allMagicWeapon.Remove(combatMagicWeaponEntity);
        }
        public async CTask InitMagicWeapon(CombatHeroEntity combatHeroEntity, bool isPlayer)
        {
            isAutoUse = !isPlayer;
            this.combatHeroEntity = combatHeroEntity;
            CTaskAwaitBuffer cTaskAwaitBuffer = new CTaskAwaitBuffer();
            List MagicWeaponID = combatHeroEntity.CurrCombatHeroInfo.MagicWeaponID;
            for (int i = 0; i < MagicWeaponID.Count; i++)
            {
                if (MagicWeaponID[i] == null)
                {
                    continue;
                }
                CombatMagicWeaponEntity heroEntity = new CombatMagicWeaponEntity();
                heroEntity.IsEnemy = combatHeroEntity.IsEnemy;
                heroEntity.number = i;
                AddMagicWeapon(heroEntity);
                cTaskAwaitBuffer.AddTask(heroEntity.Init(this, MagicWeaponID[i],
                    delegate(CombatMagicWeaponEntity entity)
                    {
                       
                        float bl = (entity.number + 1) * 0.25f;
                        entity.cd = entity.cd * bl;
                    }));
            }
            await cTaskAwaitBuffer.WaitAll();
            cTaskAwaitBuffer.Dispose();
        }
        public void UseMagicWeapon(CombatMagicWeaponEntity combatMagicWeaponEntity)
        {
            combatMagicWeaponEntity.isMagicWeaponTreasureBook = false;
            globalMagicWeaponCd = 2;
            UseMagicWeaponEventData useMagicWeaponEventData = UseMagicWeaponEventData.Create();
            useMagicWeaponEventData.combatHeroEntity = combatHeroEntity;
            useMagicWeaponEventData.combatMagicWeaponEntity = combatMagicWeaponEntity;
            CombatEventManager.Instance.Dispatch(CombatEventType.UseMagicWeapon, useMagicWeaponEventData);
            // CombatEventManager.Instance.AddEventListener(CombatEventType.UseMagicWeapon,
            CombatController.currActiveCombat.MagicWeaponCombatSence.AddMagicWeaponToSence(combatMagicWeaponEntity);
        }
        public void ReduceMagicCd(float cdBl)
        {
            for (int i = 0; i < _allMagicWeapon.Count; i++)
            {
                CombatMagicWeaponEntity combatMagicWeaponEntity = _allMagicWeapon[i];
                float v = combatMagicWeaponEntity.MaxCd * cdBl * 0.01f;
                combatMagicWeaponEntity.cd -= v;
            }
        }
        public void Update(float t)
        {
            if (globalMagicWeaponCd > 0)
            {
                globalMagicWeaponCd -= t;
            }
            for (int i = 0; i < _allMagicWeapon.Count; i++)
            {
                _allMagicWeapon[i].Update(t);
            }
        }
    }
}