public void Step(ref HandPiecePressStepState token, int condition)
        {
            HandPieceEV handPiece = handService.FindHandPiece(token.HandPieceEntityId, entitiesDB);
            bool        isClicked = !handPiece.Highlight.IsHighlighted;

            handService.HighlightHandPiece(ref handPiece, isClicked, entitiesDB);
        }
        private void OnPressed(int entityId, bool isPressed)
        {
            if (!isPressed)
            {
                return;
            }

            // if not turn team or num piece count == 0, stop
            HandPieceEV handPiece   = handService.FindHandPiece(entityId, entitiesDB);
            TurnEV      currentTurn = turnService.GetCurrentTurnEV(entitiesDB);

            if (handPiece.PlayerOwner.PlayerColor != currentTurn.TurnPlayer.PlayerColor ||
                handPiece.HandPiece.NumPieces.value <= 0 ||
                currentTurn.ForcedRearrangementStatus.ForcedRearrangmentActive)
            {
                handPiece.Highlight.IsPressed.value = false; // Will trigger a HandPiecePressEngine, but IsPressed check will stop it
                return;
            }

            var pressState = new HandPiecePressStepState
            {
                HandPieceEntityId = entityId
            };

            boardPressSequence.Next(this, ref pressState);
        }
        private void NextAction(ModalEV modal, PieceSide answer)
        {
            var dropToken = new DropStepState
            {
                HandPiece       = handService.FindHandPiece(modal.DropFrontBackModal.HandPieceReferenceId, entitiesDB),
                DestinationTile = tileService.FindTileEV(modal.DropFrontBackModal.TileReferenceId, entitiesDB),
                Side            = modal.DropFrontBackModal.Answer.value
            };

            dropModalAnswerSequence.Next(this, ref dropToken);
        }
        private void MovePieceTypeToHand(PlayerColor teamColor, PieceType front, PieceType back, PieceEV[] pieces)
        {
            HandPieceEV    handPiece  = handService.FindHandPiece(front, back, teamColor, entitiesDB);
            List <PieceEV> teamPieces = pieces.Where(piece => piece.PlayerOwner.PlayerColor == teamColor).ToList();

            teamPieces.ForEach(piece =>
            {
                handService.AddPieceToHand(piece, entitiesDB, teamColor);
                pieceSetService.SetPieceLocationToHandLocation(piece, entitiesDB);
                piece.Visibility.IsVisible.value = false;
            });
        }
        public void Step(ref ForcedRearrangementStepState token, int condition)
        {
            TurnEV currentTurn = turnService.GetCurrentTurnEV(entitiesDB);

            turnService.SetForcedRearrangementStatus(currentTurn, true, entitiesDB);

            HandPieceEV handPiece = handService.FindHandPiece(
                token.PieceToRearrange.Value.Piece.Front,
                token.PieceToRearrange.Value.Piece.Back,
                currentTurn.TurnPlayer.PlayerColor,
                entitiesDB);

            handService.HighlightHandPiece(ref handPiece, true, entitiesDB);
        }
        private void MoveCapturePieceToOtherPlayersHand(PieceEV pieceCaptured)
        {
            // Remove piece from player hand
            TurnEV      currentTurn = turnService.GetCurrentTurnEV(entitiesDB);
            HandPieceEV handPiece   = handService.FindHandPiece(
                pieceCaptured.Piece.Front,
                pieceCaptured.Piece.Back,
                currentTurn.TurnPlayer.PlayerColor,
                entitiesDB);

            handService.DecrementHandPiece(ref handPiece);

            // Add piece to other player's hand
            PlayerColor opponent = TurnService.CalcOtherTurnPlayer(currentTurn.TurnPlayer.PlayerColor);

            handService.AddPieceToHand(pieceCaptured, entitiesDB, opponent);
        }
        public void Step(ref HandPiecePressStepState token, int condition)
        {
            HandPieceEV handPieceToChange = handService.FindHandPiece(token.HandPieceEntityId, entitiesDB);

            List <PieceEV> alteredPieces = pieceHighlightService.DeHighlightPlayerPieces(
                handPieceToChange.PlayerOwner.PlayerColor, entitiesDB);

            if (alteredPieces.Count > 0)
            {
                tileHighlightService.DeHighlightOtherTeamTilePieces(
                    alteredPieces, handPieceToChange.PlayerOwner.PlayerColor, entitiesDB);
            }

            List <HandPieceEV> otherHandPieces = handService.FindAllTeamHandPiecesExcept(
                token.HandPieceEntityId, handPieceToChange.PlayerOwner.PlayerColor, entitiesDB);

            handService.DeHighlightHandPieces(otherHandPieces, entitiesDB);
        }