Improvements to save and loading

Improvements to Chinthe animation logic
Fix broken Godot Tool system and just use a more manual approach to setting map nodes
Remove ItemDatabase from individual room scenes
This commit is contained in:
2025-10-24 01:33:18 -07:00
parent f5360adbf1
commit 286c221530
93 changed files with 497 additions and 678 deletions

View File

@@ -12,7 +12,6 @@ namespace Zennysoft.Game.Implementation;
public class SaveFileManager : ISaveFileManager
{
private readonly IFileSystem _fileSystem;
private readonly JsonSerializerOptions _jsonOptions;
private string _defaultSaveLocation;
public const string DEFAULT_SAVE_FILE_NAME = "game.json";
@@ -23,27 +22,17 @@ public class SaveFileManager : ISaveFileManager
GodotSerialization.Setup();
Serializer.AddConverter(new Texture2DConverter());
var upgradeDependencies = new Blackboard();
_jsonOptions = new JsonSerializerOptions
{
Converters = {
new SerializableTypeConverter(upgradeDependencies)
},
WriteIndented = true
};
}
public Task<object?> ReadFromFile(params IJsonTypeInfoResolver?[] resolvers)
public Task<T?> ReadFromFile<T>(params IJsonTypeInfoResolver?[] resolvers)
{
if (!_fileSystem.File.Exists(_defaultSaveLocation))
throw new FileNotFoundException();
return ReadFromFile(_defaultSaveLocation, resolvers);
return ReadFromFile<T>(_defaultSaveLocation, resolvers);
}
public async Task<object?> ReadFromFile(string filePath, params IJsonTypeInfoResolver?[] resolvers)
public async Task<T?> ReadFromFile<T>(string filePath, params IJsonTypeInfoResolver?[] resolvers)
{
if (!_fileSystem.File.Exists(filePath))
throw new FileNotFoundException();
@@ -51,8 +40,17 @@ public class SaveFileManager : ISaveFileManager
var json = await _fileSystem.File.ReadAllTextAsync(filePath);
var resolver = new SerializableTypeResolver();
_jsonOptions.TypeInfoResolver = JsonTypeInfoResolver.Combine([resolver, .. resolvers]);
return JsonSerializer.Deserialize<object?>(json, _jsonOptions);
var upgradeDependencies = new Blackboard();
var jsonOptions = new JsonSerializerOptions
{
Converters = {
new SerializableTypeConverter(upgradeDependencies)
},
WriteIndented = true
};
jsonOptions.TypeInfoResolver = JsonTypeInfoResolver.Combine([resolver, .. resolvers]);
return JsonSerializer.Deserialize<T?>(json, jsonOptions);
}
public Task WriteToFile<T>(T gameData, params IJsonTypeInfoResolver?[] resolvers)
@@ -63,8 +61,17 @@ public class SaveFileManager : ISaveFileManager
public async Task WriteToFile<T>(T gameData, string filePath, params IJsonTypeInfoResolver?[] resolvers)
{
var resolver = new SerializableTypeResolver();
_jsonOptions.TypeInfoResolver = JsonTypeInfoResolver.Combine([resolver, .. resolvers]);
var json = JsonSerializer.Serialize(gameData, _jsonOptions);
var upgradeDependencies = new Blackboard();
var jsonOptions = new JsonSerializerOptions
{
Converters = {
new SerializableTypeConverter(upgradeDependencies)
},
WriteIndented = true
};
jsonOptions.TypeInfoResolver = JsonTypeInfoResolver.Combine([resolver, .. resolvers]);
var json = JsonSerializer.Serialize(gameData, jsonOptions);
await _fileSystem.File.WriteAllTextAsync(filePath, json);
}
}