public GameInfoDto GetState([FromHeader] string gameId)
        {
            Guid GameId = Guid.Empty;

            if (Guid.TryParse(gameId, out GameId))
            {
                var gamePlay    = gamePlayService.GetState(Guid.Parse(gameId));
                var gameInfoDto = new GameInfoDto(gamePlay.CurrentRound, GetCurrentPlayer(gameId));
                foreach (var tile in gamePlay.PlacedTiles)
                {
                    FigurePlacementDto figureOnTile = null;
                    var figures = gamePlayService.GetFiguresOnTiles(GameId, tile);
                    foreach (var i in figures)

                    {
                        figureOnTile = new FigurePlacementDto(i.Value.Owner.Name, i.Key);
                        break;
                    }
                    var tileInfo = new TileInfoDto(tile.PropertiesAsString, tile.Position, figureOnTile, tile.Rotation);

                    gameInfoDto.AddTileInfoOneByOne(tileInfo);
                }
                gameInfoDto.GameState = gamePlay.GameState.ToString();
                gamePlay.Players.ForEach(player => gameInfoDto.AddPlayerOneByOne(new PlayerDto(player.playerId, player.Figures.Count, player.Owner.Name, player.Owner.Points, player.Color)));

                return(gameInfoDto);
            }
            return(new GameInfoDto());
        }
Exemple #2
0
        public IActionResult RunBattle(Guid id)
        {
            bool isBattleFinish = _game.RunBattle(id);

            List <Gladiator>     players        = _game.ShowPlayerInBattle(id);
            List <PlayerInfoDto> playerInfoDtos = new List <PlayerInfoDto>();
            GameInfoDto          gameInfoDto    = new GameInfoDto();


            foreach (var player in players)
            {
                var playerInfoDto = new PlayerInfoDto
                {
                    Name     = player.Name,
                    Pv       = player.Pv,
                    Stamina  = player.Stamina,
                    PlayerId = player.GladiatorId
                };
                playerInfoDtos.Add(playerInfoDto);
            }

            gameInfoDto.Gladiators     = playerInfoDtos;
            gameInfoDto.IsBattleFinish = isBattleFinish;

            if (isBattleFinish)
            {
                gameInfoDto.GladiatorId = players.Single(s => s.Pv > 0).GladiatorId;
            }
            return(Ok(gameInfoDto));
        }
        public async Task <IActionResult> HandleJoinGameRequest([FromBody] GameInfo gameInfo)
        {
            // it is already been authorized by auth filter
            var userApiKey = GetCurrentUserApiKey();

            var user = await _userService.GetUserByApiKeyAsync(userApiKey);

            var dto = new GameInfoDto()
            {
                Hash = gameInfo.Hash,
                User = user
            };

            await _gameService.JoinGameAsync(dto);

            return(Accepted());
        }
Exemple #4
0
        public async Task JoinGameAsync(GameInfoDto game)
        {
            ChannelIdentifier channelIdentifier = _hashService.GenerateChannelIdentifier(game.Hash);

            var channel = new Channel()
            {
                Id     = channelIdentifier.Id,
                Expiry = DateTimeOffset.UtcNow.AddMinutes(45).ToUnixTimeSeconds(),
                Name   = channelIdentifier.Name
            };

            await _channelPersistence.PersistChannelAsync(channel);

            await _channelPersistence.PersistUserInChannelAsync(channel.Id, game.User);

            var joinedGameEvent = new OnJoinedGameEvent()
            {
                ChannelName = channel.Name,
                VoiceUserId = game.User.Discord.UserId
            };

            await _messageBus.PublishAsync(joinedGameEvent);
        }