/// <summary> /// Parser creates a container of Map entities /// </summary> /// <param name="mapStrings"></param> /// <param name="keymap"></param> /// <param name="platforms"></param> /// <returns></returns> public static EntityContainer Parser(List <string> mapStrings, Dictionary <string, string> keymap, List <string> platforms) { EntityContainer returnContainer = new EntityContainer(); List <string> map = ASCIIParser.RemoveEmptyLines(mapStrings); int row = 1; int col = 0; float tileHeight = 1.0f / map.Count; foreach (string line in map) { float tileWidth = 1.0f / line.Length; foreach (char key in line) { if (keymap.ContainsKey(key.ToString())) { returnContainer.AddStationaryEntity( new StationaryShape(new Vec2F(col * tileWidth, 1.0f - row * tileHeight), new Vec2F(tileWidth, tileHeight)), new Image(keymap[key.ToString()])); } col++; } row++; col = 0; } return(returnContainer); }
public static Map Parser(StreamReader sr) { string headerName = ""; List <string> keyString = new List <string>(); string metaDataString = ""; List <string> mapStrings = new List <string>(); string pattern = @"\s*##(?<header>("; foreach (var header in MapParser.parserHeaders) { pattern += header + "|"; } pattern = pattern.Remove(pattern.Length - 1); pattern += @"))##\s*$"; MapParser.regex = new Regex(pattern); string line = sr.ReadLine(); while (!sr.EndOfStream) { Match match = MapParser.regex.Match(line); if (match.Success) { headerName = match.Groups["header"].Value; } else { switch (headerName) { case "Map": mapStrings.Add(line); break; case "KeyMap": keyString.Add(line); break; case "MetaData": metaDataString += line; break; default: break; } } line = sr.ReadLine(); } sr.Close(); Map map = new Map(metaDataString); Dictionary <string, string> keyMap = KeyParser.ParseKey(keyString); map.AddEntityContainer(ASCIIParser.Parser(mapStrings, keyMap, map.Platforms)); return(map); }