public async Task RestartRoundAfterStart(bool lobbyEnabled) { var(_, server) = await StartConnectedServerClientPair(serverOptions : new ServerContentIntegrationOption { CVarOverrides = { [CCVars.GameMap.Name] = "Maps/saltern.yml" } }); await server.WaitIdleAsync(); var configManager = server.ResolveDependency <IConfigurationManager>(); var entityManager = server.ResolveDependency <IEntityManager>(); var gameTicker = entityManager.EntitySysManager.GetEntitySystem <GameTicker>(); await server.WaitRunTicks(30); GameTick tickBeforeRestart = default; server.Assert(() => { configManager.SetCVar(CCVars.GameLobbyEnabled, lobbyEnabled); Assert.That(gameTicker.RunLevel, Is.EqualTo(GameRunLevel.InRound)); tickBeforeRestart = entityManager.CurrentTick; var command = new NewRoundCommand(); command.Execute(null, string.Empty, Array.Empty <string>()); if (lobbyEnabled) { Assert.That(gameTicker.RunLevel, Is.Not.EqualTo(GameRunLevel.InRound)); } }); await server.WaitIdleAsync(); await server.WaitRunTicks(5); server.Assert(() => { var tickAfterRestart = entityManager.CurrentTick; Assert.That(tickBeforeRestart < tickAfterRestart); }); await server.WaitRunTicks(60); }
public async Task RestartRoundAfterStart(bool lobbyEnabled) { var server = StartServer(); await server.WaitIdleAsync(); var gameTicker = server.ResolveDependency <IGameTicker>(); var configManager = server.ResolveDependency <IConfigurationManager>(); var entityManager = server.ResolveDependency <IEntityManager>(); await server.WaitRunTicks(30); GameTick tickBeforeRestart = default; server.Assert(() => { configManager.SetCVar(CCVars.GameLobbyEnabled, lobbyEnabled); Assert.That(gameTicker.RunLevel, Is.EqualTo(GameRunLevel.InRound)); tickBeforeRestart = entityManager.CurrentTick; var command = new NewRoundCommand(); command.Execute(null, null, new string[] { }); if (lobbyEnabled) { Assert.That(gameTicker.RunLevel, Is.Not.EqualTo(GameRunLevel.InRound)); } }); await server.WaitIdleAsync(); await server.WaitRunTicks(5); server.Assert(() => { var tickAfterRestart = entityManager.CurrentTick; Assert.That(tickBeforeRestart < tickAfterRestart); }); await server.WaitRunTicks(60); }
/// <summary> /// Transitates to the next round /// </summary> private void NextRound() { bool accepted; int commitedAt; RaftCommand command; if (this.State != State.LEADER) { return; } if (!this.HasGameStarted) { return; } // Console.WriteLine($"{DateTime.Now.ToString("yyyyMMddHHmmssfff")} ON NextRound {this.Address} in State {this.State}"); if (this.StateMachine.HasGameEnded()) { this.HasGameStarted = false; Console.WriteLine(" GAME HAS ENDED"); Console.WriteLine(this.StateMachine.Stage.GetPlayers().Count > 0); command = new EndGameCommand(); this.OnCommand(command); // TODO: handle clients and server lists // TODO: Generate Log Entry and multicast AppendEntries return; } command = new NewRoundCommand() { Name = "New Round" }; this.OnCommand(command); }