internal void InitializeBoard()
        {
            // Bootstrapper
            var boardService = new BoardService();

            var gameModel      = new GameModel(boardService);
            var gameController = new GameController(gameModel);

            var boardModel      = new BoardModel(boardService);
            var boardController = new BoardController(boardModel);

            var boardViewModel = new BoardViewModel(BoardCanvas, gameModel, boardModel);

            var userMessageController = new UserMessageController(boardViewModel);
            var rendererController    = new RendererController(boardViewModel);

            boardModel.NewPieceAdded    += rendererController.DrawNewPiece;
            boardModel.NewPieceAdded    += gameController.IncreasePieceCount;
            boardModel.PieceRemoved     += rendererController.DeletePiece;
            boardModel.PieceRemoved     += gameController.DecreaseOpponentPieceCount;
            boardModel.PieceMoved       += rendererController.MovePiece;
            boardModel.SelectionChanged += rendererController.ChangeSelection;
            gameModel.TurnTaken         += rendererController.UpdateRendererModel;

            rendererController.NotifyUser    += userMessageController.SetUserMessage;
            boardViewModel.NotifyUser        += userMessageController.SetUserMessage;
            boardViewModel.SelectPiece       += boardController.ChangeSelection;
            boardViewModel.RemovePiece       += boardController.RemovePiece;
            boardViewModel.TakeTurn          += gameController.TakeTurn;
            boardViewModel.AddPiece          += boardController.AddNewPiece;
            boardViewModel.MoveSelectedPiece += boardController.MoveSelectedPiece;

            DataContext = boardViewModel;
            gameController.StartGame();
        }
Beispiel #2
0
        private async Task Client_MessageRecieved(SocketMessage messageParam)
        {
            if (!(messageParam is SocketUserMessage message))
            {
                return;
            }
            var context = new SocketCommandContext(Client, message);
            var getCard = new MTGCardOutput();

            if (context.Message == null || context.Message.Content == "")
            {
                return;
            }
            if (context.User.IsBot)
            {
                return;
            }
            if (context.User.Id == 129804455964049408 && context.Guild.Id == 596104949503361050)
            {
                await ReactWithEmoteAsync(context.Message, "<:WeebsOut:627783662708064256>");
            }
            if (message != null && (message.Content.Contains("[") && message.Content.Contains("]")))
            {
                try
                {
                    Regex           rx      = new Regex(@"\[\[(.*?)\]\]", RegexOptions.Compiled | RegexOptions.IgnoreCase);
                    MatchCollection matches = rx.Matches(message.Content);
                    foreach (var item in matches)
                    {
                        var dataOutput = new UserMessageController(item.ToString());
                        await context.Channel.SendMessageAsync("", false, dataOutput.MessageOutput.Build());
                    }
                }
                catch (Exception msg)
                {
                    Console.WriteLine(ConsoleWriteOverride.AddTimeStamp(msg.Message));
                    await context.Channel.SendMessageAsync("", false, getCard.DetermineFailure(3).Build());
                }
            }

            var argPos = 0;

            if (!(message.HasStringPrefix("mtg!", ref argPos) || message.HasMentionPrefix(Client.CurrentUser, ref argPos)))
            {
                return;
            }

            var result = await Commands.ExecuteAsync(context, argPos, null);

            if (!result.IsSuccess)
            {
                Console.WriteLine(ConsoleWriteOverride.AddTimeStamp($"Something went wrong with executing command. Text: {context.Message.Content} | Error: {result.ErrorReason}"));
            }
        }