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}