Ejemplo n.º 1
0
        /**
         * Register XML insert patch
         */
        internal void RegisterPatch(string movie, string xpath, PrefabExtensionInsertPatch patch)
        {
            Debug.Assert(_prefabExtensionPaths.ContainsKey(patch.Name), $"Prefab extension with name {patch.Name} does not exist!");

            RegisterPatch(movie, xpath, (node) =>
            {
                var extensionNode         = LoadPrefabExtension(patch.Name);
                var importedExtensionNode = node.OwnerDocument.ImportNode(extensionNode, true);
                var position = Math.Min(patch.Position, node.ChildNodes.Count - 1);
                position     = Math.Max(position, 0);
                Debug.Assert(position >= 0 && position < node.ChildNodes.Count, $"Invalid position ({position}) for insert (patching in {patch.Name})");

                node.InsertAfter(importedExtensionNode, node.ChildNodes[position]);
            });
        }
        /// <summary>
        /// Register snippet insert patch
        /// </summary>
        /// <param name="movie"></param>
        /// <param name="xpath"></param>
        /// <param name="patch"></param>
        public void RegisterPatch(string movie, string?xpath, PrefabExtensionInsertPatch patch)
        {
            RegisterPatch(movie, xpath, node =>
            {
                var ownerDocument = node is XmlDocument xmlDocument ? xmlDocument : node.OwnerDocument !;

                var extensionNode         = patch.GetPrefabExtension().DocumentElement;
                var importedExtensionNode = ownerDocument.ImportNode(extensionNode, true);
                var position = Math.Min(patch.Position, node.ChildNodes.Count - 1);
                position     = Math.Max(position, 0);
                if (position >= node.ChildNodes.Count)
                {
                    Utils.Fail($"Invalid position ({position}) for insert (patching in {patch.Id})");
                }

                node.InsertAfter(importedExtensionNode, node.ChildNodes[position]);
            });
        }
 /// <summary>
 /// Register snippet insert patch
 /// </summary>
 /// <param name="movie"></param>
 /// <param name="xpath"></param>
 /// <param name="patch"></param>
 public void RegisterPatch(string movie, string?xpath, PrefabExtensionInsertPatch patch) => RegisterPatch(movie, xpath, node =>
 {
     if (node.OwnerDocument is not {
     } ownerDocument)
     {