/** * 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(); }