private static void PopulateGrid(int rows, int cols, IGrid <IInteractable, IPlayer> grid) { for (int row = 0; row < rows; row++) { string currentRow = input.ReadLine(); for (int col = 0; col < cols; col++) { char currentElement = currentRow[col]; if (currentElement == '-') { grid.Add(default(IInteractable), row, col); } else if (players.ContainsKey(currentElement)) { grid.Add(players[currentElement], row, col); } else if (currentElement == '*') { // TO DO } else { Type vegetableType = Assembly.GetExecutingAssembly().GetTypes() .Where(t => !t.IsAbstract) .Where(t => !t.IsInterface) .Where(t => typeof(IVegetable).IsAssignableFrom(t)) .FirstOrDefault(t => t.Name[0] == currentElement); IInteractable vegetable = (IInteractable)Activator.CreateInstance(vegetableType); grid.Add(vegetable, row, col); } } } }
static public void Add <T>(this IGrid <List <T> > item, VectorI2 index, T value) { item.Add(index.x, index.y, value); }