IEnumerator FightCor() { CardBehaviour previousCard1 = null; CardBehaviour previousCard2 = null; for (int i = 0; i < 3; i++) { CardBehaviour card1 = player1.cardOrder[i]; CardBehaviour card2 = player2.cardOrder[i]; bool breaksShield1 = false; bool breaksShield2 = false; bool leaps1 = false; bool leaps2 = false; card1.Flip(); card2.Flip(); yield return(new WaitForSeconds(1)); if (card1.cardNature == Cards.Attack) { //Check attack's special properties if (previousCard1 != null && previousCard1.cardNature == Cards.Backstep) { breaksShield1 = true; } if (previousCard1 != null && previousCard1.cardNature == Cards.Shield) { leaps1 = true; } //Compare to other card if (card2.cardNature == Cards.Attack) { player1.agent.Resolve(Cases.BlockedByAttack); player2.agent.Resolve(Cases.BlockedByAttack); } if (card2.cardNature == Cards.Backstep) { if (leaps1) { player1.agent.Resolve(Cases.Attack); player2.agent.Resolve(Cases.Hurt); health2--; } else { player1.agent.Resolve(Cases.Attack); player2.agent.Resolve(Cases.BackstepDodge); } } if (card2.cardNature == Cards.Shield) { if (breaksShield1) { player1.agent.Resolve(Cases.Attack); player2.agent.Resolve(Cases.Hurt); health2--; } else { player1.agent.Resolve(Cases.BlockedByShield); player2.agent.Resolve(Cases.Block); } } } if (card1.cardNature == Cards.Backstep) { //Compare to other card if (card2.cardNature == Cards.Attack) { if (previousCard2 != null && previousCard2.cardNature == Cards.Shield) { leaps2 = true; } if (leaps2) { player1.agent.Resolve(Cases.Hurt); player2.agent.Resolve(Cases.Attack); health1--; } else { player1.agent.Resolve(Cases.BackstepDodge); player2.agent.Resolve(Cases.Attack); } } if (card2.cardNature == Cards.Backstep) { player1.agent.Resolve(Cases.BackstepPose); player2.agent.Resolve(Cases.BackstepPose); } if (card2.cardNature == Cards.Shield) { player1.agent.Resolve(Cases.BackstepPose); player2.agent.Resolve(Cases.Block); } } if (card1.cardNature == Cards.Shield) { //Compare to other card if (card2.cardNature == Cards.Attack) { if (previousCard2 != null && previousCard2.cardNature == Cards.Backstep) { breaksShield2 = true; } if (breaksShield2) { player1.agent.Resolve(Cases.Hurt); player2.agent.Resolve(Cases.Attack); health1--; } else { player1.agent.Resolve(Cases.Block); player2.agent.Resolve(Cases.BlockedByShield); } } if (card2.cardNature == Cards.Backstep) { player1.agent.Resolve(Cases.Block); player2.agent.Resolve(Cases.BackstepPose); } if (card2.cardNature == Cards.Shield) { player1.agent.Resolve(Cases.Block); player2.agent.Resolve(Cases.Block); } } //Save cards for next phase previousCard1 = card1; previousCard2 = card2; yield return(new WaitForSeconds(2)); } foreach (CardBehaviour card in player1.cardOrder) { card.Flip(); yield return(new WaitForSeconds(flipDelay)); } foreach (CardBehaviour card in player2.cardOrder) { card.Flip(); yield return(new WaitForSeconds(flipDelay)); } //Agents transition float time = 0f; while (time < agentTransTime) { agent1.localPosition = Vector3.Lerp(new Vector3(agentOriginPos1.x, fightPosY, agentOriginPos1.z), new Vector3(agentOriginPos1.x, outOfScreenY, agentOriginPos1.z), agentTransCurve.Evaluate(time / agentTransTime)); agent2.localPosition = Vector3.Lerp(new Vector3(agentOriginPos2.x, fightPosY, agentOriginPos2.z), new Vector3(agentOriginPos2.x, outOfScreenY, agentOriginPos2.z), agentTransCurve.Evaluate(time / agentTransTime)); time += Time.deltaTime; yield return(null); } agent1.localPosition = new Vector3(agentOriginPos1.x, outOfScreenY, agentOriginPos1.z); agent2.localPosition = new Vector3(agentOriginPos2.x, outOfScreenY, agentOriginPos2.z); player1.agent.anim.SetTrigger("WaitMode"); player2.agent.anim.SetTrigger("WaitMode"); yield return(new WaitForSeconds(.5f)); time = 0f; while (time < agentTransTime) { agent1.localPosition = Vector3.Lerp(new Vector3(agentOriginPos1.x, outOfScreenY, agentOriginPos1.z), agentOriginPos1, agentTransCurve.Evaluate(time / agentTransTime)); agent2.localPosition = Vector3.Lerp(new Vector3(agentOriginPos2.x, outOfScreenY, agentOriginPos2.z), agentOriginPos2, agentTransCurve.Evaluate(time / agentTransTime)); time += Time.deltaTime; yield return(null); } agent1.localPosition = agentOriginPos1; agent2.localPosition = agentOriginPos2; //Wait round = Rounds.Wait; roundCorWait = StartCoroutine(WaitCor()); }