public TerrainRenderer(World world) { map = world.Map; terrainInfo = map.Rules.TerrainInfo as DefaultTerrain; if (terrainInfo == null) { throw new InvalidDataException("TerrainRenderer can only be used with the DefaultTerrain parser"); } tileCache = new DefaultTileCache(terrainInfo); }
bool ITiledTerrainRendererInfo.ValidateTileSprites(ITemplatedTerrainInfo terrainInfo, Action <string> onError) { var missingImages = new HashSet <string>(); var failed = false; Action <uint, string> onMissingImage = (id, f) => { onError("\tTemplate `{0}` references sprite `{1}` that does not exist.".F(id, f)); missingImages.Add(f); failed = true; }; var tileCache = new DefaultTileCache((DefaultTerrain)terrainInfo, onMissingImage); foreach (var t in terrainInfo.Templates) { var templateInfo = (DefaultTerrainTemplateInfo)t.Value; for (var v = 0; v < templateInfo.Images.Length; v++) { if (!missingImages.Contains(templateInfo.Images[v])) { for (var i = 0; i < t.Value.TilesCount; i++) { if (t.Value[i] == null || tileCache.HasTileSprite(new TerrainTile(t.Key, (byte)i), v)) { continue; } onError("\tTemplate `{0}` references frame {1} that does not exist in sprite `{2}`.".F(t.Key, i, templateInfo.Images[v])); failed = true; } } } } return(failed); }