/// <summary>
        /// Add the observer to the outfit with proper change tracking.
        /// </summary>
        /// <remarks>
        /// <para>
        /// It is safe to use this method to add an existing observer.  In this case the update will force a
        /// change record.  (Useful when the observer has already been added, but wasn't properly recorded
        /// for serialization.)
        /// </para>
        /// </remarks>
        /// <param name="outfit">The outfit. (Required)</param>
        /// <param name="observer">The observer to add, or to update so it has change tracking. (Required)</param>
        public static void AddObserverWithUndo(Outfit outfit, IOutfitObserver observer)
        {
            // Design note: Adding an observer can sometimes fail when added using the standard method.
            // Don't know why yet.  This method works in all cases.

            var obj = (Object)observer;

            var so   = new UnityEditor.SerializedObject(outfit);
            var prop = so.FindProperty("m_Observers.m_Items");
            int idx  = -1;

            for (int i = 0; i < prop.arraySize; i++)
            {
                if (prop.GetArrayElementAtIndex(i).objectReferenceValue == obj)
                {
                    prop.GetArrayElementAtIndex(idx).objectReferenceValue = null;
                    idx = i;
                    break;
                }
            }

            if (idx == -1)
            {
                idx = prop.arraySize;
                prop.arraySize++;
            }

            prop.GetArrayElementAtIndex(idx).objectReferenceValue = obj;
            so.ApplyModifiedProperties();
        }
Exemplo n.º 2
0
 public sealed override void RemoveObserver(IOutfitObserver observer)
 {
     Observers.Remove(observer);
 }
Exemplo n.º 3
0
 /// <summary>
 /// Remove the specified event listener.
 /// </summary>
 /// <param name="observer">The observer to remove. (Required)</param>
 public abstract void RemoveObserver(IOutfitObserver observer);
Exemplo n.º 4
0
 public sealed override bool AddObserver(IOutfitObserver observer)
 {
     return(Observers.Add(observer, this) != -1);
 }
Exemplo n.º 5
0
 /// <summary>
 /// Add the specified event observer.
 /// </summary>
 /// <remarks>
 /// <para>
 /// An observer can only be added once and it must be implmented by a UnityEngine.Object for serialization
 /// puposes.
 /// </para>
 /// </remarks>
 /// <param name="observer">The observer to add. (Required. Must be a UnityEngine.Object.)</param>
 /// <returns>
 /// True if the observer was accepted or already added, or false if the observer is not implemented by
 /// a UnityEngine.Object.
 /// </returns>
 public abstract bool AddObserver(IOutfitObserver observer);