コード例 #1
0
ファイル: PlayController.cs プロジェクト: Immelstorn/mtg
        public dynamic CardPostitionChanged(string gameId, string cardLinkId, string top, string left)
        {
            var gameRequest = new CardPostitionChangedRequest
            {
                GameId     = gameId,
                PlayerId   = UserId,
                CardLinkId = cardLinkId,
                Top        = top,
                Left       = left
            };

            var result = Network.MakePostRequest <bool>("cards/cardPositionChanged", gameRequest);
            var failed = result.StatusCode != HttpStatusCode.OK || result.Data.Failed;

            return(Json(new
            {
                Failed = failed,
                Error = failed ? result.Content : null,
                Data = result.Data
            }));
        }
コード例 #2
0
        public async Task <dynamic> CardPositionChanged(CardPostitionChangedRequest request)
        {
            Guid gameIdGuid;

            if (!Guid.TryParse(request.GameId, out gameIdGuid))
            {
                return(InvalidGameId(request.GameId));
            }
            var gameQuery = _context.Games
                            .Where(g => g.Id == gameIdGuid)
                            .Include(g => g.FirstPlayer)
                            .Include(g => g.SecondPlayer)
                            .Include(g => g.BattlefieldCards);

            var game = await gameQuery.FirstOrDefaultAsync();

            if (game == null)
            {
                return(GameNotFound(request.GameId));
            }

            var player = await _context.Users.FirstOrDefaultAsync(u => u.Id == request.PlayerId);

            if (player == null)
            {
                return(PlayerNotFound(request.PlayerId));
            }

            if (game.FirstPlayer != player && game.SecondPlayer != player)
            {
                return(PlayerNotInGame(request.PlayerId, request.GameId));
            }

            Guid cardlinkGuid;

            if (!Guid.TryParse(request.CardLinkId, out cardlinkGuid))
            {
                return(InvalidCardLinkId(request.CardLinkId));
            }

            var cardLink = await _context.CardLinks.Include(l => l.Token).Include(l => l.Card).FirstOrDefaultAsync(l => l.Id == cardlinkGuid);

            if (cardLink == null)
            {
                return(CardNotFound(request.CardLinkId, MoveFrom.Battlefield));
            }

            double top, left;

            if (!double.TryParse(request.Top, out top) || !double.TryParse(request.Left, out left))
            {
                return(Json(new Response <bool>
                {
                    Failed = true,
                    Result = false,
                    Error = "Card position is invalid"
                }));
            }

            var bfCard = game.BattlefieldCards.FirstOrDefault(c => c.CardLink == cardLink);

            if (bfCard == null)
            {
                return(CardNotFound(request.CardLinkId, MoveFrom.Battlefield));
            }
            bfCard.Top  = top;
            bfCard.Left = left;

            await _context.SaveChangesAsync();

            return(Json(new Response <bool>
            {
                Result = true
            }));
        }