IEnumerator corTDL_Strike(TDL_Item item)
    {
        CheckStrike(0);
        yield return(new WaitUntil(BKTools.ISCWithArgu(item.type.ToString())));

        Main.Inst.redDancer(item.type.ToString());
        TDL.RemoveAt(0);
        yield return(null);
    }
    /// <summary>
    /// TDL技能/攻击 协线程.
    /// TDL相关参数需要技能信息、方向限制
    /// </summary>
    IEnumerator corTDL_Skill(TDL_Item item)
    {
        if (item.argu_Direction != eDirection.None)
        {
            attack_Direction = item.argu_Direction;
        }
        SkillStart(item.argu_skill_info);
        //		Debug.Log ("技能开始" + Time.time);
        yield return(new WaitUntil(BKTools.ISCWithArgu(item.type.ToString())));

        //		Debug.Log ("技能结束" + Time.time);
        Main.Inst.redDancer(item.type.ToString());
        TDL.RemoveAt(0);
        yield return(null);
    }
    /// <summary>
    /// TDL移动 协线程.
    /// TDL相关参数需要移动目的地ID
    /// </summary>
    /// <returns>The TD l move.</returns>
    /// <param name="item">Item.</param>
    IEnumerator corTDL_Move(TDL_Item item)
    {
        Main.Inst.now_turnphase.StartMoveChess(this);
        //		Debug.Log ("移动开始" + Time.time);
        yield return(new WaitForSeconds(GameRule.Moveing_Duration));

        Main.Inst.now_turnphase.moveChess(this, Main.Inst.chess_grids[item.argu_grid_id], item.argu_trigger_strike);
        //		Debug.Log ("移动" + Time.time);
        //万一有执行强袭就要等待
        yield return(new WaitUntil(BKTools.ISCWithArgu(item.type.ToString())));

        //		Debug.Log ("移动结束" + Time.time);
        Main.Inst.redDancer(item.type.ToString());
        TDL.RemoveAt(0);
        yield return(null);
    }
    IEnumerator SkillCoroutine(Skill_Info skill)
    {
        Main.Inst.addDancer(STR_Skill_Coroutine[0]);
        driving_skill_list.Add(this);
        //技能发动提示
        Ritual_Display(skill);
        yield return(new WaitForSeconds(1));

        //播放表现
        float delay = CG_Display(skill);

        yield return(new WaitUntil(BKTools.ISCWithArgu(STR_Skill_Coroutine)));

        //ArrayList scope_list = getSkillScope(skill);
        List <ChessContainer> scope_list = BKTools.GetSkillScope(skill, container, attack_Direction);

        //展示攻击范围
        for (int i = scope_list.Count - 1; i >= 0; i--)
        {
            ChessContainer cc  = (ChessContainer)scope_list[i];
            BK_AnimEvts    vfx = BKTools.addVFX_Dancer(Main.Inst.GetComponent <VFX_Dictionary>().Skill_Scope_Mark);
            vfx.transform.SetParent(cc.transform, false);
        }
        yield return(new WaitUntil(BKTools.ISCWithArgu(STR_Skill_Coroutine)));

        //筛选攻击目标
        //有效性筛选
        for (int i = scope_list.Count - 1; i >= 0; i--)
        {
            ChessContainer cc = (ChessContainer)scope_list[i];
            if (cc.my_chess == null || !BKTools.IsTargetFit(skill.my_TargetBelong, cc.my_chess.belong, belong))
            {
                scope_list.RemoveAt(i);
                continue;
            }
        }
        //目标数量有限时,选择合适的目标(大部分时候为随机)
        //info.target_number
        if (skill.target_number != 0)
        {
            List <ChessContainer> list_copy = new List <ChessContainer>();
            foreach (var item in scope_list)
            {
                list_copy.Add(item);
            }
            scope_list.Clear();
            for (int i = 0; i < skill.target_number && list_copy.Count > 0; i++)
            {
                int index = UnityEngine.Random.Range(0, list_copy.Count);
                scope_list.Add(list_copy[index]);
                list_copy.Remove(list_copy[index]);
            }
        }


        //展示攻击目标
        for (int i = scope_list.Count - 1; i >= 0; i--)
        {
            ChessContainer cc  = (ChessContainer)scope_list[i];
            BK_AnimEvts    vfx = BKTools.addVFX_Dancer(Main.Inst.GetComponent <VFX_Dictionary>().Skill_Target_Mark);
            vfx.transform.SetParent(cc.transform, false);
        }
        yield return(new WaitUntil(BKTools.ISCWithArgu(STR_Skill_Coroutine)));

        //计算效果
        Main.Inst.b_attacked = true;
        AnalyseSkillKouKa(skill, scope_list);
        //计算结果后等待
        yield return(new WaitForSeconds(Data.DELAY_AFTER_SKILL));

        driving_skill_list.Remove(this);
        attack_Direction = eDirection.All;
        Main.Inst.redDancer(STR_Skill_Coroutine[0]);
        yield return(null);
    }