public void AddPlayer(Player player) { if (Players.Contains(player)) { return; } Players.Add(player); PlayerDeaths.Add(player, 0); PlayerKills.Add(player, 0); player.HealthManager.PlayerKilled += HealthManagerOnPlayerKilled; }
public void RemovePlayer(Player player) { if (!Players.Contains(player)) { return; } Players.Remove(player); PlayerDeaths.Remove(player); PlayerKills.Remove(player); player.HealthManager.PlayerKilled -= HealthManagerOnPlayerKilled; }
private void Tick(object state) { if (Players.Count < MinPlayers && State == GameState.WaitingToStart) { Time.Restart(); } else if (Players.Count >= MinPlayers && State == GameState.WaitingToStart && (Players.Count >= MaxPlayers || Time.ElapsedMilliseconds >= 10000)) { Time.Restart(); State = GameState.Started; Level.BroadcastTextMessage(string.Format("Game {0} started.", Name)); } else if (State == GameState.Started && Time.ElapsedMilliseconds >= 30000) { Time.Restart(); State = GameState.Finshed; Level.BroadcastTextMessage(string.Format("Game {0} finished.", Name)); if (Players.Count > 0) { var winner = PlayerKills.OrderBy(pair => pair.Value).First(); Level.BroadcastTextMessage(string.Format("Player {0} won game {2} with {1} kills.", winner.Key.Username, winner.Value, Name)); foreach (var player in Players.ToArray()) { GameManager.Join(player, "Default"); } } } else if (State == GameState.Finshed && Time.ElapsedMilliseconds >= 10000) { Time.Restart(); State = GameState.WaitingToStart; Level.BroadcastTextMessage(string.Format("New game {0} waiting to start.", Name)); } }