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()); }
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()); }
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); }