示例#1
0
    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());
    }