コード例 #1
0
        private void NextActionSubstitution()
        {
            ModalEV modal       = modalService.FindModalEV(entitiesDB);
            TileEV  clickedTile = FindDestinationTile(modal);
            PieceEV ninjaPiece  = FindTopPiece(clickedTile);

            var token = new SubstitutionStepState
            {
                SubstitutionPiece = ninjaPiece,
                TileReferenceEV   = clickedTile
            };

            captureStackModalAnswerSequence.Next(this, ref token, (int)MoveState.SUBSTITUTION);
        }
コード例 #2
0
        private void NextActionCapture()
        {
            ModalEV modal                     = modalService.FindModalEV(entitiesDB);
            TileEV  destinationTile           = FindDestinationTile(modal);
            PieceEV topPieceAtDestinationTile = pieceFindService.FindTopPieceByLocation(
                destinationTile.Location.Location, entitiesDB).Value;
            PieceEV pieceToMove = FindPieceToMove(destinationTile);

            var captureToken = new CapturePieceStepState
            {
                PieceToCapture  = topPieceAtDestinationTile,
                PieceToMove     = pieceToMove,
                DestinationTile = destinationTile
            };

            captureStackModalAnswerSequence.Next(this, ref captureToken, (int)MoveState.MOBILE_CAPTURE);
        }
コード例 #3
0
        public BoardPress DecideAction(
            BoardPressStateInfo stateInfo,
            bool substitutionPossible,
            bool tierExchangePossible,
            TurnEV currentTurn)
        {
            BoardPress returnValue = BoardPress.NOTHING;
            TileEV     tileEV      = stateInfo.tile.Value;
            int        tilePieceId = tileEV.Tile.PieceRefEntityId.GetValueOrDefault();

            // TODO Scenario: Clicked highlighted tile containing opponent piece to initiate mobile capture

            // If hand piece highlighted, it's an attempted drop
            if (stateInfo.handPiece.HasValue)
            {
                returnValue = BoardPress.DROP;
            }
            else if (currentTurn.InitialArrangement.IsInitialArrangementInEffect)
            {   // User is not dropping during Initial Arrangement, so deny
                returnValue = BoardPress.NOTHING;
            }
            else if (substitutionPossible)
            {
                returnValue = BoardPress.SUBSTITUTION;
            }
            else if (tierExchangePossible)
            {
                returnValue = BoardPress.TIER_1_3_EXCHANGE;
            }
            // Tile is clicked, tile highlighted, piece reference exists; move vs mobile capture determined in later engine
            else if (tileEV.Highlight.IsHighlighted &&
                     stateInfo.piece.HasValue &&
                     tilePieceId != 0 &&
                     stateInfo.piece.Value.PlayerOwner.PlayerColor == currentTurn.TurnPlayer.PlayerColor)
            {
                returnValue = BoardPress.MOVE_PIECE;
            }
            // NOT move scenario, Piece/Tile clicked, both piece and tile exist, piece reference does not exist
            else if (stateInfo.piece.HasValue && tilePieceId == 0)
            {
                returnValue = BoardPress.CLICK_HIGHLIGHT;
            }

            return(returnValue);
        }
コード例 #4
0
        private void NextActionClick()
        {
            ModalEV modal        = modalService.FindModalEV(entitiesDB);
            TileEV  clickedTile  = FindDestinationTile(modal);
            PieceEV clickedPiece = FindTopPiece(clickedTile);
            TurnEV  currentTurn  = turnService.GetCurrentTurnEV(entitiesDB);

            // Determine PiecePressState, click or un-click, and destination tiles
            var token = new PressStepState
            {
                PieceEntityId   = clickedPiece.ID.entityID,
                PiecePressState = clickedPiece.Highlight.IsHighlighted ? PiecePressState.UNCLICKED : PiecePressState.CLICKED,
                AffectedTiles   = destinationTileService.CalcDestinationTileLocations(
                    clickedPiece,
                    entitiesDB,
                    null,
                    currentTurn.TurnPlayer.PlayerColor == clickedPiece.PlayerOwner.PlayerColor)
            };

            captureStackModalAnswerSequence.Next(this, ref token, (int)MoveState.CLICK);
        }
コード例 #5
0
        public void DropPiece(
            ref PieceEV pieceToDrop,
            ref TileEV destinationTile,
            PieceSide side,
            PlayerColor playerOwner,
            IEntitiesDB entitiesDB)
        {
            Vector2 location = destinationTile.Location.Location;

            List <PieceEV> piecesAtLocation = pieceFindService.FindPiecesByLocation(location, entitiesDB);

            if (piecesAtLocation.Count > 0)
            {
                pieceSetService.SetTopOfTowerToFalse(piecesAtLocation[piecesAtLocation.Count - 1], entitiesDB);
            }

            pieceSetService.SetPiecePlayerOwner(pieceToDrop, playerOwner, entitiesDB);
            pieceSetService.SetPieceLocationAndTier(pieceToDrop, location, piecesAtLocation.Count + 1, entitiesDB);
            pieceSetService.SetPieceSide(pieceToDrop, side, entitiesDB);
            pieceToDrop.MovePiece.NewLocation              = location;
            pieceToDrop.Visibility.IsVisible.value         = true;
            pieceToDrop.ChangeColorTrigger.PlayChangeColor = true;
        }
コード例 #6
0
        private PieceEV FindSecondFromTopPiece(TileEV destinationTile)
        {
            List <PieceEV> piecesAtLocation = pieceFindService.FindPiecesByLocation(destinationTile.Location.Location, entitiesDB);

            return(piecesAtLocation[piecesAtLocation.Count - 2]);
        }
コード例 #7
0
 private PieceEV FindTopPiece(TileEV destinationTile)
 {
     return(pieceFindService.FindTopPieceByLocation(
                destinationTile.Location.Location, entitiesDB).Value);
 }
コード例 #8
0
 private PieceEV FindPieceToMove(TileEV destinationTile)
 {
     return(pieceFindService.FindPieceEVById(
                destinationTile.Tile.PieceRefEntityId.Value, entitiesDB).Value);
 }
コード例 #9
0
        public TileEV?FindTileEVById(int?entityId, IEntitiesDB entitiesDB)
        {
            TileEV returnValue = CommonService.FindEntityById <TileEV>(entityId, entitiesDB);

            return(returnValue.ID.entityID != 0 ? (TileEV?)returnValue : null);
        }