A game about forced loneliness, made by TACStudios
1using System; 2using UnityEngine; 3 4namespace Unity.VisualScripting 5{ 6 public abstract class LudiqBehaviour : MonoBehaviour, ISerializationCallbackReceiver 7 { 8 [SerializeField, DoNotSerialize] // Serialize with Unity, but not with FullSerializer. 9 protected SerializationData _data; 10 11 void ISerializationCallbackReceiver.OnBeforeSerialize() 12 { 13 if (Serialization.isCustomSerializing) 14 { 15 return; 16 } 17 18 Serialization.isUnitySerializing = true; 19 20 try 21 { 22 OnBeforeSerialize(); 23 _data = this.Serialize(true); 24 OnAfterSerialize(); 25 } 26 catch (Exception ex) 27 { 28 // Don't abort the whole serialization thread because this one object failed 29 Debug.LogError($"Failed to serialize behaviour.\n{ex}", this); 30 } 31 32 Serialization.isUnitySerializing = false; 33 } 34 35 void ISerializationCallbackReceiver.OnAfterDeserialize() 36 { 37 if (Serialization.isCustomSerializing) 38 { 39 return; 40 } 41 42 Serialization.isUnitySerializing = true; 43 44 try 45 { 46 object @this = this; 47 OnBeforeDeserialize(); 48 _data.DeserializeInto(ref @this, true); 49 OnAfterDeserialize(); 50 _data.Clear(); 51 } 52 catch (Exception ex) 53 { 54 // Don't abort the whole deserialization thread because this one object failed 55 Debug.LogError($"Failed to deserialize behaviour.\n{ex}", this); 56 } 57 58 Serialization.isUnitySerializing = false; 59 } 60 61 protected virtual void OnBeforeSerialize() { } 62 63 protected virtual void OnAfterSerialize() { } 64 65 protected virtual void OnBeforeDeserialize() { } 66 67 protected virtual void OnAfterDeserialize() { } 68 69 protected virtual void ShowData() 70 { 71 var data = this.Serialize(true); 72 data.ShowString(ToString()); 73 data.Clear(); 74 } 75 76 public override string ToString() 77 { 78 return this.ToSafeString(); 79 } 80 } 81}