eva_bead_1/persistance/SnakeLevelLoader.cs
2024-10-23 22:11:14 +02:00

37 lines
1.3 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);
}
}
public async Task ReadAllDataAsync()
{
string file_content = await File.ReadAllTextAsync(SaveFileName);
_stored_levels = JsonSerializer.Deserialize<List<StoredSnakeLevel>>(file_content, new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower })
?? throw new JsonException("Failed to deserialize stored levels");
await Task.Delay(2000);
}
private List<StoredSnakeLevel>? _stored_levels;
public ReadOnlyCollection<StoredSnakeLevel> StoredLevels => _stored_levels?.AsReadOnly()
?? throw new InvalidOperationException("Can not query stored levels before loading the data");
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);
}
}