private Schotten2Game Complete(Schotten2Game game, GameState state, int handIndex) { game.State = _engine.CompleteTurn(game.State, handIndex); game.State.CurrentPlayerId = game.State.IsAttackersTurn ? game.AttackerId : game.DefenderId; _storage.UpdateGame(game); if (game.State.LastEvent != GameEvent.PlayCard) { _storage.SaveLog(game.MatchId, state, game.State.LastEvent, game.State.CurrentPlayerId, game.State.LastSection, handIndex); } return(game); }
private void SendState(Schotten2Game game) { Clients.User(game.AttackerId).UpdateState(_service.MapResponse(game, game.AttackerId)); Clients.User(game.DefenderId).UpdateState(_service.MapResponse(game, game.DefenderId)); }
public Schotten2Response MapResponse(Schotten2Game game, string playerId) { var isAttacker = playerId == game.AttackerId; var isDefender = playerId == game.DefenderId; var state = game.State; var isCurrentPlayer = playerId == game.State.CurrentPlayerId; var handCards = new List <Card>(); if (isAttacker) { handCards = state.AttackerCards; } else if (isDefender) { handCards = state.DefenderCards; } var OpponentCardsCount = 0; if (isAttacker) { OpponentCardsCount = state.DefenderCards.Count; } else if (isDefender) { OpponentCardsCount = state.AttackerCards.Count; } var gameOver = ""; if (!string.IsNullOrEmpty(game.WinnerId)) { if (isAttacker || isDefender) { gameOver = playerId == game.WinnerId ? "Win" : "Loss"; } else { gameOver = "GameOver"; } } var model = new Schotten2Response() { IsAttacker = isAttacker, IsCurrentPlayer = isCurrentPlayer, EnablePreparation = isCurrentPlayer && state.EnablePreparation, NewCards = state.NewCards, OilCount = state.OilCount, Sections = state.Sections, HandCards = handCards, OpponentCardsCount = OpponentCardsCount, SiegeCardsCount = state.SiegeCards.Count, DiscardCards = state.DiscardCards, LastPlayer = state.LastPlayer, LastEvent = state.LastEvent.ToString("F"), LastSection = state.LastSection, GameOver = gameOver, }; return(model); }