/// <inheritdoc/> protected override void OnContentChanged([NotNull] MemberNodeChangeEventArgs args) { RelinkToOwnerPart((IAssetNode)args.Member, args.NewValue); base.OnContentChanged(args); }
private void BasePrefabChanged(object sender, MemberNodeChangeEventArgs e) { UpdateSourcePrefab(); }
private void ValueChanged(object sender, MemberNodeChangeEventArgs e) { UpdateLink(); }
private void ContentChanged(object sender, MemberNodeChangeEventArgs e) { Changed?.Invoke(sender, e); }
private void ContentChanged(object sender, MemberNodeChangeEventArgs e) { // Make sure that we have item ids everywhere we're supposed to. AssetCollectionItemIdHelper.GenerateMissingItemIds(e.Member.Retrieve()); // Clear the cached item identifier collection. collectionItemIdentifiers = null; var node = (AssetMemberNode)e.Member; if (node.IsNonIdentifiableCollectionContent) { return; } // Create new ids for collection items var baseNode = (AssetMemberNode)BaseContent; var isOverriding = baseNode != null && !PropertyGraph.UpdatingPropertyFromBase; var removedId = ItemId.Empty; switch (e.ChangeType) { case ContentChangeType.ValueChange: case ContentChangeType.CollectionUpdate: break; case ContentChangeType.CollectionAdd: { var collectionDescriptor = e.Member.Descriptor as CollectionDescriptor; var itemIds = CollectionItemIdHelper.GetCollectionItemIds(e.Member.Retrieve()); // Compute the id we will add for this item ItemId itemId; if (baseNode != null && PropertyGraph.UpdatingPropertyFromBase) { var baseCollection = baseNode.Retrieve(); var baseIds = CollectionItemIdHelper.GetCollectionItemIds(baseCollection); itemId = itemIds.FindMissingId(baseIds); } else { itemId = restoringId != ItemId.Empty ? restoringId : ItemId.New(); } // Add the id to the proper location (insert or add) if (collectionDescriptor != null) { if (e.Index != Index.Empty) { itemIds.Insert(e.Index.Int, itemId); } else { throw new InvalidOperationException("An item has been added to a collection that does not have a predictable Add. Consider using NonIdentifiableCollectionItemsAttribute on this collection."); } } else { itemIds[e.Index.Value] = itemId; } } break; case ContentChangeType.CollectionRemove: { var collectionDescriptor = e.Member.Descriptor as CollectionDescriptor; if (collectionDescriptor != null) { var itemIds = CollectionItemIdHelper.GetCollectionItemIds(e.Member.Retrieve()); removedId = itemIds.DeleteAndShift(e.Index.Int, isOverriding); } else { var itemIds = CollectionItemIdHelper.GetCollectionItemIds(e.Member.Retrieve()); removedId = itemIds.Delete(e.Index.Value, isOverriding); } } break; default: throw new ArgumentOutOfRangeException(); } // Don't update override if propagation from base is disabled. if (PropertyGraph?.Container?.PropagateChangesFromBase == false) { return; } // Mark it as New if it does not come from the base if (baseNode != null && !PropertyGraph.UpdatingPropertyFromBase && !ResettingOverride) { if (e.ChangeType != ContentChangeType.CollectionRemove) { if (e.Index == Index.Empty) { OverrideContent(!ResettingOverride); } else { OverrideItem(!ResettingOverride, e.Index); } } else { OverrideDeletedItem(true, removedId); } } }