Esempio n. 1
0
    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();
            }
        });
    }
Esempio n. 2
0
 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));
        }
Esempio n. 5
0
    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);
        }));
    }
Esempio n. 6
0
    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);
                }
            }
        }
    }
Esempio n. 7
0
    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
                               )
                               ));
    }