using UnityEngine; namespace MeadowGames.UINodeConnect4.UICSerialization { /// /// Class containing methods to help on the serialization of a Port to JSON /// public static class PortSerializer { public static string ToJSON(Port port) { SerializablePort serializablePort = new SerializablePort(port); SerializationEvents.OnPortSerialize.Invoke(serializablePort); return JsonUtility.ToJson(serializablePort); } public static void FromJSON(Port port, string jsonString) { SerializablePort serializablePort = JsonUtility.FromJson(jsonString); SerializationEvents.OnPortSerialize.Invoke(serializablePort); serializablePort.FromSerializable(port); } public static Port FromJSONInstantiate(string jsonString, Transform parent, DeserializationTemplates deserializationTemplates) { SerializablePort serializablePort = JsonUtility.FromJson(jsonString); return FromSerializableInstantiate(serializablePort, parent, deserializationTemplates); } public static Port FromSerializableInstantiate(SerializablePort serializablePort, Transform parent, DeserializationTemplates deserializationTemplates) { Port port = null; if (serializablePort.polarity == Port.PolarityType._in) port = deserializationTemplates?.portInTemplates.Find(serializablePort.id); if (serializablePort.polarity == Port.PolarityType._out) port = deserializationTemplates?.portOutTemplates.Find(serializablePort.id); if (serializablePort.polarity == Port.PolarityType._all) port = deserializationTemplates?.portAllTemplates.Find(serializablePort.id); if (port) { port = MonoBehaviour.Instantiate(port, Vector3.zero, Quaternion.identity, parent); } else { Debug.Log("No template available"); return null; } serializablePort.FromSerializable(port); SerializationEvents.OnPortDeserialize.Invoke(port); return port; } } }