eva_bead_1/persistance/SnakeLevelLoader.cs

28 lines
1.1 KiB
C#

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<List<StoredSnakeLevel>>(file_content, new JsonSerializerOptions(){PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower})
?? throw new JsonException("Failed to deserialize stored levels");
}
private List<StoredSnakeLevel> _stored_levels;
public ReadOnlyCollection<StoredSnakeLevel> 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);
}
}