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); }