mirror of
				https://gitgud.io/c0ffeeeeeeee/rimworld-animations.git
				synced 2024-08-15 00:43:45 +00:00 
			
		
		
		
	patch operation add or replace
This commit is contained in:
		
							parent
							
								
									c3a93a448f
								
							
						
					
					
						commit
						d04ad49393
					
				
					 4 changed files with 75 additions and 8 deletions
				
			
		| 
						 | 
				
			
			@ -9,20 +9,27 @@
 | 
			
		|||
			<success>Always</success>
 | 
			
		||||
            <operations>
 | 
			
		||||
                <li Class="PatchOperationConditional">
 | 
			
		||||
                    <xpath>/Defs/Verse.ThingDef/comps</xpath>
 | 
			
		||||
                    <xpath>/Defs/ThingDef/comps</xpath>
 | 
			
		||||
                    <success>Always</success>
 | 
			
		||||
                    <nomatch Class="PatchOperationAdd">
 | 
			
		||||
                    <xpath>/Defs/Verse.ThingDef</xpath>
 | 
			
		||||
                    <value>
 | 
			
		||||
                        <comps />
 | 
			
		||||
                    </value>
 | 
			
		||||
                        <xpath>/Defs/ThingDef</xpath>
 | 
			
		||||
                        <value>
 | 
			
		||||
                            <comps />
 | 
			
		||||
                        </value>
 | 
			
		||||
                    </nomatch>
 | 
			
		||||
                 </li>
 | 
			
		||||
 | 
			
		||||
                <li Class="PatchOperationAdd">
 | 
			
		||||
                    <xpath>/Defs/ThingDef[@Name="SK_BasePawn"]/comps</xpath>
 | 
			
		||||
                    <value>
 | 
			
		||||
                        <li Class="Rimworld_Animations.CompProperties_BodyAnimator" />
 | 
			
		||||
                    </value>
 | 
			
		||||
                </li>
 | 
			
		||||
 | 
			
		||||
                <li Class="PatchOperationAdd">
 | 
			
		||||
                    <xpath>/Defs/Verse.ThingDef/comps</xpath>
 | 
			
		||||
                    <xpath>/Defs/ThingDef[@Name="BaseAnimalPawn"]/comps</xpath>
 | 
			
		||||
                    <value>
 | 
			
		||||
                    <li Class="Rimworld_Animations.CompProperties_BodyAnimator" />
 | 
			
		||||
                        <li Class="Rimworld_Animations.CompProperties_BodyAnimator" />
 | 
			
		||||
                    </value>
 | 
			
		||||
                </li>
 | 
			
		||||
            </operations>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										59
									
								
								1.3/Source/Utilities/PatchOperationAddOrReplace.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								1.3/Source/Utilities/PatchOperationAddOrReplace.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,59 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Xml;
 | 
			
		||||
using Verse;
 | 
			
		||||
 | 
			
		||||
namespace Rimworld_Animations
 | 
			
		||||
{
 | 
			
		||||
    public class PatchOperationAddOrReplace : PatchOperationPathed
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        protected string key;
 | 
			
		||||
        private XmlContainer value;
 | 
			
		||||
 | 
			
		||||
        protected override bool ApplyWorker(XmlDocument xml)
 | 
			
		||||
        {
 | 
			
		||||
            XmlNode valNode = value.node;
 | 
			
		||||
            bool result = false;
 | 
			
		||||
            IEnumerator enumerator = xml.SelectNodes(xpath).GetEnumerator();
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                while (enumerator.MoveNext())
 | 
			
		||||
                {
 | 
			
		||||
                    object obj = enumerator.Current;
 | 
			
		||||
                    result = true;
 | 
			
		||||
                    XmlNode parentNode = obj as XmlNode;
 | 
			
		||||
                    XmlNode xmlNode = parentNode.SelectSingleNode(key);
 | 
			
		||||
                    if (xmlNode == null)
 | 
			
		||||
                    {
 | 
			
		||||
                        // Add - Add node if not existing
 | 
			
		||||
                        xmlNode = parentNode.OwnerDocument.CreateElement(key);
 | 
			
		||||
                        parentNode.AppendChild(xmlNode);
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        // Replace - Clear existing children
 | 
			
		||||
                        xmlNode.RemoveAll();
 | 
			
		||||
                    }
 | 
			
		||||
                    // (Re)add value
 | 
			
		||||
                    xmlNode.AppendChild(parentNode.OwnerDocument.ImportNode(valNode.FirstChild, true));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            finally
 | 
			
		||||
            {
 | 
			
		||||
                IDisposable disposable = enumerator as IDisposable;
 | 
			
		||||
                if (disposable != null)
 | 
			
		||||
                {
 | 
			
		||||
                    disposable.Dispose();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -65,6 +65,7 @@
 | 
			
		|||
    </Reference>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Compile Include="1.3\Source\Utilities\PatchOperationAddOrReplace.cs" />
 | 
			
		||||
    <Compile Include="Properties\AssemblyInfo.cs" />
 | 
			
		||||
    <Compile Include="1.3\Source\Actors\Actor.cs" />
 | 
			
		||||
    <Compile Include="1.3\Source\Actors\AlienRaceOffset.cs" />
 | 
			
		||||
| 
						 | 
				
			
			@ -76,7 +77,7 @@
 | 
			
		|||
    <Compile Include="1.3\Source\Animations\Keyframes\Keyframe.cs" />
 | 
			
		||||
    <Compile Include="1.3\Source\Animations\Keyframes\PawnKeyframe.cs" />
 | 
			
		||||
    <Compile Include="1.3\Source\Animations\Keyframes\ThingKeyframe.cs" />
 | 
			
		||||
    <Compile Include="1.3\Source\AnimationUtility.cs" />
 | 
			
		||||
    <Compile Include="1.3\Source\Utilities\AnimationUtility.cs" />
 | 
			
		||||
    <Compile Include="1.3\Source\Comps\CompBodyAnimator.cs" />
 | 
			
		||||
    <Compile Include="1.3\Source\Comps\CompProperties_BodyAnimator.cs" />
 | 
			
		||||
    <Compile Include="1.3\Source\Comps\CompProperties_ThingAnimator.cs" />
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue