public TileSet(IReadOnlyFileSystem fileSystem, string filepath) { var yaml = MiniYaml.DictFromStream(fileSystem.Open(filepath), filepath); // General info FieldLoader.Load(this, yaml["General"]); // TerrainTypes TerrainInfo = yaml["Terrain"].ToDictionary().Values .Select(y => new TerrainTypeInfo(y)) .OrderBy(tt => tt.Type) .ToArray(); if (TerrainInfo.Length >= byte.MaxValue) { throw new InvalidDataException("Too many terrain types."); } for (byte i = 0; i < TerrainInfo.Length; i++) { var tt = TerrainInfo[i].Type; if (terrainIndexByType.ContainsKey(tt)) { throw new InvalidDataException("Duplicate terrain type '{0}' in '{1}'.".F(tt, filepath)); } terrainIndexByType.Add(tt, i); } defaultWalkableTerrainIndex = GetTerrainIndex("Clear"); // Templates Templates = yaml["Templates"].ToDictionary().Values .Select(y => new TerrainTemplateInfo(this, y)).ToDictionary(t => t.Id).AsReadOnly(); }