private void PlayerMove(Position userInput) { _fenStack.Push(GetFen()); var fromPos = new Position(_selectedPiece.CurrentPosition); _selectedPiece.Move(userInput); if (_rules[RuleNames.Chess].IsSatisfied()) { UndoLastMove(); _eventAggregator.GetEvent <Chess.Infrastructure.Events.MessageEvent>().Publish(new MessageInfo(1500, "Move illegal! King in check.")); } else { _eventAggregator.GetEvent <Chess.Infrastructure.Events.MovedPieceEvent>().Publish(new Move(fromPos, userInput)); _gameInfo.HalfMoves++; _gameInfo.FullMoves++; _selectedPiece = null; _playerSwitchSystem.NextTurn(this); } _gameInfo.ColorToMove = _playerSwitchSystem.CurrentPlayer.Color; if (_rules[RuleNames.Mate].IsSatisfied()) { _eventAggregator.GetEvent <Chess.Infrastructure.Events.MessageEvent>().Publish(new MessageInfo(0, "You lost! King in check-mate.")); } if (CurrentPlayer.IsAutomatic) { CurrentPlayer.Act(this); } }