public IEnumerator Cast(Skill skill, CardGroup cg, int pos) { switch (skill.skill) { case MetaSkill.普通攻击: Debug.Assert(cg == gm.our.field || cg == gm.enemy.field); if (cg.side.enemy.field.owner.childCount > pos) { RealCard enemyCard = cg.side.enemy.field.owner.GetChild(pos).GetComponent <RealCard>(); // 获取对面的卡牌 enemyCard.hp -= rc.atk; // 扣血 gm.logger.Log($"{rc.info.name}攻击了{enemyCard.info.name}"); yield return(rc.gp.playGIFAnimation()); } else { // 直接攻击 cg.side.enemy.healthBar.Hp -= rc.info.atk; gm.logger.Log($"{rc.info.name}直接攻击了{((cg == gm.our.field) ? "敌":"我")}方玩家"); } break; case MetaSkill.冲阵: if (cg.side.hand.owner.childCount == 0) { gm.logger.Log($"{rc.info.name}试图发动冲阵{skill.var},但是手牌是空的"); } else { //随机选择一个目标 RealCard tar = cg.side.hand.owner.GetChild(UnityEngine.Random.Range(0, cg.side.hand.owner.childCount)).GetComponent <RealCard>(); gm.logger.Log($"{rc.info.name}为{tar.info.name}发动了冲阵{skill.var}"); if (tar.tm.waiting.CheckTurn(skill.var)) //如果因此进场的话 { yield return(new WaitForSeconds(GameManager.gameSpeed)); tar.HandToField(); gm.logger.Log($"{tar.info.name}进场了"); cg.sendTo(tar.transform, cg.side.field); } } break; } yield return(new WaitForSeconds(GameManager.gameSpeed)); }
private IEnumerator CheckDeath(CardGroup field) { Debug.Assert(field == our.field || field == enemy.field); List <Transform> deadList = new List <Transform>(); for (int i = 0; i < field.owner.transform.childCount; i++) { if (field.owner.transform.GetChild(i).GetComponent <RealCard>().hp <= 0) { deadList.Add(field.owner.transform.GetChild(i)); } } foreach (Transform ts in deadList) { field.sendTo(ts, field.side.grave); ts.GetComponent <RealCard>().skill.FindAndCastSkill(SkillManager.Timing.送往墓地后, field.side.grave); yield return(new WaitForSeconds(gameSpeed)); } }