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); }
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)); }
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); }
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)); }
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; }
private void playVictoryAnimationEnd(WinningPattern pattern) { UIManager.Instance.DisableBackToMainMenuButton(true); if (IsEqualityTurn && PlayerManager.Instance.Player1.NbOfTurn != PlayerManager.Instance.Player2.NbOfTurn) { NextTurn(); } else { DisplayRoundResult(); } }
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(); }
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); }
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); }
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); }