private void RefreshMounters_Menu() { // Design note: This process is designed to support mounters that have been linked // from other game objects. m_Mounters.PurgeDestroyed(); var seen = new System.Collections.Generic.List <IAccessoryMounter>(); // TODO: Remove this once the GUI properly prevents duplicates. for (int i = m_Mounters.Count - 1; i >= 0; i--) { if (seen.Contains(m_Mounters[i])) { m_Mounters.Remove(m_Mounters[i]); } else { seen.Add(m_Mounters[i]); } } var refreshItems = GetComponents <IAccessoryMounter>(); if (refreshItems.Length == 0) { return; // Leave existing alone. } var items = new System.Collections.Generic.List <IAccessoryMounter>(refreshItems.Length); for (int i = 0; i < m_Mounters.Count; i++) { if (m_Mounters[i] != null) { items.Add(m_Mounters[i]); } } // Add new items to end. foreach (var refreshItem in refreshItems) { if (!items.Contains(refreshItem)) { items.Add(refreshItem); } } AccessoryMounterGroup.UnsafeReplaceItems(this, m_Mounters, items.ToArray()); }
/// <summary> /// Replaces all current mounters with the provided mounters. /// </summary> /// <remarks> /// <para> /// Behavior is undefined if this method if used after accessory initialization. /// </para> /// <para> /// If <paramref name="asReference"/> is true, then all external references to the /// mounters array must be discared or behavior will be undefined. /// </para> /// </remarks> /// <param name="accessory">The accessory. (Required)</param> /// <param name="asReference">If true the accessory will use the reference to the array. /// Otherwise the array will be copied.</param> /// <param name="mountPoints">The mounters, or null to clear all mounters.</param> public static bool UnsafeReplaceMounters(StandardAccessory accessory, params IAccessoryMounter[] mounters) { AccessoryMounterGroup.UnsafeReplaceItems(accessory, accessory.m_Mounters, mounters); return(true); }