public static Timer AddTimer( float durationMilliseconds, float delayMilliseconds = 0.0f, Action?onDoneCallback = null ) { Timer timer = new Timer( durationMilliseconds: durationMilliseconds, delayMilliseconds: delayMilliseconds, onDoneCallback: onDoneCallback ); TimerManager.AddTimer(timer); return(timer); }
private Timer CreateCellTimer( int x, int y, float durationMilliseconds, Action <int, int> onDoneCallback ) { int xx = x, yy = y + this.boardVerticalOffset; return(TimerManager.AddTimer( durationMilliseconds: durationMilliseconds, onDoneCallback: () => onDoneCallback( xx, yy - this.boardVerticalOffset ) )); }
private void EliminateContiguous() { List <Tuple <int, int> > toEliminate = new List <Tuple <int, int> >(); for (int x = 0; x < this.config.BoardWidth; x++) { int count = 0; int currentGem = Board.EMPTY; List <Tuple <int, int> > currentCells = new List <Tuple <int, int> >(); for (int y = 0; y < this.config.BoardHeight; y++) { if ( this.board[x, y] == Board.EMPTY || this.isLocked[x, y] ) { currentCells.Clear(); count = 0; currentGem = Board.EMPTY; continue; } if (this.board[x, y] != currentGem) { currentGem = this.board[x, y]; currentCells.Clear(); currentCells.Add(new Tuple <int, int>(x, y)); count = 1; } else { currentCells.Add(new Tuple <int, int>(x, y)); count++; } if (count >= 3) { toEliminate.AddRange(currentCells); } } } for (int y = 0; y < this.config.BoardHeight; y++) { int count = 0; int currentGem = Board.EMPTY; List <Tuple <int, int> > currentCells = new List <Tuple <int, int> >(); for (int x = 0; x < this.config.BoardWidth; x++) { if ( this.board[x, y] == Board.EMPTY || this.isLocked[x, y] ) { currentCells.Clear(); count = 0; currentGem = Board.EMPTY; continue; } if (this.board[x, y] != currentGem) { currentGem = this.board[x, y]; currentCells.Clear(); currentCells.Add(new Tuple <int, int>(x, y)); count = 1; } else { currentCells.Add(new Tuple <int, int>(x, y)); count++; } if (count >= 3) { toEliminate.AddRange(currentCells); } } } if (toEliminate.Count > 0) { this.eliminationTimer = TimerManager.AddTimer( durationMilliseconds: this.config.EliminationScrollCooldownMs, onDoneCallback: () => { this.eliminationTimer = null; } ); } foreach (Tuple <int, int> cell in toEliminate.Distinct().ToList()) { this.EliminateCell(cell.Item1, cell.Item2); } int numGemsEliminated = toEliminate.Distinct().Count(); this.Score += numGemsEliminated * (numGemsEliminated - 2); }