コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        /// <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);
        }