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); }
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); }
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); }
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); }
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; }
private PieceEV FindSecondFromTopPiece(TileEV destinationTile) { List <PieceEV> piecesAtLocation = pieceFindService.FindPiecesByLocation(destinationTile.Location.Location, entitiesDB); return(piecesAtLocation[piecesAtLocation.Count - 2]); }
private PieceEV FindTopPiece(TileEV destinationTile) { return(pieceFindService.FindTopPieceByLocation( destinationTile.Location.Location, entitiesDB).Value); }
private PieceEV FindPieceToMove(TileEV destinationTile) { return(pieceFindService.FindPieceEVById( destinationTile.Tile.PieceRefEntityId.Value, entitiesDB).Value); }
public TileEV?FindTileEVById(int?entityId, IEntitiesDB entitiesDB) { TileEV returnValue = CommonService.FindEntityById <TileEV>(entityId, entitiesDB); return(returnValue.ID.entityID != 0 ? (TileEV?)returnValue : null); }