Example #1
0
    IEnumerator addVictoryPoints(WinningPattern pattern)
    {
        Ball ball = modelGrid.GetCellFromModel((int)pattern.cells[0].y, (int)pattern.cells[0].x).ball;

        ball.Animator.SetTrigger(animatorHashScoreCounting);
        ball.FixSortingLayer(false);
        yield return(new WaitForSeconds(1.0f));

        ball = modelGrid.GetCellFromModel((int)pattern.cells[1].y, (int)pattern.cells[1].x).ball;
        ball.Animator.SetTrigger(animatorHashScoreCounting);
        ball.FixSortingLayer(false);
        yield return(new WaitForSeconds(1.0f));

        ball = modelGrid.GetCellFromModel((int)pattern.cells[2].y, (int)pattern.cells[2].x).ball;
        ball.Animator.SetTrigger(animatorHashScoreCounting);
        ball.FixSortingLayer(false);
        yield return(new WaitForSeconds(1.0f));

        ball = modelGrid.GetCellFromModel((int)pattern.cells[3].y, (int)pattern.cells[3].x).ball;
        ball.Animator.SetTrigger(animatorHashScoreCounting);
        ball.FixSortingLayer(false);
        yield return(new WaitForSeconds(1.0f));

        ball = modelGrid.GetCellFromModel((int)pattern.cells[4].y, (int)pattern.cells[4].x).ball;
        ball.Animator.SetTrigger(animatorHashScoreCounting);
        ball.FixSortingLayer(false);
        yield return(new WaitForSeconds(3.0f));

        playVictoryAnimationEnd(pattern);
    }
Example #2
0
    IEnumerator playVictoryAnimationPhase1(WinningPattern pattern)
    {
        UIManager.Instance.DisableBackToMainMenuButton(false);

        Ball ball = modelGrid.GetCellFromModel((int)pattern.cells[0].y, (int)pattern.cells[0].x).ball;

        ball.FixSortingLayer(true);
        ball.Animator.SetTrigger(animatorHashWinPhase1);
        yield return(new WaitForSeconds(timeBetweenBallsPhase1AnimBegin));

        ball = modelGrid.GetCellFromModel((int)pattern.cells[1].y, (int)pattern.cells[1].x).ball;
        ball.FixSortingLayer(true);
        ball.Animator.SetTrigger(animatorHashWinPhase1);
        yield return(new WaitForSeconds(timeBetweenBallsPhase1AnimBegin));

        ball = modelGrid.GetCellFromModel((int)pattern.cells[2].y, (int)pattern.cells[2].x).ball;
        ball.FixSortingLayer(true);
        ball.Animator.SetTrigger(animatorHashWinPhase1);
        yield return(new WaitForSeconds(timeBetweenBallsPhase1AnimBegin));

        ball = modelGrid.GetCellFromModel((int)pattern.cells[3].y, (int)pattern.cells[3].x).ball;
        ball.FixSortingLayer(true);
        ball.Animator.SetTrigger(animatorHashWinPhase1);
        yield return(new WaitForSeconds(timeBetweenBallsPhase1AnimBegin));

        ball = modelGrid.GetCellFromModel((int)pattern.cells[4].y, (int)pattern.cells[4].x).ball;
        ball.FixSortingLayer(true);
        ball.Animator.SetTrigger(animatorHashWinPhase1);
        yield return(new WaitForSeconds(timeBeforePhase2AnimBegin));

        StartCoroutine(playVictoryAnimationPhase2(pattern));
    }
Example #3
0
    public bool GetWinningPatterns(out List <WinningPattern> winningPatternsToExclude)
    {
        winningPatternsToExclude = new List <WinningPattern>();

        bool           isWinning      = false;
        WinningPattern winningPattern = new WinningPattern();

        while (FindWinningPattern(patternData.horizontalLinePatterns, out winningPattern, winningPatternsToExclude))
        {
            WinningPattern winny = new WinningPattern(winningPattern);
            winny.type = PatternType.HorizontalLine;
            winningPatternsToExclude.Add(winny);
            isWinning = true;
        }

        while (FindWinningPattern(patternData.verticalLinePatterns, out winningPattern, winningPatternsToExclude))
        {
            WinningPattern winny = new WinningPattern(winningPattern);
            winny.type = PatternType.VerticalLine;
            winningPatternsToExclude.Add(winny);
            isWinning = true;
        }

        while (FindWinningPattern(patternData.diagonalLinePatterns, out winningPattern, winningPatternsToExclude))
        {
            WinningPattern winny = new WinningPattern(winningPattern);
            winny.type = PatternType.AscDiagonalLine;
            winningPatternsToExclude.Add(winny);
            isWinning = true;
        }

        while (FindWinningPattern(patternData.otherDiagonalLinePatterns, out winningPattern, winningPatternsToExclude))
        {
            WinningPattern winny = new WinningPattern(winningPattern);
            winny.type = PatternType.DescDiagonalLine;
            winningPatternsToExclude.Add(winny);
            isWinning = true;
        }

        while (FindWinningPattern(patternData.horizontalCrossPatterns, out winningPattern, winningPatternsToExclude))
        {
            WinningPattern winny = new WinningPattern(winningPattern);
            winny.type = PatternType.HorizontalCross;
            winningPatternsToExclude.Add(winny);
            isWinning = true;
        }

        while (FindWinningPattern(patternData.diagonalCrossPatterns, out winningPattern, winningPatternsToExclude))
        {
            WinningPattern winny = new WinningPattern(winningPattern);
            winny.type = PatternType.DiagonalCross;
            winningPatternsToExclude.Add(winny);
            isWinning = true;
        }

        return(isWinning);
    }
Example #4
0
    IEnumerator playVictoryAnimationPhase2(WinningPattern pattern)
    {
        modelGrid.GetCellFromModel((int)pattern.cells[0].y, (int)pattern.cells[0].x).ball.Animator.SetTrigger(animatorHashWinPhase2);
        modelGrid.GetCellFromModel((int)pattern.cells[1].y, (int)pattern.cells[1].x).ball.Animator.SetTrigger(animatorHashWinPhase2);
        modelGrid.GetCellFromModel((int)pattern.cells[2].y, (int)pattern.cells[2].x).ball.Animator.SetTrigger(animatorHashWinPhase2);
        modelGrid.GetCellFromModel((int)pattern.cells[3].y, (int)pattern.cells[3].x).ball.Animator.SetTrigger(animatorHashWinPhase2);
        modelGrid.GetCellFromModel((int)pattern.cells[4].y, (int)pattern.cells[4].x).ball.Animator.SetTrigger(animatorHashWinPhase2);

        yield return(new WaitForSeconds(timeFromPhase2AnimBeginToRoundResultPanel));

        StartCoroutine(addVictoryPoints(pattern));
    }
Example #5
0
    public WinningPattern(WinningPattern toCopy)
    {
        cells = new Vector2[5];

        for (int i = 0; i < cells.Length; ++i)
        {
            cells[i] = toCopy.cells[i];
        }

        type  = toCopy.type;
        color = toCopy.color;
    }
Example #6
0
    private void playVictoryAnimationEnd(WinningPattern pattern)
    {
        UIManager.Instance.DisableBackToMainMenuButton(true);

        if (IsEqualityTurn && PlayerManager.Instance.Player1.NbOfTurn != PlayerManager.Instance.Player2.NbOfTurn)
        {
            NextTurn();
        }
        else
        {
            DisplayRoundResult();
        }
    }
Example #7
0
    public void PlayVictoryAnimation()
    {
        List <WinningPattern> winningPatterns = new List <WinningPattern>();

        optiGrid.GetWinningPatterns(out winningPatterns);

        WinningPattern toKeep    = new WinningPattern();
        int            bestScore = -1;

        foreach (WinningPattern pattern in winningPatterns)
        {
            bool alreadyDone = false;

            foreach (WinningPattern alreadyDonePattern in alreadyAnimatedPattern)
            {
                if (pattern.IsSame(alreadyDonePattern))
                {
                    alreadyDone = true;
                    break;
                }
            }

            if (alreadyDone)
            {
                continue;
            }

            alreadyAnimatedPattern.Add(pattern);

            int patternScore = pattern.GetScore(modelGrid);
            if (bestScore <= patternScore)
            {
                toKeep    = pattern;
                bestScore = patternScore;
            }
        }
        StartCoroutine(playVictoryAnimationPhase1(toKeep));

        AudioManager.Instance.PlayAudio(SoundID.ComboRumble);
        AudioManager.Instance.ResetVictoryAnimationSounds();
    }
Example #8
0
    private int GetWinningPatternScore(WinningPattern winningPattern)
    {
        int score = 0;

        if (winningPattern.cells.Length == 0)
        {
        }
        else
        {
            for (int i = 0; i < winningPattern.cells.Length; ++i)
            {
                Cell cell = modelGrid.GetCellFromModel(new Vector2(winningPattern.cells[i].y, winningPattern.cells[i].x));

                if (cell && cell.ball)
                {
                    score += cell.ball.Score;
                }
            }
        }

        return(score);
    }
Example #9
0
    public bool IsSame(WinningPattern pattern)
    {
        if (pattern.color != color)
        {
            return(false);
        }

        for (int i = 0; i < cells.Length; ++i)
        {
            if (cells[i].x != pattern.cells[i].x || cells[i].y != pattern.cells[i].y)
            {
                return(false);
            }
        }

        if (cells.Length == 0)
        {
            //Debug.LogError("IsSame with cell 0");
        }

        return(true);
    }
Example #10
0
    private bool FindWinningPattern(EvaluationPattern[] patterns, out WinningPattern winningPattern, List <WinningPattern> toExclude = null)
    {
        int aiPawnCount       = 0;
        int opponentPawnCount = 0;

        winningPattern = new WinningPattern();

        for (int i = 0; i < patterns.Length; ++i)
        {
            aiPawnCount       = 0;
            opponentPawnCount = 0;

            for (int j = 0; j < patterns[i].positions.Length; ++j)
            {
                IntVec2 pos = patterns[i].positions[j];
                if (cells[pos.X][pos.Y].color == CellColor.Black)
                {
                    aiPawnCount++;
                }
                else if (cells[pos.X][pos.Y].color == CellColor.White)
                {
                    opponentPawnCount++;
                }
            }

            if (aiPawnCount == 5 || opponentPawnCount == 5)
            {
                Vector2[] cells = new Vector2[5];
                cells[0] = new Vector2(patterns[i].positions[0].X, patterns[i].positions[0].Y);
                cells[1] = new Vector2(patterns[i].positions[1].X, patterns[i].positions[1].Y);
                cells[2] = new Vector2(patterns[i].positions[2].X, patterns[i].positions[2].Y);
                cells[3] = new Vector2(patterns[i].positions[3].X, patterns[i].positions[3].Y);
                cells[4] = new Vector2(patterns[i].positions[4].X, patterns[i].positions[4].Y);

                bool alreadyFound = false;
                foreach (WinningPattern patternToExclude in toExclude)
                {
                    if (cells[0] == patternToExclude.cells[0] &&
                        cells[1] == patternToExclude.cells[1] &&
                        cells[2] == patternToExclude.cells[2] &&
                        cells[3] == patternToExclude.cells[3] &&
                        cells[4] == patternToExclude.cells[4])
                    {
                        alreadyFound = true;
                        break;
                    }
                }

                if (alreadyFound)
                {
                    continue;
                }

                winningPattern.cells = cells;
                winningPattern.color = (aiPawnCount == 5) ? CellColor.Black : CellColor.White;
                return(true);
            }
        }

        return(false);
    }