示例#1
0
        /**
         * Metóda, ktorú volá "timer" každých (_MillisecondInSecond / _FPS) milisekund.
         * Zabezpečuje aktualizaciu hernej logiky.
         */
        private async Task TickAsync(Object source, ElapsedEventArgs e)
        {
            OnTick(new GameTickEventArgs {
                FpsTickNum = currentFPS
            });
            if (GameState == GameState.COUNTDOWN)
            {
                await Map.Update(currentFPS);

                if (PlayersAllive <= 1)
                {
                    GameState = GameState.GAMEOVER;
                    return;
                }
                if (FramesToShrink <= 0)
                {
                    GameState = GameState.SHRINKING;
                }
                else
                {
                    if (CountdownTimerRunning)
                    {
                        --FramesToShrink;
                    }
                }
            }
            else if (GameState == GameState.SHRINKING)
            {
                await Map.Update(currentFPS);

                if (PlayersAllive == 1)
                {
                    GameState = GameState.GAMEOVER;
                    return;
                }
                if (Map.X > 0)
                {
                    if (ShrinkingAllowed)
                    {
                        Map.Shrink();
                    }
                }
                else
                {
                    GameState = GameState.GAMEOVER;
                }
            }
            else if (GameState == GameState.LOBBY)
            {
                if (GameMode == GameMode.GUIDED)
                {
                    // samospustenie
                    if (StartTimerRunning)
                    {
                        --FramesToStart;
                        if (FramesToStart <= 0)
                        {
                            StartTimerRunning = false;
                            Start();
                        }
                    }
                }
                else
                {
                    if (PlayersInLobby.Count > 1)
                    {
                        if (!StartTimerRunning && !StoppedStartTimer)
                        {
                            StartTimerRunning = true;
                            if (PlayersInLobby.Count > 2)
                            {
                                for (int i = 0; i < PlayersInLobby.Count - 2; i++)
                                {
                                    FramesToStart /= 2;
                                }
                            }
                        }
                        else
                        {
                            // samospustenie
                            if (!StoppedStartTimer)
                            {
                                --FramesToStart;
                            }
                            if (FramesToStart <= 0)
                            {
                                StartTimerRunning = false;
                                Start();
                            }
                        }
                    }
                    else if (PlayersInLobby.Count == 1)
                    {
                        if (StartTimerRunning)
                        {
                            StartTimerRunning = false;
                        }
                        if (DeleteTimerRunning)
                        {
                            DeleteTimerRunning = false;
                        }
                    }
                    else
                    {
                        if (!DeleteTimerRunning)
                        {
                            DeleteTimerRunning = true;
                            deleteFrames       = 10 * _FPS;
                        }
                        else
                        {
                            --deleteFrames;
                            if (deleteFrames <= 0)
                            {
                                Map = null;
                                Dispose();
                            }
                        }
                    }
                }
            }
            else if (GameState == GameState.GAMEOVER)
            {
                await Map.Update(currentFPS);

                if (GameoverTimerRunning)
                {
                    --FramesToScoreboard;
                }
                if (FramesToScoreboard <= 0)
                {
                    foreach (var player in PlayersInGame)
                    {
                        if (player.Alive)
                        {
                            Winner = player;
                            break;
                        }
                    }
                    GameState = GameState.SCOREBOARD;
                }
            }
            else if (GameState == GameState.SCOREBOARD)
            {
                if (ScoreboardTimerRunning)
                {
                    --FramesToLobby;
                }
                if (FramesToLobby <= 0)
                {
                    foreach (var pl in PlayersInGame)
                    {
                        pl.InGame = false;
                        pl.Freeze();
                    }
                    Creator.InGame = false;
                    PlayersInGame.Clear();
                    RestartTimers();
                    GameState = GameState.LOBBY;
                }
            }
            currentFPS = (currentFPS % 60) + 1;
            ++FPSElapsed;
        }
 public void ClearPlayersInGame()
 {
     PlayersInGame.Clear();
 }