28 lines
1.1 KiB
C#
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);
|
|
}
|
|
} |