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…
Reference in a new issue