56 lines
1.3 KiB
C#
56 lines
1.3 KiB
C#
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<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);
|
|
}
|
|
}
|
|
}
|