2022-01-16 05:40:49 +03:00

100 lines
2.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Profiling;
namespace HeurekaGames.AssetHunterPRO.BaseTreeviewImpl.DependencyGraph
{
[System.Serializable]
public class AH_DepGraphElement : TreeElement, ISerializationCallbackReceiver
{
#region Fields
[SerializeField]
private string relativePath;
/*[SerializeField]
private string assetName;*/
[SerializeField]
private Type assetType;
private Texture icon;
[SerializeField]
private string assetTypeSerialized;
#endregion
#region Properties
public string RelativePath
{
get
{
return relativePath;
}
}
public string AssetName
{
get
{
return m_Name;
}
}
public Type AssetType
{
get
{
return assetType;
}
}
public Texture Icon
{
get
{
return icon;
}
}
public string AssetTypeSerialized
{
get
{
return assetTypeSerialized;
}
}
#endregion
public AH_DepGraphElement(string name, int depth, int id, string relativepath) : base(name, depth, id)
{
this.relativePath = relativepath;
var stringSplit = relativepath.Split('/');
//this.assetName = stringSplit.Last();
this.assetType = UnityEditor.AssetDatabase.GetMainAssetTypeAtPath(relativepath);
if (this.assetType != null)
this.assetTypeSerialized = Heureka_Serializer.SerializeType(assetType);
this.icon = UnityEditor.EditorGUIUtility.ObjectContent(null, assetType).image;
}
#region Serialization callbacks
//TODO Maybe we can store type infos in BuildInfoTreeView instead of on each individual element, might be performance heavy
//Store serializable string so we can retrieve type after serialization
public void OnBeforeSerialize()
{
if (assetType != null)
assetTypeSerialized = Heureka_Serializer.SerializeType(assetType);
}
//Set type from serialized property
public void OnAfterDeserialize()
{
if (!string.IsNullOrEmpty(AssetTypeSerialized))
{
this.assetType = Heureka_Serializer.DeSerializeType(AssetTypeSerialized);
}
}
#endregion
}
}