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);
            }
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #4
0
        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);
                }
            }
        }
Beispiel #5
0
 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);
 }