void ISerializationCallbackReceiver.OnBeforeSerialize() { if (ReferenceEquals(_target, null)) { return; } // Unity's null equality check is buggy. It doesn't always return // true if the object has been destroyed if the type of _target is // UnityObject. try { var target = new fiUnityObjectReference(_target, /*tryRestore:*/ false); if (fiPersistentMetadata.HasMetadata(target) == false) { return; } var metadata = fiPersistentMetadata.GetMetadataFor(target); if (metadata.ShouldSerialize()) { metadata.Serialize(out _keys, out _values); } } catch (MissingReferenceException e) { fiLog.Log(typeof(fiGraphMetadataSerializer <TPersistentData>), "Caught exception {0}", e); } }
public static T Read <T>(UnityObject key_) where T : new() { var key = new fiUnityObjectReference(key_); fiBaseStorageComponent <T> storage; if (fiLateBindings.EditorUtility.IsPersistent(key.Target)) { storage = GetStorageDictionary <T>(PrefabStorage); } else { storage = GetStorageDictionary <T>(SceneStorage); } if (storage.Data.ContainsKey(key.Target)) { return(storage.Data[key.Target]); } var value = storage.Data[key.Target] = new T(); fiLateBindings.EditorUtility.SetDirty(storage); return(value); }
public void RestoreData(fiUnityObjectReference target) { _target = target.Target; if (_keys != null && _values != null) { fiPersistentMetadata.GetMetadataFor(target).Deserialize(_keys, _values); } }
public static void Reset(UnityObject target_) { var target = new fiUnityObjectReference(target_); if (s_metadata.ContainsKey(target)) { s_metadata.Remove(target); for (int i = 0; i < s_providers.Length; ++i) { s_providers[i].Reset(target.Target); } } }
public static fiGraphMetadata GetMetadataFor(UnityObject target_) { var target = new fiUnityObjectReference(target_); fiGraphMetadata metadata; if (s_metadata.TryGetValue(target, out metadata) == false) { // Make sure that we update the s_metadata instance for target before initializing all of the providers, // as some of the providers may recurisvely call into this method to fetch the actual fiGraphMetadata // instance during initialization. metadata = new fiGraphMetadata(target); s_metadata[target] = metadata; for (int i = 0; i < s_providers.Length; ++i) { s_providers[i].RestoreData(target.Target); } } return metadata; }
public static void Reset <T>(fiUnityObjectReference key) { fiBaseStorageComponent <T> storage; if (fiLateBindings.EditorUtility.IsPersistent(key.Target)) { storage = GetStorageDictionary <T>(PrefabStorage); } else { storage = GetStorageDictionary <T>(SceneStorage); } storage.Data.Remove(key.Target); fiLateBindings.EditorUtility.SetDirty(storage); }
public static void Reset(fiUnityObjectReference target) { if (s_metadata.ContainsKey(target)) { s_metadata.Remove(target); fiLateBindings.EditorApplication.InvokeOnEditorThread(() => { for (int i = 0; i < s_providers.Length; ++i) { s_providers[i].Reset(target); } }); } }
public static bool HasMetadata(fiUnityObjectReference target) { return s_metadata.ContainsKey(target); }
public void Reset(fiUnityObjectReference target) { fiPersistentEditorStorage.Reset <TStorage>(target); }
public void RestoreData(fiUnityObjectReference target) { fiPersistentEditorStorage.Read <TStorage>(target).RestoreData(target); }