/// <summary> /// Creates a new ClientConnection instance using a socket, /// additionally creating a player entity for the client in /// the specified level. /// </summary> /// <param name="socket">Socket connected to the client.</param> /// <param name="level">Level to create a player in.</param> public ClientConnection(TcpClient socket, Level level) : base(socket) { _socket = socket; Level = level; _visibility = level .Select(x => new RoomVisibility(x)) .ToArray(); Player = Entity.Create("player"); Player.GetComponent<PlayerControl>().Client = this; var rooms = level .Where(x => x.Any(y => y.State == TileState.Floor)) .ToArray(); var room = rooms[(int)(DateTime.Now.Ticks % rooms.Length)]; var tiles = room .Where(x => x.State == TileState.Floor) .ToArray(); Player.Place(tiles[Tools.Random.Next(tiles.Length)]); }