private void Add(Type type, MyComponentBase component) { MyComponentBase containedComponent; if (m_components.TryGetValue(type, out containedComponent)) { if (containedComponent is IMyComponentAggregate) { (containedComponent as IMyComponentAggregate).AddComponent(component); return; } else if (component is IMyComponentAggregate) { Remove(type); (component as IMyComponentAggregate).AddComponent(containedComponent); m_components[type] = component; component.SetContainer(this); OnComponentAdded(type, component); return; } } Remove(type); if (component != null) { m_components[type] = component; component.SetContainer(this); OnComponentAdded(type, component); } }
public void Add(Type type, MyComponentBase component) { System.Diagnostics.Debug.Assert(typeof(MyComponentBase).IsAssignableFrom(type), "Unsupported type of component!"); if (!typeof(MyComponentBase).IsAssignableFrom(type)) { return; } MyComponentBase containedComponent; if (m_components.TryGetValue(type, out containedComponent)) { if (containedComponent is IMyComponentAggregate) { (containedComponent as IMyComponentAggregate).AddComponent(component); return; } else if (component is IMyComponentAggregate) { Remove(type); (component as IMyComponentAggregate).AddComponent(containedComponent); m_components[type] = component; component.SetContainer(this); OnComponentAdded(type, component); return; } } Remove(type); if (component != null) { m_components[type] = component; component.SetContainer(this); OnComponentAdded(type, component); } }
public static void RemoveComponent(this IMyComponentAggregate aggregate, MyComponentBase component) { int index = aggregate.ChildList.GetComponentIndex(component); if (index != -1) { aggregate.BeforeComponentRemove(component); component.SetContainer(null); aggregate.ChildList.RemoveComponentAt(index); } }
public static void AddComponent(this IMyComponentAggregate aggregate, MyComponentBase component) { aggregate.ChildList.AddComponent(aggregate.ContainerBase, component); component.SetContainer(aggregate.ContainerBase); aggregate.AfterComponentAdd(component); }