// GAME-RELATED METHODS /// <summary> /// Creates a new instance of a game, sends it to all clients and start the game /// </summary> public void StartGame() { Accepting = false; SendToAll(Network.MakeServerMessage(MessageType.GameState, GameState.Starting)); CurrentGameState = GameState.Starting; clientMessages = new Queue<string[]>(); lock (ClientConnections) { Game = new WildmenGame(); Game.IsServer = true; Game.MakeMap(MapWidth, MapHeight, ClientConnections.Count(), UnitCap); if (!Game.Map.Valid) { SendMessage("Unable to create map with given parameters."); SendToAll(Network.MakeServerMessage(MessageType.GameState, GameState.Lobby)); CurrentGameState = GameState.Lobby; Accepting = true; return; } Game.Map.LoadContent(); Game.SendData = SendToAll; Game.ReceiveData = GetClientMessage; for (int i = 0; i < ClientConnections.Count(); i++) { ClientConnection c = ClientConnections[i]; c.IngamePlayerId = i; Player p = new Player(i, Game, c.Name); p.Initialize(); Game.PlacePlayer(i, p); } string savegame = Game.SaveGame().TrimStart(':'); for (int i = 0; i < ClientConnections.Count(); i++) { ClientConnection c = ClientConnections[i]; Player p = Game.Players[i]; c.StartSend(Network.MakeServerMessage(MessageType.GameTransfer, savegame)); c.StartSend(Network.MakeServerMessage(MessageType.PlayerAssign, i)); } SendToAll(Network.MakeServerMessage(MessageType.GameState, GameState.Started)); CurrentGameState = GameState.Started; } SendMessage("Game started."); }