private void HandleGameEnd() { _gameEndEventFilter.HandleEvents(_world, (eventData) => { var directions = new List <DirectionEnum> { DirectionEnum.Top, DirectionEnum.Right, DirectionEnum.Bottom, DirectionEnum.Left, }; var hasAvailablePosition = HasAvailablePosition( eventData.Column, eventData.Row, eventData.Round, eventData.Number, directions ); if (!hasAvailablePosition) { ShowScoreUI(false); ShowGameOverScreen(true); _gameManager.ClearAll(); _manager.EndGame(); var scoreEntity = _scoreFilter.ToEntitiesList().First(); SaveLeaderboard.AddResultAndSave(scoreEntity.Amount); _stateManager.Clear(); } }); }
private void ShowGameOverScreen(bool isActive) { _gameOverFilter.ToEntitiesList().ForEach((entity) => { entity.GameObject.SetActive(isActive); }); }
private List <Wall> GetWallsOnPosition(int row, int column) { var activeWalls = _wallsFilter.ToEntitiesList(); var wallsOnPosition = new List <Wall>(); var bottomPosition = PositionHelper.GetNextPosition(row, column, DirectionEnum.Bottom); var leftPosition = PositionHelper.GetNextPosition(row, column, DirectionEnum.Left); var positions = new List <Tuple <int, int, DirectionEnum> > { Tuple.Create(row, column, DirectionEnum.Top), Tuple.Create(row, column, DirectionEnum.Right), Tuple.Create(bottomPosition.Row, bottomPosition.Column, DirectionEnum.Top), Tuple.Create(leftPosition.Row, leftPosition.Column, DirectionEnum.Right) }; foreach (var position in positions) { var wall = activeWalls .FirstOrDefault(w => w.Row == position.Item1 && w.Column == position.Item2 && w.Direction == position.Item3 ); if (wall != null) { wallsOnPosition.Add(wall); } } return(wallsOnPosition); }
private TargetValueEnum GetTargetValue() { var activeWalls = _wallFilter .ToEntitiesList() .Count(); return(TargetHelper.GetTargetValue(activeWalls / 2)); }
private Wall GetWall(int row, int column, DirectionEnum direction) { var nextPosition = PositionHelper.GetNextPosition(row, column, direction); var reverseDirection = DirectionHelper.GetReverseDirection(direction); return(_wallFilter.ToEntitiesList().FirstOrDefault(w => { return (w.Row == row && w.Column == column && w.Direction == direction) || (w.Row == nextPosition.Row && w.Column == nextPosition.Column && w.Direction == reverseDirection); })); }
private void SwipeDone(DirectionEnum direction) { if (!_isGameActive) { return; } if (direction != DirectionEnum.None) { var lastStep = GetLastStep(); var isWallClosed = IsWallOnWay(lastStep.Row, lastStep.Column, direction); if (isWallClosed) { return; } if (lastStep.Number == 1) { _manager.NewRound(lastStep, direction); } else { var isTargetReached = IsTargetReached(lastStep.Row, lastStep.Column, lastStep.Number, direction); if (isTargetReached) { var newPosition = PositionHelper.GetNextPosition(lastStep.Row, lastStep.Column, direction); var target = _targetFilter .ToEntitiesList() .Find(t => t.Row == newPosition.Row && t.Column == newPosition.Column); _manager.TargetReached(lastStep, direction, target.Value); } else { var isNextBusy = IsNextPositionBusy(lastStep.Row, lastStep.Column, direction); if (isNextBusy) { return; } _manager.NewStep(lastStep, direction); } } } }
private Wall GetWall(PositionModel position, DirectionEnum direction) { var nextPosition = PositionHelper.GetNextPosition(position.Row, position.Column, direction); var reverseDirection = DirectionHelper.GetReverseDirection(direction); return(_wallsFilter .ToEntitiesList() .FirstOrDefault(e => ( e.Row == position.Row && e.Column == position.Column && e.Direction == direction ) || ( e.Row == nextPosition.Row && e.Column == nextPosition.Column && e.Direction == reverseDirection ) )); }