canto/Assets/Scripts/SOAP/Collection/DataSerializer.cs

55 lines
1.3 KiB
C#

using System;
using KitsuneCafe.ItemSystem;
using KitsuneCafe.Sys;
using MessagePack;
using MessagePack.Resolvers;
using UnityEngine;
namespace KitsuneCafe.SOAP
{
[MessagePackObject]
public struct SaveData
{
[Key(0)]
public Inventory Inventory;
[Key(1)]
public Blackboard Blackboard;
public SaveData(Inventory inventory, Blackboard blackboard)
{
Inventory = inventory;
Blackboard = blackboard;
}
}
[CreateAssetMenu(menuName = KitsuneCafeMenu.Soap + "DataSerializer")]
public partial class DataSerializer : ScriptableObject
{
[SerializeField]
private Inventory inventory;
[SerializeField]
private Blackboard blackboard;
private readonly Lazy<MessagePackSerializerOptions> options = new(() => MessagePackSerializer.DefaultOptions.WithResolver(
CompositeResolver.Create(
StandardResolver.Instance,
ItemSystemResolver.Instance
)
));
public byte[] Serialize()
{
blackboard.Write("test", 1);
return MessagePackSerializer.Serialize(new SaveData(inventory, blackboard), options.Value);
}
public void Deserialize(byte[] bytes)
{
var data = MessagePackSerializer.Deserialize<SaveData>(bytes, options.Value);
inventory.Load(data.Inventory);
blackboard.Load(data.Blackboard);
}
}
}