Esempio n. 1
0
    public IEnumerator drawPhase()
    {
        List <PlayerCard> drawnCards = new List <PlayerCard>();

        try {
            drawnCards.Add(playerDeck.Pop());
            drawnCards.Add(playerDeck.Pop());
        }
        catch (InvalidOperationException) {
            gameFlowManager.gameOver(Vals.GAME_OVER_CARDS);
        }
        boardUI.setPlayerDeckCount(playerDeck.Count);
        yield return(StartCoroutine(cardUI.playerDraw(playerManager.getCurPlayer(), drawnCards[0], drawnCards[1])));

        foreach (PlayerCard drawn in drawnCards)
        {
            Debug.Log("Player draws " + drawn.getName());
            if (drawn.getId() == Vals.EPIDEMIC)
            {
                // Increase Step
                infectionRateTrackIndex++;
                boardUI.advanceInfectionRateTrack();
                // Infect Step
                InfectionCard epidemicDrawn = epidemicInfectionCards.Pop();
                Location      loc           = epidemicDrawn.getLocation();
                infectionDiscardPile.Add(epidemicDrawn);
                yield return(StartCoroutine(cardUI.infectionDraw(loc.getName(), loc.getColour())));

                if (diseaseStatus[(int)loc.getColour()] < Vals.DISEASE_ERADICATED)
                {
                    for (int j = 0; j < Vals.CUBES_PER_EPIDEMIC_INFECT; j++)
                    {
                        yield return(StartCoroutine(addCube(loc, loc.getColour())));
                    }
                }
                outbreakCitiesThisMove.Clear();
                //Intensify Step
                Utils.ShuffleAndPlaceOnTop(infectionDiscardPile, infectionDeck);
            }
            else
            {
                if (drawn.getColour() == Vals.Colour.EVENT)
                {
                    availableEventCards.Add(drawn);
                    Debug.Log("Event drawn");
                }
                playerManager.drawPhaseAdd(drawn);
            }
        }
        yield return(StartCoroutine(playerManager.checkHandLimit(playerManager.getCurPlayer())));
    }
Esempio n. 2
0
    public IEnumerator infectionPhase()
    {
        for (int i = 0; i < infectionRateTrack[infectionRateTrackIndex]; i++)
        {
            InfectionCard drawn = infectionDeck.Pop();
            Debug.Log("Infection: " + drawn.getName());
            Location loc = drawn.getLocation();
            infectionDiscardPile.Add(drawn);
            yield return(StartCoroutine(cardUI.infectionDraw(drawn.getName(), loc.getColour())));

            if (diseaseStatus[(int)loc.getColour()] < Vals.DISEASE_ERADICATED)
            {
                yield return(StartCoroutine(addCube(loc, loc.getColour())));
            }
            outbreakCitiesThisMove.Clear();
        }
    }
Esempio n. 3
0
    public IEnumerator infectCities()
    {
        for (int i = Vals.INITIAL_INFECTION_ROUNDS; i > 0; i--)
        {
            for (int j = 0; j < Vals.CARDS_PER_INITIAL_INFECTION_ROUND; j++)
            {
                InfectionCard drawn = infectionDeck.Pop();
                Location      loc   = drawn.getLocation();
                infectionDiscardPile.Add(drawn);
                yield return(StartCoroutine(cardUI.infectionDraw(drawn.getName(), loc.getColour())));

                Debug.Log("Initial infection in " + drawn.getName());
                for (int k = 0; k < i; k++)
                {
                    yield return(StartCoroutine(addCube(loc, loc.getColour())));
                }
            }
        }
    }