using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Reflection; using JsonKnownTypes; //using JM.LinqFaster; using MessagePack; using MessagePack.Formatters; using Newtonsoft.Json; using Unity.Mathematics; using static Unity.Mathematics.math; [Union(0, typeof(SimpleCommodity)), Union(1, typeof(CompoundCommodity)), Union(2, typeof(EquippableItem)), JsonObject(MemberSerialization.OptIn), JsonConverter(typeof(JsonKnownTypesConverter))] public abstract class ItemInstance { [JsonProperty("data"), Key(0)] public Guid Data; [JsonProperty("rotation"), Key(1)] public int Rotation; } [Union(0, typeof(CompoundCommodity)), Union(1, typeof(EquippableItem)), JsonObject(MemberSerialization.OptIn), JsonConverter(typeof(JsonKnownTypesConverter))] public abstract class CraftedItemInstance : ItemInstance { [JsonProperty("quality"), Key(2)] public float Quality; [JsonProperty("ingredients"), Key(3)] public List Ingredients = new List(); [JsonProperty("blueprint"), Key(4)] public Guid Blueprint; [JsonProperty("name"), Key(5)] public string Name; [JsonProperty("sourceEntity"), Key(6)] public Guid SourceEntity; } [MessagePackObject, JsonObject(MemberSerialization.OptIn)] public class CompoundCommodity : CraftedItemInstance { } [MessagePackObject, JsonObject(MemberSerialization.OptIn)] public class SimpleCommodity : ItemInstance { [JsonProperty("quantity"), Key(2)] public int Quantity; } [MessagePackObject, JsonObject(MemberSerialization.OptIn)] public class EquippableItem : CraftedItemInstance { [JsonProperty("durability"), Key(7)] public float Durability; }