using System;
using UnityEngine;
namespace Unity.VisualScripting
{
public abstract class LudiqBehaviour : MonoBehaviour, ISerializationCallbackReceiver
{
[SerializeField, DoNotSerialize] // Serialize with Unity, but not with FullSerializer.
protected SerializationData _data;
void ISerializationCallbackReceiver.OnBeforeSerialize()
{
if (Serialization.isCustomSerializing)
{
return;
}
Serialization.isUnitySerializing = true;
try
{
OnBeforeSerialize();
_data = this.Serialize(true);
OnAfterSerialize();
}
catch (Exception ex)
{
// Don't abort the whole serialization thread because this one object failed
Debug.LogError($"Failed to serialize behaviour.\n{ex}", this);
}
Serialization.isUnitySerializing = false;
}
void ISerializationCallbackReceiver.OnAfterDeserialize()
{
if (Serialization.isCustomSerializing)
{
return;
}
Serialization.isUnitySerializing = true;
try
{
object @this = this;
OnBeforeDeserialize();
_data.DeserializeInto(ref @this, true);
OnAfterDeserialize();
_data.Clear();
}
catch (Exception ex)
{
// Don't abort the whole deserialization thread because this one object failed
Debug.LogError($"Failed to deserialize behaviour.\n{ex}", this);
}
Serialization.isUnitySerializing = false;
}
protected virtual void OnBeforeSerialize() { }
protected virtual void OnAfterSerialize() { }
protected virtual void OnBeforeDeserialize() { }
protected virtual void OnAfterDeserialize() { }
protected virtual void ShowData()
{
var data = this.Serialize(true);
data.ShowString(ToString());
data.Clear();
}
public override string ToString()
{
return this.ToSafeString();
}
}
}