using System.Collections.ObjectModel; using System.Text.Json; using Snake.Model; namespace Snake.Persistance; public class SnakeLevelLoader{ public readonly string SaveFileName; public SnakeLevelLoader(string saveFileName){ SaveFileName = saveFileName; if(!File.Exists(SaveFileName)){ throw new FileNotFoundException("Save file not found", SaveFileName); } string file_content = File.ReadAllText(SaveFileName); _stored_levels = JsonSerializer.Deserialize>(file_content, new JsonSerializerOptions(){PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower}) ?? throw new JsonException("Failed to deserialize stored levels"); } private List _stored_levels; public ReadOnlyCollection StoredLevels => _stored_levels.AsReadOnly(); public SnakeLevel LoadLevel(StoredSnakeLevel level){ return new SnakeLevel(level.Size, level.Obstacles.Select(a => new Point(a[0], a[1])), level.SnakeStartLength, level.NewEggRound, level.EggLimit); } }