using System; using KitsuneCafe.ItemSystem; using KitsuneCafe.SOAP; using KitsuneCafe.Sys; using MessagePack; using MessagePack.Resolvers; using UnityEngine; namespace KitsuneCafe.Serialization { [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 + "Data Serializer")] public partial class DataSerializer : ScriptableObject { [SerializeField] private Inventory inventory; [SerializeField] private Blackboard blackboard; private readonly Lazy 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(bytes, options.Value); inventory.Load(data.Inventory); blackboard.Load(data.Blackboard); } } }