#if UNITY_EDITOR using System; namespace UnityEngine.U2D.Animation { public partial class SpriteResolver : ISerializationCallbackReceiver { internal static string spriteHashPropertyName => nameof(m_SpriteHash); bool m_SpriteLibChanged; /// /// Raised when object is deserialized in the Editor. /// public event Action onDeserializedCallback = () => { }; long m_SpriteLibraryModificationHash; internal long spriteLibraryModificationHash => m_SpriteLibraryModificationHash; void LateUpdateEditor() { var newSpriteLibraryModificationHash = GetCurrentSpriteLibraryAssetModificationHash(); if (m_SpriteLibraryModificationHash != newSpriteLibraryModificationHash) { ResolveSpriteToSpriteRenderer(); spriteLibChanged = true; m_SpriteLibraryModificationHash = newSpriteLibraryModificationHash; } } void OnDidApplyAnimationProperties() { if (IsInGUIUpdateLoop()) ResolveUpdatedValue(); } internal bool spriteLibChanged { get => m_SpriteLibChanged; set => m_SpriteLibChanged = value; } /// /// Called before object is serialized. /// void ISerializationCallbackReceiver.OnBeforeSerialize() { } /// /// Called after object is deserialized. /// void ISerializationCallbackReceiver.OnAfterDeserialize() { onDeserializedCallback(); } long GetCurrentSpriteLibraryAssetModificationHash() { if (spriteLibrary != null) { var spriteLibraryAsset = spriteLibrary.spriteLibraryAsset; if (spriteLibraryAsset != null) return spriteLibraryAsset.modificationHash; } return 0; } } } #endif