private Level ParseLevel(CsvLineProvider lineProvider) { var level = new Level(); ConsumeTagLine(lineProvider, "Level"); ConsumeTagCell(lineProvider, "ShapeCount"); level.ShapeCount = lineProvider.Cells.CurrentCellAsInt(); lineProvider.MoveToNextLine(); ConsumeTagLine(lineProvider, "TileColors"); level.TileColors = ParseIntArray(lineProvider); ConsumeTagLine(lineProvider, "ShapeMasks"); level.ShapeMasks = ParseIntArray(lineProvider); ConsumeTagLine(lineProvider, "ShapeMoves"); for (int i = 0; i < level.ShapeCount; i++) { lineProvider.MoveToNextLine(); } return(level); }
private void AssertCurrentCellHasTag(CsvLineProvider lineProvider, string tag) { if (lineProvider.Cells.CurrentCell != MakeTagString(tag)) { throw new Exception("Unexpected tag " + tag); } }
public LevelTemplate[] ReadLevelTemplates(string filename) { var fileLines = File.ReadAllLines(filename); var lineProvider = new CsvLineProvider(fileLines); var levels = new List <LevelTemplate>(); lineProvider.MoveToNextLine(); while (lineProvider.HasLine) { var levelData = ParseLevel(lineProvider); var levelTemplate = ConvertLevelDataToLevelTemplate(levelData); levels.Add(levelTemplate); } return(levels.ToArray()); }
private int[][] ParseIntArray(CsvLineProvider lineProvider) { var lines = new List <int[]>(); while (lineProvider.HasLine && !lineProvider.Cells.CurrentCellIsTag()) { var cells = new List <int>(); while (lineProvider.Cells.HasCell && lineProvider.Cells.CurrentCell != "") { cells.Add(lineProvider.Cells.CurrentCellAsInt()); lineProvider.Cells.MoveToNextCell(); } lines.Add(cells.ToArray()); lineProvider.MoveToNextLine(); } return(lines.ToArray()); }
private void ConsumeTagLine(CsvLineProvider lineProvider, string tag) { AssertCurrentCellHasTag(lineProvider, tag); lineProvider.MoveToNextLine(); }