Fix texture stuff

This commit is contained in:
2025-03-09 12:24:30 -07:00
parent b93630756c
commit d8c5bc8f78
112 changed files with 671 additions and 355 deletions

View File

@@ -0,0 +1,31 @@
using System.Collections.Immutable;
using System.Text.Json.Serialization.Metadata;
using Zennysoft.Game.Abstractions;
namespace Zennysoft.Ma.Adapter;
public interface IMaSaveFileManager<T>
{
Task Save(T gameData);
Task<T?> Load();
}
public sealed class MaSaveFileManager<T> : IMaSaveFileManager<T>
{
private readonly ISaveFileManager<T> _saveFileManager;
private ImmutableList<IJsonTypeInfoResolver> _converters;
public MaSaveFileManager(ISaveFileManager<T> saveFileManager)
{
_saveFileManager = saveFileManager;
_converters = [WeaponTagEnumContext.Default, ItemTagEnumContext.Default, ElementTypeEnumContext.Default, AccessoryTagEnumContext.Default, ThrowableItemTagEnumContext.Default, UsableItemTagEnumContext.Default, BoxItemTagEnumContext.Default];
}
public async Task Save(T gameData)
{
await _saveFileManager.WriteToFile(gameData, [.. _converters]);
}
public async Task<T?> Load() => await _saveFileManager.ReadFromFile([.. _converters]);
}

View File

@@ -1,73 +0,0 @@
using Chickensoft.Collections;
using Chickensoft.Serialization.Godot;
using Chickensoft.Serialization;
using Godot;
using System.IO.Abstractions;
using System.Text.Json;
using System.Text.Json.Serialization.Metadata;
using Zennysoft.Game.Abstractions;
namespace Zennysoft.Ma.Godot.Adapter;
public class SaveFileManager<T> : ISaveFileManager<T>
{
private readonly IFileSystem _fileSystem;
private JsonSerializerOptions _jsonOptions;
private string _defaultSaveLocation;
public const string DEFAULT_SAVE_FILE_NAME = "game.json";
public SaveFileManager(IFileSystem fileSystem)
{
_fileSystem = fileSystem;
_defaultSaveLocation = _fileSystem.Path.Join(OS.GetUserDataDir(), DEFAULT_SAVE_FILE_NAME);
var resolver = new SerializableTypeResolver();
GodotSerialization.Setup();
Serializer.AddConverter(new Texture2DConverter());
var upgradeDependencies = new Blackboard();
_jsonOptions = new JsonSerializerOptions
{
Converters = {
new SerializableTypeConverter(upgradeDependencies)
},
TypeInfoResolver = JsonTypeInfoResolver.Combine(resolver, WeaponTagEnumContext.Default, ItemTagEnumContext.Default, ElementTypeEnumContext.Default, AccessoryTagEnumContext.Default, ThrowableItemTagEnumContext.Default, UsableItemTagEnumContext.Default, BoxItemTagEnumContext.Default),
WriteIndented = true
};
}
public Task<T?> ReadFromFile()
{
if (!_fileSystem.File.Exists(_defaultSaveLocation))
throw new FileNotFoundException();
return ReadFromFile(_defaultSaveLocation);
}
public async Task<T?> ReadFromFile(string filePath)
{
if (!_fileSystem.File.Exists(filePath))
throw new FileNotFoundException();
var json = await _fileSystem.File.ReadAllTextAsync(filePath);
return JsonSerializer.Deserialize<T?>(json, _jsonOptions);
}
public Task WriteToFile(T gameData)
{
return WriteToFile(gameData, _defaultSaveLocation, _jsonOptions);
}
public Task WriteToFile(T gameData, string filePath)
{
return WriteToFile(gameData, filePath, _jsonOptions);
}
public async Task WriteToFile(T gameData, string filePath, JsonSerializerOptions jsonOptions)
{
var json = JsonSerializer.Serialize(gameData, jsonOptions);
await _fileSystem.File.WriteAllTextAsync(filePath, json);
}
}