/// <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(); }
public sealed override void RemoveObserver(IOutfitObserver observer) { Observers.Remove(observer); }
/// <summary> /// Remove the specified event listener. /// </summary> /// <param name="observer">The observer to remove. (Required)</param> public abstract void RemoveObserver(IOutfitObserver observer);
public sealed override bool AddObserver(IOutfitObserver observer) { return(Observers.Add(observer, this) != -1); }
/// <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);