Exemplo n.º 1
0
        public bool SetFocusFigure(IFigureEntity figure)
        {
            if (IsBlockFocused)
            {
                return(false);
            }

            if (figure.Team != GameModel.CurTeamTurn)
            {
                return(false);
            }

            if (HasFocusFigure)
            {
                if (_focusFigure.Equals(figure))
                {
                    return(false);
                }

                ResetCellStatusToEmpty(_focusFigure.PlacedCell);
            }

            figure.PlacedCell.Status = BoardCellStatus.HasFocusFigure;
            _focusFigure             = figure;

            return(true);
        }
Exemplo n.º 2
0
        public override ICollection <IGameMoveTurnData> CalculateMoveTurnData(IFigureEntity movableFigure)
        {
            var placedCell   = movableFigure.PlacedCell;
            var team         = movableFigure.Team;
            var delta        = 0;
            var moveTurnData = new List <IGameMoveTurnData>();

            void CreateNextMoveTurnData()
            {
                delta += team == GameTeam.White ? -1 : 1;

                var data = CreateMoveTurnData(placedCell.IndexX + delta, placedCell.IndexY);

                if (!data.IsEmpty)
                {
                    moveTurnData.Add(data);
                }
            }

            CreateNextMoveTurnData();

            if (IsFigurePlacedOnRow(movableFigure))
            {
                CreateNextMoveTurnData();
            }

            return(moveTurnData);
        }
Exemplo n.º 3
0
        public override bool ActivatePostTurnLogic(IFigureEntity figure)
        {
            //сначала проверяем была срублена фигура на прошлом ходу
            var prevRemovedFigure = GameMoveTurnManager.GetRemovedFigure(figure.PlacedCell);

            if (prevRemovedFigure == null)
            {
                return(false);
            }

            //расчитываем возможные ходы по новой
            var moveTurnData = GameMoveTurnManager.CalculateMovesTurn(figure);

            foreach (var data in moveTurnData)
            {
                if (!data.HasRemovedFigure)
                {
                    data.MoveToCell.Status = BoardCellStatus.Empty;
                    continue;
                }

                GameMaster.SetFocusFigure(figure);
                GameMaster.IsBlockFocused = true;
                SwitchTurn(false, false);
                return(true);
            }

            return(false);
        }
Exemplo n.º 4
0
        private void OnRemovedFigureHandler(object sender, IFigureEntity figure)
        {
            var figureView = FigureViewModel.GetView(figure);

            FigureViewFactory.Despawn(figureView);
            FigureViewModel.RemoveView(figure);
        }
Exemplo n.º 5
0
        public void MoveFigure(IFigureEntity figure, IBoardCell cell)
        {
            figure.PlacedCell?.Clear();
            figure.PlacedCell = cell;

            cell.Figure = figure;

            OnMovedFigure?.Invoke(this, new MovedFigureEventArgs(figure, cell));
        }
Exemplo n.º 6
0
        public override ICollection <IGameMoveTurnData> CalculateMoveTurnData(IFigureEntity movableFigure)
        {
            var placedCell = movableFigure.PlacedCell;

            var moveTurnData = new List <IGameMoveTurnData>();

            moveTurnData.AddRange(CreateMoveTurnData(placedCell, DeltaIndexes1, DeltaIndexes2));
            moveTurnData.AddRange(CreateMoveTurnData(placedCell, DeltaIndexes2, DeltaIndexes1));
            return(moveTurnData);
        }
        public override ICollection <IGameMoveTurnData> CalculateMoveTurnData(IFigureEntity movableFigure)
        {
            var moveTurnData = CreateMoveTurnData(movableFigure.PlacedCell);

            if (CheckNeededClearForMoveTurnData(moveTurnData))
            {
                ClearMoveTurnData(moveTurnData);
            }

            return(moveTurnData);
        }
Exemplo n.º 8
0
        private void TransformFigure(IFigureEntity figure, IFigureDef figureDef)
        {
            var cell = figure.PlacedCell;
            var team = figure.Team;

            FigureController.RemoveFigure(figure);

            var newTransformFigure = FigureCreator.Create(figureDef, team);

            FigureController.MoveFigure(newTransformFigure, cell);
        }
Exemplo n.º 9
0
        private IFigureViewPool GetPool(IFigureEntity entity)
        {
            var def = entity.Def;

            var storagePools = GetStorageFigureViewPools(entity.Team);

            storagePools.TryGetValue(def, out var pool);

            if (pool == null)
            {
                Debug.LogError($"Can't find pool for figureDef:{def}");
                return(default);
Exemplo n.º 10
0
        public override ICollection <IGameMoveTurnData> CalculateMoveTurnData(IFigureEntity movableFigure)
        {
            var placedCell = movableFigure.PlacedCell;

            var moveTurnData = new List <IGameMoveTurnData>();

            moveTurnData.AddRange(GetMoveTurnData(placedCell, DeltaIndexesRightTop));
            moveTurnData.AddRange(GetMoveTurnData(placedCell, DeltaIndexesRightDown));
            moveTurnData.AddRange(GetMoveTurnData(placedCell, DeltaIndexesLeftTop));
            moveTurnData.AddRange(GetMoveTurnData(placedCell, DeltaIndexesLeftDown));
            return(moveTurnData);
        }
Exemplo n.º 11
0
        public bool SetAndActivateFocusFigure(IFigureEntity figure)
        {
            if (!SetFocusFigure(figure))
            {
                return(false);
            }

            ResetAvailableCellsToEmpty();
            GameMoveTurnManager.CalculateMovesTurn(figure);

            return(true);
        }
Exemplo n.º 12
0
        public void ActivateFigurePostTurnLogic(IFigureEntity figureEntity)
        {
            foreach (var figurePostTurnLogic in figureEntity.Def.FigurePostTurnLogics)
            {
                var isActivated = figurePostTurnLogic.ActivatePostTurnLogic(figureEntity);
                if (isActivated)
                {
                    return;
                }
            }

            SwitcherTurn.SwitchTurn(true, true);
        }
Exemplo n.º 13
0
        public override bool ActivatePostTurnLogic(IFigureEntity figure)
        {
            if (!IsFigurePlacedOnRow(figure))
            {
                return(false);
            }

            var rndFigureDef = _figureDefsToTransform.GetRandom();

            TransformFigure(figure, rndFigureDef);

            SwitchTurn(true, true);
            return(true);
        }
Exemplo n.º 14
0
        public IEnumerable <IGameMoveTurnData> CalculateMovesTurn(IFigureEntity movableFigure)
        {
            Clear();

            foreach (var figureMoveTurnRules in movableFigure.Def.FigureMoveTurnRules)
            {
                var moveTurnData = figureMoveTurnRules.CalculateMoveTurnData(movableFigure);
                foreach (var data in moveTurnData)
                {
                    MoveTurnData.Add(data.MoveToCell, data);
                }
            }

            return(MoveTurnData.Values);
        }
Exemplo n.º 15
0
        public void SetUp()
        {
            BoardModel = new BoardModel();

            var boardCreator = new BoardCreator();

            boardCreator.CreateCells(BoardModel);

            GameModel = Substitute.For <IGameModel>();
            GameModel.CurTeamTurn.Returns(Team);

            //create figure and cell
            _mainFigure = Substitute.For <IFigureEntity>();
            _mainFigure.Team.Returns(Team);

            _mainCell = BoardModel.GetCell(CellCol, CellRow);
            _mainFigure.PlacedCell.Returns(_mainCell);
        }
Exemplo n.º 16
0
        public override ICollection <IGameMoveTurnData> CalculateMoveTurnData(IFigureEntity movableFigure)
        {
            var placedCell = movableFigure.PlacedCell;
            var curIndexX  = placedCell.IndexX;
            var curIndexY  = placedCell.IndexY;

            var moveTurnData = new List <IGameMoveTurnData>();

            for (var i = 0; i < 2; i++)
            {
                foreach (var deltaIndex in DeltaIndexes)
                {
                    var newIndexX = curIndexX;
                    var newIndexY = curIndexY;
                    IGameMoveTurnData lastMoveTurnData;
                    do
                    {
                        if (i == 0)
                        {
                            newIndexX += deltaIndex;
                        }
                        else
                        {
                            newIndexY += deltaIndex;
                        }

                        lastMoveTurnData = CreateMoveTurnData(newIndexX, newIndexY);

                        if (lastMoveTurnData.IsEmpty)
                        {
                            continue;
                        }
                        moveTurnData.Add(lastMoveTurnData);
                        if (lastMoveTurnData.HasRemovedFigure)
                        {
                            break;
                        }
                    } while (!lastMoveTurnData.IsEmpty);
                }
            }

            return(moveTurnData);
        }
Exemplo n.º 17
0
        public void SetUp()
        {
            var boardModel = Substitute.For <IBoardModel>();

            GameModel = Substitute.For <IGameModel>();
            var figureModel = Substitute.For <IFigureModel>();
            var figurePostTurnLogicManager = Substitute.For <IFigurePostTurnLogicManager>();
            var gameMoveTurnManager        = Substitute.For <IGameMoveTurnManager>();

            var figureController = new FigureController(figureModel);

            GameMaster = new GameMaster(figureController, boardModel, GameModel, figurePostTurnLogicManager,
                                        gameMoveTurnManager);

            _figure = new FigureEntity(Substitute.For <IFigureDef>(), GameTeam.White);
            _cell   = new BoardCell(BoardCellCol.ColA, BoardCellRow.Row1, 0, 0)
            {
                Figure = _figure
            };
            _moveToCell = new BoardCell(BoardCellCol.ColA, BoardCellRow.Row2, 0, 0)
            {
                Status = BoardCellStatus.AvailableForMove
            };
        }
Exemplo n.º 18
0
 public MovedFigureEventArgs(IFigureEntity figureEntity, IBoardCell boardCell)
 {
     Figure = figureEntity.CheckNull();
     Cell   = boardCell.CheckNull();
 }
Exemplo n.º 19
0
 public void Init(IFigureEntity entity)
 {
     Entity = entity;
 }
Exemplo n.º 20
0
 public bool Equals(IFigureEntity figureEntity) => figureEntity == this;
Exemplo n.º 21
0
        private bool IsFigurePlacedOnRow(IFigureEntity figure)
        {
            var friendlyRow = figure.Team == GameTeam.White ? _whiteLastRow : _blackLastRow;

            return(figure.PlacedCell.Row == friendlyRow);
        }
Exemplo n.º 22
0
 public abstract ICollection <IGameMoveTurnData> CalculateMoveTurnData(IFigureEntity movableFigure);
Exemplo n.º 23
0
 public abstract bool ActivatePostTurnLogic(IFigureEntity figure);
Exemplo n.º 24
0
 private void Reset()
 {
     _focusFigure   = null;
     IsBlockFocused = false;
 }
Exemplo n.º 25
0
 public void AddFigure(IFigureEntity figure)
 {
     FiguresList.Add(figure);
 }
Exemplo n.º 26
0
 public void RemoveFigure(IFigureEntity figure)
 {
     figure.Clear();
     FiguresList.Remove(figure);
 }
Exemplo n.º 27
0
        public override ICollection <IGameMoveTurnData> CalculateMoveTurnData(IFigureEntity movableFigure)
        {
            var moveTurnData = CreateMoveTurnData(movableFigure.PlacedCell, DeltaIndexes, DeltaIndexes);

            return(new List <IGameMoveTurnData>(moveTurnData));
        }
Exemplo n.º 28
0
 public GameMoveTurnData(IBoardCell moveToCell, IFigureEntity removedFigure)
 {
     MoveToCell    = moveToCell;
     RemovedFigure = removedFigure;
 }
Exemplo n.º 29
0
        public void RemoveFigure(IFigureEntity figure)
        {
            FigureModel.RemoveFigure(figure);

            OnRemovedFigure?.Invoke(this, figure);
        }