예제 #1
0
        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();
        }