private void OnTurnStart(ActivePlayer player) { var message = new HsGameMessage(HSGameEventTypes.OnTurnStart); var game = Core.Game; if (_isGameJustStarted) { var cardsList = game.Player.OpponentCardList.Where(x => x.Name != "The Coint").Select(x => x.Id).ToList(); cardsList.AddRange(game.Player.PlayerCardList.Select(x => x.Id)); var resultList = cardsList.Distinct(); HSGameDto dto = new HSGameDto { GameId = _gameId.ToString(), Region = Enum.GetName(typeof (Region), game.CurrentRegion), // get from enum GameMode = Enum.GetName(typeof (GameMode), game.CurrentGameMode), // get from enum OpponentClass = game.Opponent.Class, OpponentName = game.Opponent.Name, OpponentRank = game.CurrentGameStats.RankString, PlayerName = game.Player.Name, PlayerClass = game.Player.Class, PlayerHasCoin = game.Player.HasCoin, PlayerCardsIds = resultList }; message.Data = dto; PublishMessage(message); _isGameJustStarted = false; } else { message.Data = null; PublishMessage(message); } }
public void EndGame(HSGameDto gameDto) { MongoRepository <HSGame> gameRepository = new MongoRepository <HSGame>(); var entity = gameRepository.FirstOrDefault(x => x.GameId == gameDto.GameId); if (entity != null) { entity.Won = gameDto.Won; entity.OpponentDeckId = gameDto.OpponentDeckId; entity.OpponentDeckType = gameDto.OpponentDeckType; entity.OpponentDeckMatch = gameDto.OpponentDeckMatch; gameRepository.Update(entity); } }
private void OnGameStart() { _isGameJustStarted = true; var game = Core.Game; var message = new HsGameMessage(HSGameEventTypes.OnGameStart); _gameId = Guid.NewGuid(); HSGameDto dto = new HSGameDto { GameId = _gameId.ToString(), GameMode = Enum.GetName(typeof(GameMode), game.CurrentGameMode), // get from enum Region = Enum.GetName(typeof(Region), game.CurrentRegion), // get from enum PlayerName = game.Player.Name, PlayerClass = game.Player.Class }; message.Data = dto; PublishMessage(message); }
private void UpdateGameInDb(HsGameMessage message) { HSGameDto gameDto = message.Data.ToObject <HSGameDto>(); var gameEntity = _gameRepository.FirstOrDefault(x => x.GameId == gameDto.GameId); gameEntity.Date = DateTime.Now; gameEntity.Region = gameDto.Region; gameEntity.GameMode = gameDto.GameMode; gameEntity.OpponentClass = gameDto.OpponentClass; gameEntity.OpponentName = gameDto.OpponentName; gameEntity.OpponentRank = gameDto.OpponentRank; gameEntity.PlayerClass = gameDto.PlayerClass; gameEntity.PlayerName = gameDto.PlayerName; gameEntity.PlayerRank = gameDto.PlayerRank; gameEntity.OpponentDeckId = gameDto.OpponentDeckId; gameEntity.OpponentDeckType = gameDto.OpponentDeckType; gameEntity.PlayerDeckId = GetPlayerDeckArchetype(message).Item2; gameEntity.PlayerDeckType = GetPlayerDeckArchetype(message).Item1; gameEntity.PlayerHasCoin = gameDto.PlayerHasCoin; _gameRepository.Update(gameEntity); }
private Tuple <string, string> GetPlayerDeckArchetype(HsGameMessage message) { HSGameDto gameDto = message.Data.ToObject <HSGameDto>(); var deckList = _deckRepository.Where(x => x.Class == gameDto.PlayerClass.ToUpper()); int count = 0; string deckArchetype = string.Empty; string deckId = ""; foreach (var deck in deckList) { var ids = deck.Cards.Select(x => x.cardId).ToList(); var result = gameDto.PlayerCardsIds.Intersect(ids).ToList(); if (result.Count() > count) { count = result.Count(); deckArchetype = deck.Type; deckId = deck.Id; } } return(new Tuple <string, string>(deckArchetype, deckId)); }