using System;
using System.Linq;
using UnityEditor;
using UnityEngine;
namespace Unity.VisualScripting
{
public sealed class GraphPointerData
{
#if UNITY_6000_4_OR_NEWER
[Serialize]
private EntityId rootObjectInstanceID;
#else
[Serialize]
private int rootObjectInstanceID;
#endif
[Serialize]
private Guid[] parentElementGuids;
private GraphPointerData(GraphPointer pointer)
{
#if UNITY_6000_4_OR_NEWER
rootObjectInstanceID = pointer.rootObject.GetEntityId();
#else
rootObjectInstanceID = pointer.rootObject.GetInstanceID();
#endif
parentElementGuids = pointer.parentElementGuids.ToArray();
}
public static GraphPointerData FromPointer(GraphPointer pointer)
{
if (pointer == null || !pointer.isValid)
{
return null;
}
return new GraphPointerData(pointer);
}
public GraphReference ToReference(bool ensureValid)
{
UnityEngine.Object obj;
#if UNITY_6000_3_OR_NEWER
obj = EditorUtility.EntityIdToObject(rootObjectInstanceID);
#else
obj = EditorUtility.InstanceIDToObject(rootObjectInstanceID);
#endif
return GraphReference.New(obj, parentElementGuids, ensureValid);
}
}
}