public async Task <IGame> StartNewGameAsync(NewGameStarted newGameStarting) { if (newGameStarting == null) { throw new ArgumentNullException(nameof(newGameStarting)); } _logger.LogTrace("GameManager.StartNewGame {newGameStarting}", newGameStarting); if (!_endPlayerManager.CheckUserAgainstId(newGameStarting)) { return(null); // TODO - return some error state? } var newGame = await _gameFactory.SpawnNewGameAsync(newGameStarting).ConfigureAwait(false); if (_games.TryAdd(newGame.GameId, newGame)) { _logger.LogDebug("GameManager.StartNewGame {newGame}", newGame); } else { _logger.LogError("unable to add new game {gameId} {newGame} for {user} on {connectionID}", newGame.GameId, newGame, newGameStarting.User, newGameStarting.ConnectionId); } return(newGame); }
public JoinGame(NewGameStarted newGameStarted, Guid gameId) { if (newGameStarted == null) { throw new ArgumentNullException(nameof(newGameStarted)); } User = newGameStarted.User; ConnectionId = newGameStarted.ConnectionId; PlayerId = newGameStarted.PlayerId; GameId = gameId; }
/* * Method for controller to start new game */ public void NewGame() { playerHasPassed[Color.White] = false; playerHasPassed[Color.Black] = false; turnHolder.Reset(); NewGameStarted?.Invoke(this, new EventArgs()); SetStartBoardPosition(); countHolder.Reset(); CountChanged?.Invoke(this, new CountChangedEventArgs { CountWhite = countHolder.GetPlayerCount(Color.White), CountBlack = countHolder.GetPlayerCount(Color.Black), }); FinishTurnAndMoveOn(); }
public virtual async Task SpawnAsync(NewGameStarted newGameStarting) { if (newGameStarting == null) { throw new ArgumentNullException(nameof(newGameStarting)); } if (_isSpawned) { throw new InvalidOperationException($"GameData {GameId} is already Spawned."); } GameId = Guid.NewGuid(); StartedUtc = DateTime.UtcNow; StartedByUser = newGameStarting.User; CheeseCount = newGameStarting.CheeseCount; Size = newGameStarting.Size; Name = newGameStarting.Name; try { Mode = (GameMode)newGameStarting.Mode; } catch { Mode = GameMode.Bingo; } _isSpawned = true; var callerCultureInfo = new CultureInfo("en-GB"); // TODO persist to setup game culture _allNumbers.Generate(Mode, callerCultureInfo); Logger.LogInformation("Spawning game {gameId} started on {connectionId} with {@newGameStarting}", GameId, newGameStarting.ConnectionId, newGameStarting); var joinGame = new JoinGame(newGameStarting, GameId); await AddPlayerAsync(joinGame).ConfigureAwait(false); await LobbyHubContext.Clients.All.LobbyNewGameHasStarted(this).ConfigureAwait(false); }
public async Task <IGame> SpawnNewGameAsync(NewGameStarted newGameStarting) { if (newGameStarting == null) { throw new ArgumentNullException(nameof(newGameStarting)); } _logger.LogTrace("GameFactory.SpawnNewGame {newGameStarting}", newGameStarting); IGame g; if (newGameStarting.Mode == (int)GameMode.Cheesy) { g = _serviceProvider.GetRequiredService <GamePassive>(); } else { g = _serviceProvider.GetRequiredService <GameActive>(); } await g.SpawnAsync(newGameStarting).ConfigureAwait(false); return(g); }
public override async Task SpawnAsync(NewGameStarted newGameStarting) { await base.SpawnAsync(newGameStarting).ConfigureAwait(false); _gameNumbers = ThreadSafeRandom.Pick(AllNumbers.CountInUse, AllNumbers.CountInUse).ToList(); }
protected virtual void OnNewGameStarted(object source) { NewGameStarted?.Invoke(source); }
public static void OnNewGameStarted(PersonalizedForSpecificPlayerStartGameDataRequest args) { NewGameStarted?.Invoke(null, new OpenNewGameWindowEventArgs { ReceivedData = args }); }